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 :

Compréhension fonction optimset


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Par défaut Compréhension fonction optimset
    Bonjour,

    Je dois travailler sur un fichier qui comprend cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    options=optimset('Display','iter','Diagnostics','on','MaxFunEvals',100000000,'MaxIter',1000,'TolFun',1e-7,'TolX',1e-10,'NonlEqnAlgorithm','lm','LineSearchType','cubicpoly','LargeScale','on','Hessian','on');
    Lorsque j'exécute le fichier, le message d'erreur suivant s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Error using optimset (line 199)
    The NonlEqnAlgorithm option is no longer valid. Set the Algorithm option instead.
     
    Error in modele_aeraulique_36_zones (line 138)
     options=optimset('Display','iter','Diagnostics','on','MaxFunEvals',100000000,'MaxIter',1000,'TolFun',1e-7,'TolX',1e-10,'NonlEqnAlgorithm','lm','LineSearchType','cubicpoly','LargeScale','on','Hessian
    Pourriez-vous m'expliquer à quoi sert cette fonction et comment résoudre ce problème ?

    Merci

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    salut

    tu dois utiliser un programme d'optimisation qui a été développé sous une version antérieure de Matlab
    la fonction optimset sert à définir les options pour l'optimisation (fonctions comme fmincon ou lsqnonlin par exemple)

    là visiblement tu utilise un argument obsolète pour définir un algo de levenberg-marquardt (lm)
    il faut donc enlever la paire d'arguments 'NonlEqnAlgorithm','lm' et la remplacer par ce qui va bien, soit probablement 'Algorithm','levenberg-marquardt'

    tu aura probablement un soucis avec la paire d'arguments 'LineSearchType','cubicpoly'

    peux tu en dire plus sur ton programme et surtout sur la fonction d'optimisation utilisant la variable options ainsi définie ?

    Fabien

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Par défaut
    En effet, le message suivant s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: The LineSearchType option is no longer valid. It was
    only used by the Gauss-Newton algorithm, which is no longer
    used in Optimization toolbox solvers. 
    > In optimset at 223
      In modele_aeraulique_36_zones at 138
    Mon programme me permet d'étudier les débits d'air entre les différentes zones d'un bâtiment. Au début du programme, je définis les températures de chaque zone, les zones et leurs caractéristiques (surface des murs, hauteurs, emplacement des ventilations).

    La fonction qui utilise la variable options est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [x,fval,exitflag,output]=zonal(P,options);
    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
    28
    29
    30
    31
    32
    33
    function [x,fval,exitflag,output]=zonal(xstart,options)
    fun = @residus;
    %options=optimset('Display','iter','MaxFunEvals',100000000,'MaxIter',1000,'TolFun',1e-10,'TolX',1e-6,'NonlEqnAlgorithm','dogleg','LineSearchType','cubicpoly','LargeScale','on');   % Option to display output
    [x,fval,exitflag,output] = fsolve(fun,xstart,options)  % Call optimizer
     
    function F=residus(P)
     
    global H
    global M
    global A
    global T
    global F
    global debvent
     
     
    nz=38;
    g=9.81;
    Cd=0.83;
    R=287;
    b=0.5;
     
    %calcul des débits
    [debit]=FLOW(P,T,b,R,nz,M,Cd,A,g,H);
     
    %résidus
    F=[-3*debvent -12*debvent -3*debvent 0 0 0 0 0 0 0 0 0 2*debvent 8*debvent 2*debvent 0 0 0 0 0 0 0 0 0 debvent 4*debvent debvent 0 0 0 0 0 0 0 0 0 0 0];
     
    for i=1:38
        for j=1:38
            F(i)=F(i)-debit(i,j)+debit(j,i);
     
        end
    end
    Et la fonction FLOW est la suivante :

    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
    function [debit]=FLOW(P,T,b,R,nz,M,Cd,A,g,h)
     
     
     
    rho0=1.21;
    T0=293.15;
     
    for i=1:nz
        rho(i)=rho0*T0/T(i);
    end
     
    Cd=0.83;
     
    for i= 1:nz
        for j=1:nz
            if abs(M(i,j))==1
                debit(i,j)=(Cd*((2*rho(i))^0.5)*A(i,j)*(abs(P(i)-P(j)-0.5*(rho(i)*g*h(i)+rho(j)*g*h(j))))^b)*(P(i)-P(j)-0.5*(rho(i)*g*h(i)+rho(j)*g*h(j)))/abs((P(i)-P(j)-0.5*(rho(i)*g*h(i)+rho(j)*g*h(j))));
            else
                debit(i,j)=0;
            end
        end
    end

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    bref, si tu remplace le premier couple d'argument comme je te l'ai conseillé ey que tu vire le 2ème, ca devrais marcher

    en effet le deuxième argument n'était pas compatible avec levenberg-marquardt

    et tu as aussi probablement l'argument large-scale en trop

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Par défaut
    J'ai fait les modifications et maintenant mon programme fonctionne.

    Merci pour ton aide.

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    juste un remarque générale en optimisation

    ton programme fonctionne, c'est bien
    mais fonctionne t'il comme prévu et surtout comme avant (sur une ancienne version de matlab) depuis que tu as été obligé de changer des paramètres ?
    c'est toujours bien quand on fait ce genre d'exercice de comparer la solution trouvée avec la solution qu'il proposait avant (si tu en a gardé une)

    Fabien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Compréhension fonction Left et protection
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2014, 09h52
  2. [Drupal] compréhension fonction drupal
    Par omelhor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/10/2011, 14h12
  3. Compréhension fonction transformée de Fourier
    Par NulleenMatlab dans le forum Signal
    Réponses: 6
    Dernier message: 08/05/2008, 11h59
  4. Problème compréhension fonction Prolog
    Par jpsegret dans le forum Prolog
    Réponses: 10
    Dernier message: 03/11/2007, 18h21
  5. compréhension du profil d'une fonction
    Par lor dans le forum MFC
    Réponses: 7
    Dernier message: 08/01/2004, 12h59

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