Bonjour,
Je dois résoudre un système de 3 équations à 3 inconnues non linéaire. Pour cela j'utilise la fonction fsolve de mathlab.
Voici ci-dessous le programme :
Ce programme fonctionne mais la plupart du temps il ne me donne pas de solution et m'indique "Solver stopped prematurely.
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 function F = myfun(x) m=0.057; n=10; h=31.8; T=2.43; g=9.8; v=sqrt(2*h*g); F=[((x(1)^n*sqrt(h)*(x(3)*v-2*g*m))/sqrt(4*g*m^2-x(3)^2*x(1)^(2*n)*h)*sin(sqrt(4*g*m^2-x(3)^2*x(1)^(2*n)*h)/(2*x(1)^n*sqrt(h)*m)*x(2))-v*cos(sqrt(4*g*m^2-x(3)^2*x(1)^(2*n)*h)/(2*x(1)^n*sqrt(h)*m)*x(2)))*exp(-x(3)*x(2)/(2*m))+v*x(1); (h*x(1)^(2*n)*cos(sqrt(4*g*m^2-x(3)^2*x(1)^(2*n)*h)/(2*x(1)^n*sqrt(h)*m)*x(2))+(x(3)*x(1)^(2*n)*h-2*m*v)*sqrt(h)*x(1)^n/sqrt(4*g*m^2-x(3)^2*x(1)^(2*n)*h)*sin(sqrt(4*g*m^2-x(3)^2*x(1)^(2*n)*h)/(2*x(1)^n*sqrt(h)*m)*x(2)))*exp(-x(3)/(2*m)*x(2))-x(1)^(2*n)*h; n*x(2)+sqrt(2*h/g)*((1+x(1)-2*x(1)^n)/(1-x(1)))-T]; end x0=[0.5,0.5,0.5]; options=optimset('Display','final','MaxFunEvals',10000,'MaxIter',10000); [x,fval,exitflag] = fsolve(@myfun,x0,options);
fsolve stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 10000 (the selected value)."
J'ai bien essayé d'augmenter le nombre d'itérations mais cela n'arrange rien. Le problème est que cette méthode dépend de la valeur de x0. En tâtonnant sur les valeurs de x0 je peux arriver parfois à obtenir une solution. Cependant je dois pouvoir résoudre ce système assez rapidement pour des valeurs variables des constantes n,m,h,T.
Ma question est alors la suivante : comment puis-je procéder pour obtenir à coup sur un résultat ?
Merci.
Partager