IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

fonction fsolve


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 54
    Par défaut
    Bonjour a tous,
    j'ai un probleme avec la fonction fsolve, malgré l'aide et mes recherches sur interne je n'ai pas trouvé la solution donc j'ai besoin de vous...

    je suis sur que vous allez trouver tres vite mon probleme car je ne suis pas doué...

    voila j'ai codé ca et il me met tjr une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     z=0.5;
        result= fsolve(Tension_permanente(vyt5_linear(z),vyt20_linear(z),vyt40_linear(z),i(2),Temp,tfloat,age)+(-e(2)+r*(ucalcul*(1/u(2)))),z);

    ucalcul = P/N => r*(P/N)*(1/u)
    je veux juste que fsolve me donne la valeur pour laquelle mon equation U-E+r*ucalcul*(1/u)=0

    mais j'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Error using ==> lsqfcnchk at 111
    FUN must be a function, a valid string expression,
    or an inline function object.
     
    Error in ==> fsolve at 182
        funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag);
     
    Error in ==> batterie_cadmium_nickel at 292
        result=
        fsolve(Tension_permanente(vyt5_linear(z),vyt20_linear(z),vyt40_linear(z),i(2),Temp,tfloat,age)+(-e(2)+r*(ucalcul*(1/u(2)))),z);
    en cherchant sur internet j'ai trouvé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     z0=0.5;
    F=@(z)(Tension_permanente(vyt5_linear(z),vyt20_linear(z),vyt40_linear(z),i(2),Temp,tfloat,age)+(-e(2)+r*(ucalcul*(1/u(2)))));
     
        result= fsolve(F,z0)
    mais le résultat n'est pas le bon je devrais trouver 0.973 et il me met 3.374 la différence est enorme ...


    je ne sais vraiment pas comment m'en sortir aider moi svp !

    j'ai l'impression que matlab va chercher une valeur égale à 0 trop loin (environ a 10^-4) ...

    merci

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Salut,

    j'ai lu ton autre message dans la discussion "Problème avec fsolve".


    Si je comprends bien tu as plusieurs minima locaux qui sont assez proche?

    La fonction fsolve peut être paramétrée avec optimset.

    Par exemple pour augmenter la tolérance sur la minimisation de f, il faut modifier Tolfun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result= fsolve(F,z0,optimset('TolFun',1e-4))
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 54
    Par défaut
    merci pour ta réponse je pense effectivement que la solution de mon probleme passe par les options de fsolve

    mais en faisant comme tu m'as dit il m'affiche 0 comme résultat et meme en modifiant la valeur de 1e-4 cela ne change rien...


    j'avoue que j'ai du mal a savoir ce qu'il faut faire ...

    quelqu'un pour m'expliquer?

    merci

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Que vaut ta fonction en 0?

    Pourquoi cherches-tu un zéro en 0.973? pourquoi celui-là t'intéresse-t-il plus que celui en 3.374?

    Sans avoir la totalité de ta fonction et ce que tu cherches, ça va être difficile de te répondre plus précisément...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 54
    Par défaut
    hello,

    oui effectivement il faut que je précise.

    je ne fais que reporter un code mathcad en matlab et donc j'ai deja qque valeurs reférences dont celle la mais je galere trop et j'y arrive pas...

    et maintenant il ne me met plus 3.974 mais -0.045 (environ).
    apres ma fonction tension_permanente est une fonction assez compliquée et longue, mais je trouve mes points par interpolation sur une courbe.

    peux tu m'expliquer les options que l'on met a fsolve car meme avec l'aide je n'y comprend pas grand chose... merci


    si tu as d'autres points que tu veux que je te précise demande ..

    merci

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Ben je ne pourrais pas te dire grand chose en plus de ce qu'il y a sur l'aide...

    Il m'est déjà arrivé d'utiliser fsolve et ça fonctionnait plutôt bien.

    As-tu essayer de tracer ta fonction?
    Es-tu sûr de faire la même chose que sous mathcad?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

Discussions similaires

  1. la fonction fsolve
    Par arhemza dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/04/2015, 19h55
  2. Problème avec la fonction fsolve
    Par VegaLyra dans le forum Scilab
    Réponses: 2
    Dernier message: 01/03/2011, 14h59
  3. problème fonction fsolve
    Par nini94 dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/06/2008, 18h03
  4. fsolve & paramètres de la fonction anonyme
    Par Mathusalem dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/07/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo