Bonjour,
Je bloque sur la résolution, avec MATLAB, dans le domaine complexe d'un système d'équations non linéaires à six inconnus.
J'utilise la fonction fsolve :
Avec "Yd" une constante et "x(1)....x(6)" mes inconnus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 function F2 = myfun(x_in,Yd,i) x = x_in(1:6) + 1i*x_in(7:12); F = [x(1) + x(4) + x(3) - Yd(1,i); x(1) + x(2) + x(5) - Yd(2,i); x(2) + x(3) + x(6) - Yd(3,i); x(3) + x(4) + (1/(1/x(1) + 1/(x(2) + x(5)))) - Yd(4,i); x(1) + x(4) + (1/(1/x(3) + 1/(x(2) + x(6)))) - Yd(5,i); x(1) + x(5) + (1/(1/x(2) + 1/(x(3) + x(6)))) - Yd(6,i)]; F2 = [real(F);imag(F)]; end
Vous pouvez remarquer que j'ai séparé les parties réelles et imaginaires.
je fais appelle à la fonction avec :
Les résultats obtenus ne sont pas satisfaisants, ce qui est bizarre, c'est que j'obtient les bons résultats pour 3 variables sur les six.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Yd = [Y11;Y22;Y33;Y44;Y55;Y66]; X = zeros(12,301); fval = zeros(12,301); x0 = [0.0004;0.0004;0.0004;0.0004;0.0004;0.0004;0.0004;0.0004;0.0004;0.0004;0.0004;0.0004]; % Make a starting guess at the solution for i=1:301 g = @(x) myfun(x,Yd2,i); [X(:,i),fval(:,i)] = fsolve(g,x0); % Call solver end fsum = sum(abs(fval)); max_fsum = max(fsum) Imp = X(1:6,:) + 1i*X(7:12,:); % les résultats recherchés, Réelle + i*imaginaire
Ma question est : est ce que je fais appelle à ma fonction "myfun" correctement ? Y a-t-il un autre moyen de résoudre un système d'équations non linéaires en complexe sur MATLAB ? pour mes valeurs initiales "x0", comment savoir si elle sont proche de la solution recherchée ou pas ? comment faire un tirage aléatoire des valeurs initiales à chaque itération de "fsolve" ?
Merci d'avance pour votre aide
Partager