2016-12-09 9 views
0

Matlab에서 fsolve 명령을 사용하여 비선형 방정식을 풀려고합니다. 나는 메인 루틴을 가지고 있고 내가 풀고 싶은 방정식을 정의하는 함수를 작성한다.더 많은 변수를 전달하여 Matlab에서 동시 비선형 방정식을 풀 수있는 함수를 정의하는 방법

여기 내 주요 루틴 :

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 

나는 별도로 함수를 작성하고 내가 루프 내부의 기능을 삽입 할 수 있기 root2d.m로 저장했습니다. 여기 내 기능이 있습니다 :

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 

그러나이 기능은 t, n 및 tau를 함수 내에 정의 할 때까지 작동하지 않습니다. root2d (x, t, tau)로 함수를 정의하려고 시도했지만 작동하지 않습니다. 함수에 변수를 전달하고이를 해결하는 방법이 있습니까?

답변

2

당신은 t을 추가 할 수 있습니다, n 및 타우 매개 변수 기능을 root2d하기 :

다음 메인 루프에서 당신은 이제 재미 모두와 함께 root2d를 호출 한 인수의 함수

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

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

필요한 논증.

+0

대단히 감사합니다. 오류없이 바로 작동합니다. 나는 당신의 도움에 정말 감사드립니다. –