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 :

optimisation de la fonction de contrainte par la méthode des moindres carré


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 6
    Points
    6
    Par défaut optimisation de la fonction de contrainte par la méthode des moindres carré
    bonjour à tous,
    j'ai un problème que ça fait un bout de temps que je tourne rond et j'arrive pas à m'en sortir, voilà: je fait l'étude d'une fonction contrainte dont je doit identifier les paramètres p(1), p(2) et p(3) sachant les valeurs numérique de celle ci en certain points, j'ai trouvé un code qui est supposé répondre à ma requête seulement il ne m'affiche aucun résultat
    voici le code source
    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
    close all;
    clear all;
    clc;
    x=[10800 43200 86400 172800 604800];  %input of f (it's time in second)
    y=[0.32454 0.37863 0.5409 0.64908 0.75726]; %output of f
    p0=[5 10 30]; %initialisation des paramètre qui est aléatoire
    tol=1;
    N = length(x);
    f = @model_func_exp;
    F0 = y;
    M = length(p0);
    p = p0; 
    norm_dp = 10*tol;
    while norm_dp > tol
    for i = 1:N
    F(i) = f(x(i), p, 0);
    for j = 1:M
    J(i,j) = f(x(i), p, j);
    end
    end
    H = J'*J;
    b = -J'*(F-F0)';
    dp = (H\b)';
    norm_dp=sqrt(dp*dp');
    p = p + dp; 
    end
    plot(y)
    et voici la fonction f
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function y = model_func_exp(x, p, k)
    if k==0
    y = p(1)*atanh(tanh((1/p(1))*(32.2-p(2))))*exp(-(2*p(3)*x)/p(1))+p(2);
    elseif k==1
    y = (atanh(tanh((32.2-p(2))/p(1)))+((p(2)-32.2)/p(1))*(1/(cosh((32.2-p(2))/p(1))*cosh((32.2-p(2))/p(1))))*(1/(1-(tanh((32.2-p(2))/p(1))*tanh((32.2-p(2))/p(1)))))+(2*p(3)*x/p(1))*atanh(tanh((1/p(1))*(32.2-p(2)))))*exp(-(2*p(3)*x)/p(1));
    elseif k==2
    y =   p(1)*exp(-(2*p(3)*x)/p(1))*(-1/p(1))*(1/(cosh((32.2-p(2))/p(1))*cosh((32.2-p(2))/p(1))))*(1/(1-(tanh((32.2-p(2))/p(1))*tanh((32.2-p(2))/p(1)))))+1;
    elseif k==3
      y = -2*x*atanh(tanh((1/p(1))*(32.2-p(2))))*exp(-(2*p(3)*x)/p(1));  
    end
    ici le message d'erreur
    Warning: Matrix is singular to working precision. 
    > In code at 23 (càd dp = (H\b)')
    RQ: je n'ai aucune idée sur les valeurs initiales de p0 donc ils sont aléatoires

  2. #2
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Sur R2011a, ton code tourne sans aucun problème (EDIT: j'ai aussi le Warning: Matrix is singular to working precision.> In code at 23 (càd dp = (H\b)')) et m'affiche ce résultat :



    Sinon, peut-être que ce thread t'intéressera si tu es forcé d'utiliser une vieille version de MATLAB : http://www.mathworks.com/matlabcentr..._thread/170201
    Images attachées Images attachées  

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 6
    Points
    6
    Par défaut
    le problème est que j'ai besoin qu'il m'affiche les valeurs des paramètres en plus que la courbe c'est ça le plus important, c'est vrai il m'affiche la courbe comme t'as obtenu mais j'ai besoin des valeurs des paramètres

  4. #4
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Quelle ligne de code est censée afficher les paramètres ?

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 6
    Points
    6
    Par défaut
    les résultats sont censés être afficher dans la fenêtre des commandes j'ai déjà essayé le même code avec une fonction plus simple :à 2 paramètres et ça marché, je n'ai reine changé à part la fonction à optimiser

  6. #6
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    les résultats sont censés être afficher dans la fenêtre des commandes
    Sauf erreur de ma part, toutes les lignes susceptibles d'afficher un résultat dans la fenêtre de commande se finissent dans code par ";", ce qui masque l'affichage. Cela me semble donc normal que rien ne s'affiche dans la fenêtre de commande étant donné le code actuel.

Discussions similaires

  1. [Débutant] Approximation de donnees experimentales par la methode des moindres carres
    Par German Trainee dans le forum Langages
    Réponses: 0
    Dernier message: 23/09/2014, 14h42
  2. Réponses: 1
    Dernier message: 10/01/2014, 16h38
  3. Réponses: 3
    Dernier message: 30/06/2013, 18h04
  4. Méthode des moindres carrés, fonction sinusoidale
    Par Lorddolf dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/06/2012, 08h55
  5. Equation du cercle par la méthode des moindres carrés
    Par olivier21c dans le forum MATLAB
    Réponses: 1
    Dernier message: 29/03/2009, 20h10

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