2016-12-09 1 views
0

Ich versuche nichtlineare Gleichungen mit dem fsolve Befehl in Matlab zu lösen. Ich habe eine Hauptroutine und schreibe eine Funktion, in der ich die Gleichungen definiere, die ich lösen möchte.wie man Funktionen definiert, um simultane nichtlineare Gleichungen in Matlab zu lösen, indem man mehrere Variablen übergibt

Hier ist meine Hauptroutine:

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 

und ich habe eine Funktion separat geschrieben und gespeichert als root2d.m, da ich nicht die Funktion innerhalb der Schleife einfügen könnte. Hier ist meine Funktion:

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 

Allerdings funktioniert das nicht, bis ich t, ​​n und tau innerhalb der Funktion definieren. Ich habe versucht, die Funktion als root2d (x, t, tau) zu definieren, aber es funktioniert nicht. Gibt es eine Möglichkeit, die Variablen an die Funktion zu übergeben und diese zu lösen?

Antwort

2

Sie können t hinzufügen, n und Tau-Parameter-Funktion root2d:

function F = root2d(x, t, n, tau) 
... 
end 

Dann in Hauptschleife tun Sie

fun = @(x) root2d(x, t, n, tau); 

Jetzt Spaß ist eine Funktion von einem Argument, das root2d rufen mit allen benötigte Argumente.

+0

Vielen Dank, es funktioniert jetzt ohne Fehler. Ich schätze deine Hilfe sehr. –

Verwandte Themen