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 :

résolution de système d'équation à l'aide d'une boucle for


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut résolution de système d'équation à l'aide d'une boucle for
    bonjour à tous,

    J'aimerai résoudre un sytème d'équation avec Matlab, en utilsant la fonction solve dans une boucle for. Voici mon code:

    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
    str='';
    equations={};
    system=[];
     
    %Je crée d#abord le vecteur [c1,c2,c3,c4] que j'appelle sol
    for k=1:4
        c=sprintf('c%s',num2str(k));
        str=[str strcat(c,',')];
    end
    str=regexprep(str,',$','');
    sol=strcat('[',str,']');
     
    %écrire les equations et les stocker dans une cell equations
    for i=1:3
        c1=sprintf('c%s',num2str(i));
        c2=sprintf('c%s',num2str(i+1));
        eq=strcat(c1,'+2*',c2,'=3*',num2str(i));
        equations=cat(1,equations,eq);  
    end
     
    %Concaténer les equations dans un vecteur system
    for k=1:length(equations)
        system=[system strcat(equations{k},',')];
    end
    sys=regexprep(sys,',$','');
     
    %Resoudre le system
    eval(strcat(sol,'=solve(',sys,')'));
    quand j'essaie de l'executer, j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Error: The expression to the left of the equals sign is not a valid target for an assignment.
     
    Error in ==> essaiSolve at 28
    eval(strcat(sol,'=solve(',sys,')'));
    quand j'affiche ce qu'il y a entre les parenthèses de solve j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [c1,c2,c3,c4]=solve(c1+2*c2=3*1,c2+2*c3=3*2,c3+2*c4=3*3)
    donc mon système est bien défini, sauf que solve ne peut pas marcher parcequ'il manque des apostrophes à ces argument.. Comment régler ce problème?

    merci

  2. #2
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Cela prouve bien que l'utilisation d'EVAL c'est moche et qu'on maitrise rien


    Les équations fournies à SOLVE doivent l'être sous forme de chaines de caractères : il te manque les quotes ('...') autour de chaque équation.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    oui, ca je l'ai bien compris. Mais je ne vois pas du tout ici comment contourner la fonction eval..

  4. #4
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Je ne sais pas te répondre ça dépend de ton besoin car là tu nous montres un exemple figé.

    Je suppose que l'objectif final est de pouvoir modifier certains paramètres : lesquels ?
    Y a-t-il une obligation pour les noms des variables de sortie ?

    Sinon je trouve ton code un peu compliqué (l'utilisation des STRCAT me parait non nécessaire en particulier).

    Quelques modifications (à tester, chose que je ne peux faire) :
    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
    str='[';
    sys='';
     
    %Je crée d#abord le vecteur [c1,c2,c3,c4] que j'appelle sol
    for k=1:4
        str=sprintf('%sc%d,',str,num2str(k));
    end
    str=regexprep(str,',$','');%supprime la dernière virgule je suppose
    str=[str,']'];
    %sinon on peut aussi faire :
    %on supprime les 2 lignes et on remplace la dernière virgule par le crochet :
    %str(end) = ']';
     
    %écrire les equations et les stocker dans une chaine
    for i=1:3
        sys=sprintf('%s ''c%d+2*c%d=3*%d'',',sys,i,i+1,i);  
    end
    sys=regexprep(sys,',$','');
    %Je trouve plus simple de faire :
    %sys(end)='';
     
    %Resoudre le system
    eval([str,'=solve('sys');']);

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    d'accord, merci Caroline.
    ca répond à ma question.

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

Discussions similaires

  1. [AC-2007] Supprimer un jeu d'enregistrements à l'aide d'une boucle For
    Par lakhdar16 dans le forum VBA Access
    Réponses: 3
    Dernier message: 18/10/2011, 12h58
  2. Aide sur une boucle for
    Par Kemanke dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 11/12/2008, 14h13
  3. Réponses: 17
    Dernier message: 06/02/2008, 19h44
  4. Décrémentation à l'aide d'une boucle FOR-END
    Par fouad192007 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/06/2007, 17h54
  5. Résolution de système d'équation d'ellipse
    Par soeursourire dans le forum MATLAB
    Réponses: 1
    Dernier message: 13/02/2007, 18h42

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