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 :

Systèmes d'équations non linéaire et optimisation avec l'algorithme Levenberg-Marquardt


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Systèmes d'équations non linéaire et optimisation avec l'algorithme Levenberg-Marquardt
    Bonjour,
    Je suis débutant en Matlab, je travaille actuellement sur une modélisation d'une réaction chimique. Le système est composé d'une série de temps et 7 séries d'espèces (des concentrations chimiques).
    L'algorithme Levenberg-Marquardt me permet d'ajuster mes paramètres pour que l'écart entre les valeurs théoriques et expérimentales (xexpvect et yexpvect) soit le plus faible possible.
    Je sèches sur un message d'erreur:
    Error using lsqncommon (line 67)
    The Levenberg-Marquardt algorithm does not handle bound constraints and the trust-region-reflective algorithm
    requires at least as many equations as variables; aborting.
    
    Dans mon code j'ai bien défini un intervalle pour mes paramètres ainsi qu'une valeur initiale. Du coup ce que je comprends de l'erreur, c'est qu'il y a 9 variables pour 7 systèmes d'équations et c'est ce qui pose problème.
    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
    global wbeta
    y=zeros(7,1); %fait ressortir les équations en vecteur colonne;
     
    y(1)=-y(1)*wbeta(1);
     
    y(2)=y(1)*wbeta(1)-y(2)*wbeta(2);
     
    y(3)=y(2)*wbeta(3)-y(3)*wbeta(4)-y(3)*wbeta(5)-y(3)*wbeta(6);
     
    y(4)=y(3)*wbeta(4)-y(4)*wbeta(7);
     
    y(5)=y(3)*wbeta(5)-y(5)*wbeta(8);
     
    y(6)=y(3)*wbeta(6)-y(6)*wbeta(9);
     
    y(7)=y(4)*wbeta(7)+y(5)*wbeta(8)+y(6)*wbeta(9);
     
    beta0=[k1,k2,k3,k4,k5,k6,k7,k8,k9];
    beta0lb=[k1lb,k2lb,k3lb,k4lb,k5lb,k6lb,k7lb,k8lb,k9lb];
    beta0ub=[k1ub,k2ub,k3ub,k4ub,k5ub,k6ub,k7ub,k8ub,k9ub];
     
    options = optimset('Algorithm',{'levenberg-marquardt',0.0005},'MaxIter', 800,'TolX',1e-20,...;
        'TolFun',1e-20,'MaxFunEvals', 2000);
    [beta,resnorm,residual,exitflag,output,lambda,jacobian]= lsqnonlin(...
     'FunLSQ',beta0,beta0lb,beta0ub,options);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function res=FunLSQ(beta)
    [t,y]=ode45('DiffEqFun',(min(xexpvect(:, 1)):max(xexpvect(:, 1))),yexp0);
    J'ai mis l'ensemble des fichiers en dossier compressé. Merci à ceux qui pourront me donner un coup de main.

    P.S: Je débute en MATLAB, désolé si le code ne respecte pas la mise en forme standard.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Débutant] Résolution d'un système d'équations non-linéaires
    Par nicollivier dans le forum MATLAB
    Réponses: 9
    Dernier message: 09/12/2009, 17h32
  2. système d'équation non linéaire
    Par Medde dans le forum Mathématiques
    Réponses: 5
    Dernier message: 11/07/2009, 16h53
  3. Solveur de systèmes d'équations non linéaires
    Par teska dans le forum Langage
    Réponses: 5
    Dernier message: 11/12/2008, 17h07
  4. Réponses: 0
    Dernier message: 01/10/2008, 15h14
  5. Réponses: 1
    Dernier message: 14/02/2007, 11h12

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