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 :

Programme d'une fonction matlab


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut Programme d'une fonction matlab
    bonjour,
    en effet je suis un débutant en programmation MATLAB,

    et j'ai voulu executer ce programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A=[-1 -2 -2 ;1 2 2];
    b=[0;72];
    x0=[10;10;10];
    function f=myfun(x)
    f=-x(1)*x(2)*x(3);
    [x,fval]=fmincon(@myfun,x0,A,b)
    mais MATLAB me donne ce message
    A function declaration cannot appear within a script M-file.
    est ce que quelqu'un peut m'aider

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Cela signifie que tu n'as pas le droit de définir de fonction dans un script.

    Le programme tu l'as lancé en ligne de commande ou écrit dans un fichier ?

    Pourquoi as-tu mis en plein milieu ?
    Que cherches-tu à faire ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    en fait,ce que je cherche c'est d'utiliser la fonction"fmincon",qui permet de chercher le minimum d'une fonction multivariable avec des contraintes,de A àZ.
    en commencant de la declaration de la fonction jusqu'à la solution.

    la fonction que je veux minimiser c'est :

    f(x)=-x1*x2*x3

    et les contraintes:

    -x1-2x2-2x3<= 0

    x1+2x2+2x3<= 72

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Il faut donc définir ta fonction myfun dans une fonction à part entière en l'enregistrant dans un fichier qui s'appelle myfun.
    Et ton script ressemblera à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=[-1 -2 -2 ;1 2 2];
    b=[0;72];
    x0=[10;10;10];
    [x,fval]=fmincon(@myfun,x0,A,b)

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    comme tu m'a dis,j'ai crée un fichier à part je l'ai nomé myfun.m où j'ai mis le programme suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function f=myfun(x);
    f=-x(1)*x(2)*x(3);
    et dans l'ancien,j'ai gardé que ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A=[-1 -2 -2 ;1 2 2];
    b=[0;72];
    x0=[10;10;10];
    [x,fval]=fmincon(@myfun,x0,A,b)
    et voilà l'erreur qu'il me donne:
    On line 4 ==> [x,fval]=fmincon(@myfun,x0,A,b)

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Ce n'est pas le message d'erreur en entier...

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    oui,tu as raison,voilà tous le message d'erreur,


    ??? Error: File: D:\projet-master\programme MATLAB\myfun.m Line: 2 Column: 1

    A function declaration cannot appear within a script M-file.

    Error in ==> D:\projet-master\programme MATLAB\fmincon.m
    On line 4 ==> x=fmincon(myfun,x0,A,b)

  8. #8
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Citation Envoyé par ENSAM-ALAMI Voir le message
    Error in ==> D:\projet-master\programme MATLAB\fmincon.m
    Euh je suis inquiète tu as appelé ton script fmincon.m ????
    Si c'est le cas je te conseille de le renommer car du coup ça "écrase" la fonction fmincon de MATLAB donc ton script se rappelle en récursion et comme ton fmincon à toi est un script et que tu l'appelles comme si c'était une fonction...bref MATLAB est perdu et il a bien raison

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    oui,tu as tt a fait raison;
    je me suis rendu compte le moment ou je t'ai envoyé;

    j'ai modifié le nom du fichier et maitement je crois que j'ai un autre pbm?


    Warning: Large-scale (trust region) method does not currently solve this type of problem,
    switching to medium-scale (line search).
    > In C:\toolbox\optim\fmincon.m at line 213
    In D:\projet-master\programme MATLAB\optimi.m at line 9
    ??? Error using ==> fmincon
    FMINCON cannot continue because user supplied objective function
    failed with the following error:

    Error: File: D:\projet-master\programme MATLAB\myfun.m Line: 2 Column: 1
    A function declaration cannot appear within a script M-file.

    Error in ==> D:\projet-master\programme MATLAB\optimi.m
    On line 4 ==> [x,fval]=fmincon(@myfun,x0,A,b)

  10. #10
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    bizarre il dit que myfun est toujours un script.
    Est-ce que la déclaration de la fonction (ie function ...) est bien la toute 1ère ligne de ton fichier ?

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    voilà le contenu du fichier myfun (pour la déclaration de la fonction):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function f=myfun(x);
    f=-x(1)*x(2)*x(3);
    et l'autre que j'ai renomé optimi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    clc;
    A=[-1 -2 -2 ;1 2 2];
    b=[0;72];
    x0=[10;10;10];
    [x,fval]=fmincon(@myfun,x0,A,b)

  12. #12
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Je t'avoue que je ne comprends pas mais je ne peux tester n'ayant pas actuellement MATLAB sous la main.
    En plus c'est l'exemple de la doc, non ?

    Mais ce message d'erreur :
    Error: File: D:\projet-master\programme MATLAB\myfun.m Line: 2 Column: 1
    A function declaration cannot appear within a script M-file.
    dit clairement qu'il y a une déclaration de fonction en ligne 2 de myfun.m donc supprime bien toute ligne (même vide) se trouvant avant la définition de la fonction dans myfun.m

  13. #13
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Le fichier ou t'as mis myfun s'appel bien myfun.m (avec extension .m) ?

    Ta version de Matlab ?


    Sinon, petite correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function f=myfun(x);
    f=-x(1)*x(2)*x(3);
     
     
    % devient : (sans;)
     
    function f=myfun(x)
    f=-x(1)*x(2)*x(3);
    ++

  14. #14
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    en fait,je veux tt d'abord m'entrainer sur l'exemple proposé par matlab et faire une projection après sur un cas plus compliqué

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 61
    Par défaut
    merci beaucooooooooooooooouuuuuup,

    Mr SAMURAI et Mlle CARO95470

    le problème est résolu

    1)puisque j'avais enregistré le fichier sous le nom fmincon.m,cela a posé un pbm,ce dernier a écrasé l'éxistant.heureusement que j'ai un autre PC où j'ai pu récuperer l'original.

    2)le problème effectivement c'est dans le (;)

    merci encore un fois

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

Discussions similaires

  1. Appeler une fonction matlab dans un programme C++
    Par samiaarch dans le forum C++
    Réponses: 1
    Dernier message: 15/10/2012, 22h22
  2. Problème ginput dans une fonction matlab
    Par matt67 dans le forum MATLAB
    Réponses: 12
    Dernier message: 05/06/2007, 15h24
  3. [intfilt] Convertir une fonction MATLAB en language C
    Par sandball22 dans le forum MATLAB
    Réponses: 10
    Dernier message: 10/04/2007, 16h06
  4. Exécution d'une fonction Matlab à partir de C++
    Par wassimb dans le forum MATLAB
    Réponses: 1
    Dernier message: 15/03/2007, 13h00
  5. Programmation d'une fonction dans Rn
    Par simone.51 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/11/2004, 11h30

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