J'essaie de résoudre des équations non linéaires en utilisant la commande fsolve dans Matlab. J'ai une routine principale et j'écris une fonction dans laquelle je définis les équations que je veux résoudre.comment définir la fonction pour résoudre des équations non linéaires simultanées dans Matlab en passant plus de variables
Voici ma routine principale:
t = [338.9333333333,535.2,1217.4166666667,1797.3166666667,2082.9166666667,4557.0166666667,4690.2666666667,4717.5333333333,4981.3666666667,5346.9,5388.3166666667,5571.65,5619.65,6639.35,6719.35,7352.7666666667,7622.7666666667,7722.7666666667,7739.4333333333,7906.1,7909.7666666667,8502.7666666667,9852.7666666667,20571.0166666667,21368.6333333333,23948.6333333333,26789.6333333333,28598.6333333333,29828.6333333333,29859.6333333333,35469.6333333333,39938.6333333333,41186.6333333333,45956.6333333333,46378.6333333333,46496.6333333333,47493.6333333333,48958.6333333333,50228.6333333333,51716.6333333333,71876.6333333333];
n= length(t);
syms a b1 b2 amle b1mle b2mle
tau=zeros;
for tau=2:n-1
fun = @root2d;
x0=[0.0002,0.00004];
x=fsolve(fun,x0)
tau=tau+1;
end
et j'ai écrit une fonction séparément et enregistré comme root2d.m que je ne pouvais pas insérer la fonction dans la boucle. Voici ma fonction:
function F = root2d(x)
sum2=0;
for k=1:tau
sum2 = sum2+(2/x(1))-t(k);
k=k+1;
end
sum3=0;
for l=tau+1:n
sum3=sum3+(2/x(2))+t(tau)-t(l);
l=l+1;
end
F(1) = ((n*x(1)*(t(tau))^2)/(1-exp(x(1)*t(tau))+exp(x(1)*t(tau)-x(2)*(t(n)-t(tau)))*(1+x(2)*(t(n)-t(tau))))) + sum2;
F(2) = ((n*x(2)*(t(n)-t(tau))^2)/(1+x(2)*(t(n)-t(tau))+exp(x(2)*(t(n)-t(tau)))*((1+x(1)*t(tau))*exp(-x(1)*t(tau))-2))) + sum3;
end
Cependant, cela ne fonctionne pas jusqu'à ce que je définis t, n, et tau dans la fonction. J'ai essayé de définir la fonction en tant que root2d (x, t, tau) mais cela ne fonctionne pas. Existe-t-il un moyen de transmettre les variables à la fonction et de résoudre ce problème?
Merci beaucoup, cela fonctionne maintenant sans aucune erreur. J'apprécie vraiment votre aide avec ceci. –