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 :

Passage de variables dans un code d'optimisation


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 Passage de variables dans un code d'optimisation
    bonjour,
    je suis en train de faire un programme sur matlab pour l'optimisation des paramètres d'une fonction, ce code contient 2 fonctions et un code principal. Voici le contenu:
    fonction 1(fonction à optimiser les paramètres a1 et a2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function y = f(a,x)
    y=3.2-(17496*(35.95.^3)*(a(1)*x).^(3/(a(2)-1))*sinh((35.95.^(a(2)-1))*a(1)*x)/((a(2)-1)*(a(2)+2)));
    end
    fonction 2: erreur entre les yi(sortie expérimentale) et f(xi,a) la fonction théorique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function out = F (a)
    global xi yi
    out = sum ( (yi - f(a,xi)).^2 );
    end
    code principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    global xi yi	 
    xi = [10800 43200 86400 172800 604800];
    yi = [0.6 0.7 1 1.2 1.4];
    a0 = [0.1 15]; %initialisation aléatoire des paramètres dont je ne dispose d'aucune idée concernant leur estimation
    asol = fminsearch ( 'F', a0);
    plot (pi, yi, '*', xi, f(asol, xi))
    cependant un message d'erreur m'apparait et ceci le contenu:
    ??? Input argument "a" is undefined.
    
    Error in ==> f at 2
    y=3.2-(17496*(35.95.^3)*(a(1)*x).^(3/(a(2)-1))*sinh((35.95.^(a(2)-1))*a(1)*x)/((a(2)-1)*(a(2)+2)));
     
    ??? Input argument "a" is undefined.
    
    Error in ==> E at 3
    out = sum ( (yi - f(a,xi)).^2 );
     
    ??? Error using ==> mtimes
    Inner matrix dimensions must agree.
    
    Error in ==> f at 2
    y=3.2-(17496*(35.95.^3)*(a(1)*x).^(3/(a(2)-1))*sinh((35.95.^(a(2)-1))*a(1)*x)/((a(2)-1)*(a(2)+2)));
    
    Error in ==> E at 3
    out = sum ( (yi - f(a,xi)).^2 );
    
    Error in ==> fminsearch at 205
    fv(:,1) = funfcn(x,varargin{:});
    
    Error in ==> optimum at 5
    asol = fminsearch ( 'E', a0);
     
    et comme je suis débutante en matlab je n'arrive pas à corriger cette erreur, d'après ce que j'ai compris beaucoup d'entrée pour f, mais ce ne sont que 5 entrée

  2. #2
    Membre habitué
    Homme Profil pro
    doctorant
    Inscrit en
    Décembre 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : doctorant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 101
    Points : 148
    Points
    148
    Par défaut
    c'est pas ça qu'il faut mettre plutôt?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    asol = fminsearch ( @F, a0);

  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
    c'est un cours que j'ai trouvé sur le net, je n'ai fait que y insérer mes données à savoir xi, yi et a0, et voici le lien http://nte.mines-albi.fr/MATLAB/co/uc_NonLineaire.html
    cependant j'ai essayé ce que vous avez suggérer mais ça n'a pas marché, le message d'erreur est:
    ??? Input argument "x" is undefined.
    
    Error in ==> f at 2
    y=3.2-(17496*(35.95.^3)*(a(1)*x).^(3/(a(2)-1))*sinh((35.95.^(a(2)-1))*a(1)*x)/((a(2)-1)*(a(2)+2)));
    
    Error in ==> fminsearch at 205
    fv(:,1) = funfcn(x,varargin{:});
    
    Error in ==> optimum at 5
    asol = fminsearch ( @F, a0);

  4. #4
    Membre habitué
    Homme Profil pro
    doctorant
    Inscrit en
    Décembre 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : doctorant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 101
    Points : 148
    Points
    148
    Par défaut
    j'ai fait ça est sa passe sur mon matlab

    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
    function main
    global xi yi	 
    xi = [10800 43200 86400 172800 604800];
    yi = [0.6 0.7 1 1.2 1.4];
    a0 = [0.1 15]; %initialisation aléatoire des paramètres dont je ne dispose d'aucune idée concernant leur estimation
    asol = fminsearch ( @F, a0);
    plot (pi, yi, '*', xi, f(asol, xi))
    
    
    function y = f(a,x)
    y=3.2-(17496*(35.95.^3)*(a(1)*x).^(3/(a(2)-1))*(sinh((35.95.^(a(2)-1))*a(1)*x)/((a(2)-1)*(a(2)+2)))');
    	
    
    function out = F(a)
    global xi yi
    out = sum ( (yi - f(a,xi)).^2 );
    j'ai changer une partie de l’équation parce que tu tu multiplie deux vecteur colonne et du coup sa passe pas. il faudra voir si les équations sont bonnes.

  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
    l'équation de f est bonne c un résultat de thèse, mais si j'affiche le résultat de asol qui est la solution obtimum de a(1) et a(2) ça m'affiche toujours le vecteur d'initialisation càd a0 c'est à dire que le code ne m'a pas trouvé l'optimum
    ça m'affiche ce message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Exiting: Maximum number of function evaluations has been exceeded
             - increase MaxFunEvals option.
             Current function value: Inf 
     
     
    asol =
     
        0.1000   15.0000

  6. #6
    Membre habitué
    Homme Profil pro
    doctorant
    Inscrit en
    Décembre 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : doctorant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 101
    Points : 148
    Points
    148
    Par défaut
    pour tes paramètres ta sinus hyperbolique te donne ds valeur infini. c pour ça qu'il te met cet erreur.

    as tu essayé avec d'autres paramètres?

  7. #7
    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
    pour mes paramètres je les ai modifié mais toujours rien, en fait l'équation initiale était une différence entre deux sommes infinies et c'était une équation très compliqué, j'ai essayé de la simplifier et c'est comme ça que j'ai obtenu la sinus hyperbolique mais apparemment c'est pas ça la solution, ci joint un résumé du pb si ça vous intéresse. la première ligne est l'équation initiale
    Images attachées Images attachées  

  8. #8
    Membre habitué
    Homme Profil pro
    doctorant
    Inscrit en
    Décembre 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : doctorant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 101
    Points : 148
    Points
    148
    Par défaut
    en même temps ta sh avec un facteur de 36^14 a l'intérieur et ton x qui va jusque 604800 tu peux que avoir quelque chose de très grand.

    de plus tu as mis 3.2 - ... alors que dans l'équation tu as 3.2 + ... mais c'est peut être du à tes coefficients.

Discussions similaires

  1. [FLASH MX2004] Utiliser une variable dans le code
    Par arnolem dans le forum Flash
    Réponses: 25
    Dernier message: 02/12/2005, 16h37
  2. [XSL] Passage de variable dans un template
    Par Otarie dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/11/2005, 23h50
  3. [vb.net] utilisation d'une variable dans le code
    Par arnolem dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/09/2005, 19h22
  4. Passage de variable dans une requête
    Par zestrellita dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/09/2004, 13h27
  5. Passage de variable dans un lien asp
    Par VirginieGE dans le forum ASP
    Réponses: 4
    Dernier message: 27/07/2004, 10h06

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