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 :

pb de solution methode de newton-raphson


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 26
    Points
    26
    Par défaut pb de solution methode de newton-raphson
    Bonjour à tous,

    Voila après avoir programmé la résolution de mon systeme à 2 inconnues par la méthode newton-raphson, celle ci marche parfaitement or pour certains points je ne vois pas pourquoi il me ressort des solutions imaginaires (nottament avec la valeur P et T du code que j'ai mis dessous) . Sur 39 jeux de données j'en ai que 28 dù à ce probleme de solutions imaginaires?

    Je n'arrive pas à comprendre pourquoi il me ressort une solution imaginaire alors que dans le cas P=0.2 et T=1473 ça marche super.

    Pourriez vous me donner un tuyau si il en existe uN?
    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    clear all
    Ue=3.335E4
    Ve=5.890E2
    Se=1.652E1
    Wsce=-1.165E1
    Wscd=-8.092E0
    Wso=-2.041E1
    Ud=4.546E4
    Vd=1.846E3
    Sd=2.902E1
     
    cpx(1)=0.8023
    opx(1)=0.0805
    R=8.3146
     
    tol=1e-6
     
    P=1.5
    T=1273
                for i=2:20
     
     
    F1=Ue+P*Ve-Se*T+R*T*log((1-cpx(i-1))/(1-opx(i-1)))-(cpx(i-1))^2*T*Wsce-2*(cpx(i-1))^2*(1-cpx(i-1))*T*(Wscd-Wsce)-(opx(i-1))^2*(-Wso*T);
     
    F2=Ud+Vd*P-Sd*T+R*T*log(opx(i-1)/cpx(i-1))+(1-cpx(i-1))^2*T*Wscd+2*(1-cpx(i-1))^2*cpx(i-1)*T*(Wsce-Wscd)+(1-opx(i-1))^2*(-Wso*T);
    f=[F1;F2];
     
       dF1_cpx=(-R*T)/(1-cpx(i-1))-2*cpx(i-1)*T*Wsce-4*cpx(i-1)*(1-cpx(i-1))*T*(Wscd-Wsce)+2*(cpx(i-1))^2*T*(Wscd-Wsce);
     
    dF1_opx=(R*T)/(1-opx(i-1))-2*opx(i-1)*(-Wso*T);
     
     
    dF2_cpx=(-R*T)/cpx(i-1)-2*(1-cpx(i-1))*T*Wscd-4*(1-cpx(i-1))*cpx(i-1)*T*(Wsce-Wscd)+2*(1-cpx(i-1))^2*T*(Wsce-Wscd);
     
    dF2_opx=(R*T)/opx(i-1)-2*(1-opx(i-1))*(-Wso*T);
     
     
    df=[dF1_cpx,dF1_opx,dF2_cpx,dF2_opx];
    J=inv([dF1_cpx,dF1_opx;dF2_cpx,dF2_opx]);
    %les solutions
    xy=[cpx(i-1) opx(i-1)]'-J*[F1,F2]';
     
    cpx(i)=xy(1)
    opx(i)=xy(2)
     
    donnees=[cpx;opx]'
     
    end

  2. #2
    Invité
    Invité(e)
    Par défaut
    Fais un dessin de ta fonction (si tu peux) et vérifie ton algorithme avec le site de Numerical Recipes (recettes numériques)
    http://www.nr.com/

    Sinon tu auras peut-être plus de réponses sur ce forum : Algorithmes > Maths
    Dernière modification par Jerome Briot ; 14/03/2008 à 10h53.

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut !

    Quelques remarques sur ton code:

    • Il est toujours dangereux de définir dans MatLab des variables nommées i ou j à cause du risque de confusion avec l'unité imaginaire.
    • Tu calcules des variables f et df, mais je ne vois pas ce que tu en fais.
    • Pourquoi n'utilises-tu pas le signe ; pour construire les vecteurs colonnes dans l'expression de xy ?
    • Pourquoi n'utilises-tu pas l'opérateur \ au lieu de multiplier par l'inverse de la matrice J ?


    Cela étant, pour déboguer ton programme, après avoir corrigé tout ce que je t'ai indiqué ci-dessus, enlève tous les ; en fin de lignes et regarde où et quand un nombre complexe apparaît.

    Jean-Marc Blanc

Discussions similaires

  1. Optimisation avec la methode de Newton raphson et Dichotomie
    Par Mehdi_youssoufi dans le forum Mathématiques
    Réponses: 0
    Dernier message: 12/06/2014, 16h08
  2. Methode Newton Raphson pour cellule photovoltaïque
    Par the cameleon dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/03/2013, 09h27
  3. [Débutant] methode de newton raphson sans la connaissance de f(x)
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 14
    Dernier message: 20/04/2010, 17h24
  4. la methode de newton raphson(essai)
    Par crippella dans le forum MATLAB
    Réponses: 17
    Dernier message: 10/03/2010, 16h17
  5. la methode newton-raphson sur matlab
    Par crippella dans le forum Mathématiques
    Réponses: 2
    Dernier message: 02/02/2010, 11h27

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