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 :

estimation paramétrique dans des équations différentielles ordinaires


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut estimation paramétrique dans des équations différentielles ordinaires
    Bonjour,
    j'ai un système d'équations différentielles à résoudre;le code du système est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    function dyp= sys (t,yp,p1,p2)
        dyp(1)= -p1.*yp(1).*yp(2)-p2.*yp(1).*yp(3);
        dyp(2)=-p1.*yp(1).*yp(2);
        dyp=dyp';
    end
    pour la resolution , j'ai crée le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function [t,yp]=reso (p1,p2)
    init = [0:10:2000];
    yp0 = [1  1  0];
    [t,yp]=ode45 (@(t,yp) sys(t,yp,p1,p2),init, yp0);
    end
    Mon but est de chercher les paramètres p1 et p2 qui minimisent l'écart en moindres carrés entre y (valeurs expérimentales) et yp.
    Pour celà, j'ai défini la fonction en moindre carré dans le fichier suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    function critere=CRT(p1,p2,t,yp,y);
    critere=sum((y-reso(p1,p2)).^2);
        end
    ainsi que la fonction partielle suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    obj=@(p1,p2) CRT(p1,p2,t,yp);
    et finalement la fonction fmincon dans le fichier suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    p0=[0.001;0.0005];
    A=[1 1 ; -1 -1];
    b=[0.006 ; -0.0015];
    [p,fval]=fmincon(@obj, p0,A,b);
    le problème c'est que j'ai toujours des erreurs et j'ai pas su comment le résoudre
    merci de m'aider ladessus

  2. #2
    Invité
    Invité(e)
    Par défaut
    Dans un premier temps, il te faut enlever le symbole @ (qui ne doit pas être utilisé pour des fonctions anonymes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [p,fval]=fmincon(obj, p0,A,b);
    Ensuite je remarque le vecteur d'initialisation yp0 = [1 1 0]; de trois valeurs alors que dyp dans la fonction sys n'en compte que 2.
    Puis la définition de la fonction CRT n'est pas bonne, je verrais plutôt quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function erreur = CRT(p,y_exp)
    erreur=sum((y_exp-reso(p(1),p(2))).^2);
    Mais cependant, définissant CRT ainsi, tu aurais juste à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    obj = @(p) CRT(p,y_exp); 
    [p,fval]=fmincon(obj, p0,A,b);

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    je l'ai essayé mais ça n'a pas marché!!
    ça m'affiche l'erreur suivante:
    ??? Undefined function or variable 'p1'.
    
    Error in ==> @(p)CRT(p1,p2,y)
    
    
    Error in ==> fmincon at 540
          initVals.f = feval(funfcn{3},X,varargin{:});
    
    Error in ==> estimation at 5
    [p,fval]=fmincon(obj,p0,A,b);
    Caused by:
        Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans ton erreur, je vois la ligne alors que j'avais mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    obj = @(p) CRT(p,y_exp); 
    [p,fval] = fmincon(obj, p0,A,b);

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/12/2021, 17h13
  2. Résolution numérique des équations différentielles
    Par safa2014 dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/12/2013, 01h12
  3. résolution des équations différentielles
    Par mouna19 dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/05/2011, 10h52
  4. estimation paramétrique dans des EDO
    Par touttty15 dans le forum MATLAB
    Réponses: 1
    Dernier message: 05/05/2011, 12h01
  5. [Débutant] résoudre des équations différentielles algébriquement
    Par rastapote dans le forum MATLAB
    Réponses: 5
    Dernier message: 23/02/2010, 08h24

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