Résoudre système d'équation - Matlab

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

Je dois résoudre un système de 11 équations avec 10 inconnues au total dans Matlab et je n’ai jamais fais ça.

Je comptais utiliser la documentation ici mais ça semble être réservé aux équations linéaires. Or, j’ai par exemple des termes y1x1=1.3\frac{{{y_1}}}{{{x_1}}} = 1.3 ou encore x3x4x1x2=2.7\frac{{{x_3}{x_4}}}{{{x_1}{x_2}}} = 2.7 ce qui rend le système non-linéaire…

Avez-vous des idées de comment faire ? Je pourrais aussi mettre ça dans TI NSpire mais je préfère commencer à manipuler Matlab correctement.

Merci!

+0 -0

Salut,

En fonction de comment tu veux tenter de résoudre ton système, différentes solutions s’offrent à toi. Si tu veux le résoudre de manière numérique, tu peux t’intéresser à fsolve. Si tu veux le résoudre de manière symbolique, tu peux t’intéresser à solve. Dans le premier cas, tu auras besoin de l'Optimization Toolbox, et dans le deuxième cas tu auras besoin de la Symbolic Math Toolbox.

+1 -0
Auteur du sujet

Merci! J’ai essayé en utilisant la fonction fsolve (en essayant de suivre les instructions données dans leur documentation).

J’ai donc créé un document pour la fonction:

function F = root11d(x)

F(1) = x5/x1;
F(2) = x6/x2;
F(3) = x7/x3;
F(4) = x8/x4;
F(5) = x1*x9 + x5*x10 + x11;
F(6) = x2*x9 + x6*x10 + x11;
F(7) = x3*x9 + x7*x10 - x11;
F(8) = x4*x9 + x8*x10 - x11;
F(9) = (x3*x4)/(x1*x2);
F(10) = x1 + x2 + x3 + x4;
F(11) = x5 + x6 + x7 + x8;

Cette fonction comprend toutes mes 11 inconnues (de x1x1 à x11x11) avec les 11 équations (F(1)F(1) jusqu’à F(11)F(11)).

Après, j’ai créé le "script" pour lancer cette fonction:

fun = @root11d;
x0 = [0.9435, 0.9524, 1.5435, 0.7451, 50, 50, 0, 0, 2.7731, 1, 1];
x = fsolve(fun, x0)

Le vecteur x0x0 contient si j’ai bien compris la valeur F(1)F(1) etc. Par exemple, mon équation 1 serait x5/x1=0.9435x5/x1 = 0.9435 ? Si oui, c’est bien ce que je veux.

Cependant il me ressort plusieurs erreurs:

  • La variable x5 n’est pas déclarée. Pourquoi x5 et pas les autres?!
  • "Failure in initial objective function evaluation. FSOLVE cannot continue." - je suppose que l’erreur vient de l’initialisation ?

Merci d’avance

+0 -0
Auteur du sujet

J’ai essayé mais ça me renvoit malheureusement la même erreur. J’ai aussi déclaré les variables dans ma fonction en faisant x1 = x(1) etc. pour toutes les inconnues mais ça renvoie encore des erreurs (sauf celle de la variable non-définie).

+0 -0

Salut,

x5, etc. ne sont effectivement pas définies. Il faut que tu utilises les éléments de ton vecteur, par exemple x(5).

Ensuite, tu n’as qu’une seule erreur parce que Matlab s’arrête à la première, tout simplement.

Montre ton code et les autres erreurs, pour qu’on puisse mieux t’aider !

Édité par Aabu

+1 -0
Auteur du sujet

@Aabu:

Voici le code:

Fonction root11d(.m)

function fval = root11d(x)

x1 = x(1);
x2 = x(2);
x3 = x(3);
x4 = x(4);
x5 = x(5);
x6 = x(6);
x7 = x(7);
x8 = x(8);
x9 = x(9);
x10 = x(10);
x11 = x(11);

%Define f(x) 

fval(1,1) = x5/x1 - 0.9435;
fval(2,1) = x6/x2 - 0.9524;
fval(3,1) = x7/x3 - 1.5435;
fval(4,1) = x8/x4 - 0.7451;
fval(5,1) = x1*x9 + x5*x10 + x11 - 50;
fval(6,1) = x2*x9 + x6*x10 + x11 - 50;
fval(7,1) = x3*x9 + x7*x10 - x11;
fval(8,1) = x4*x9 + x8*x10 - x11;
fval(9,1) = (x3*x4)/(x1*x2) - 2.7731;
fval(10,1) = x1 + x2 + x3 + x4 - 1;
fval(11,1) = x5 + x6 + x7 + x8 - 1;

Script pour appeler cette fonction

fun = @root11d;
x0 = [0,0,0,0,0,0,0,0,0, 0,0];
x = fsolve(fun, x0)

Je sais pas si c’est correct de mettre x0 à zéro partout mais ce sont les exemples que j’ai vu (c’est bien le "initial guess" pour que fsolve calcule / estime les zéros?)

Merci!

+0 -0

Ca ressemble à de la chimie, ca :)

Pas très futé d’initialiser tes variables à 0 quand tu as des fractions…

Tu peux aussi transformer x5/x1 - 0.9435 = 0 en x5 - 0.9435*x1 = 0, etc.

Édité par cvanaret

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte