Bonjour à tous!
J'ai défini une fonction matlab F = root2d(x) dans laquelle j'ai en fait deux fonctions F(1) et F(2) qui dépendent de x(1) et x(2)
Dans un autre code je résous numériquement (avec fsolver) x(1) et x(2) tel que F(1) = 0 et F(2) = 0;
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 function F = root2d(x) Rt=(3/(4*pi))^(1/3); vb=0.235; vy=1-vb; TbTy=1; TbyiTy=1.8; g1=(-2+(2^(1/3))*((((8*vy-(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))+sqrt(4+((8*vy-(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))^2))^(2/3)))/((2^(2/3))*((((8*vy-(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))+sqrt(4+((8*vy-(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))^2))^(1/3))); g2=(-2+(2^(1/3))*((((8*vb+(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))+sqrt(4+((8*vb+(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))^2))^(2/3)))/((2^(2/3))*((((8*vb+(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))+sqrt(4+((8*vb+(x(2)/Rt)*(3*(x(1)/Rt)^2+(x(2)/Rt)^2))/((x(1)/Rt)^3))^2))^(1/3))); F(1)=(x(1)^2-(x(1)*g1)^2)/(x(1)^2+(x(1)*g1)^2) + (TbTy)*((x(1)^2-(x(1)*g2)^2)/(x(1)^2+(x(1)*g2)^2)) + (TbyiTy)*((x(1)^2-x(2)^2)/(x(1)^2+x(2)^2)); F(2)= (TbTy)*(((x(1))*g2)/(x(1)^2+(x(1)*g2)^2)) - ((x(1))*g1)/(x(1)^2+(x(1)*g1)^2) + (TbyiTy)*((x(2))/(x(1)^2+x(2)^2));
J'aimerais ne pas à avoir à écrire mes variables Rt, vb, TbTy et TbyiTy dans le code de la fonction et les écrire à l'extérieur, dans le code 1 par exemple. J'ai essayé d'enlever les variables du code de la fonction et de les écrire dans le code 2 ou de les stocker dans le workspace mais ça ne marche pas. Quand on appelle la fonction elle ne lit pas les variables stockées dans le workspace, comment contourner le problème?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fun=@root2d; x0=[0.1,0.1]; x=fsolve(fun,x0);
Je sais pas si je suis très clair
Merci d'avance
Partager