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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 éprouvé
    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
    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
    Membre averti
    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
    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 éprouvé
    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
    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
    Membre averti
    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
    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 éprouvé
    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
    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?

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