2016-11-17 3 views
0

나는 다음 "부모"코드를 가지고, 그것을 solve.m 전화 : 나는 부모의 코드를 실행하면상위 코드에서 변수를로드하는 방법은 무엇입니까?

s1 = .01; 
v = 1; 
fun1 = @rootd; 
x0 = [.2, .3, .4] 
options = optimset('MaxFunEvals',100000,'MaxIter', 10000); 
x1 = fsolve(fun1,x0, options) 

가 나는 또한 기능 rootd.m

function D = rootd(x1) 
F = @(p) 1 - ((3.*x1(3).^2 - 7.*x1(3) + 6).*(x1(2)./p -1))./(2.*x1(3).*(1-x1(3))); 
H = @(p) (1 - ((3.*x1(3).^2 - 7.*x1(3) + 6).*(x1(2)./p -1))./(2.*x1(3).*(1-x1(3)))).^2; 
F1 = @(p) 1 - ((6 - 7.*x1(3) + 3.*x1(3)^2).*(min(v,x1(2))./p - 1))./(2.*x1(3).*(1-x1(3))); 
H1 = @(p) (1 - ((6 - 7.*x1(3) + 3.*x1(3)^2).*(min(v,x1(2))./p - 1))./(2.*x1(3).*(1-x1(3)))).^2; 

g = @(p) integral(@(p) F(p), x1(1), x1(2)); 
f = @(p) integral(@(p) F1(p), x1(1), (min(v,x1(2)))); 
h = @(p) integral(@(p) H1(p), x1(1),(min(v,x1(2)))); 

D(1) = g(x1) - s1; 
D(2) = x1(3).*(2-x1(3)).*(v - min(v, x1(2))) - (((x1(3)^2)/2).*h(x1)) + (2.*x1(3)... 
- (1/2).*x1(3).^2).*f(x1) - ((v-min(v, x1(2))) + f(x1) -s1); 
D(3) = (6 - 7.*x1(3) + 3.*x1(3)^2).*min(v, x1(2))./((2-x1(3)).*(3-x1(3))) - x1(1); 
end 

을 위해 다음과 같은 코드를 가지고, 내가 얻을 :

정의되지 않은 함수 또는 변수 's1'.

변수 s1rootd.m 함수에 정의해야한다는 것을 알고 있습니다. 하지만 그 기능이 solve.m에서 자동으로 s1을로드하고 싶습니다.

+1

어떤 언어입니까? 태그에 넣으십시오. – driconmax

+0

참조 된 노트북에서 기호를 가져와야합니다. (다른 * .m이 동일한 기호를 포함하면 어떤 의미인지 시스템이 "자동"으로 어떻게 알 수 있습니까?) – BadZen

답변

0

변수를 global로 설정하지 않으면 액세스 할 수 없습니다. 하지만 그 matlab에 최고의 아이디어가되지 않을 수도 있습니다.

변수를 함수에 매개 변수로 전달할 수 있습니다. 여러 하나를 통과 할 수 있지만

s1 = .01; 
fun1 = @(pars)rootd(s1,pars); 

이 단지 (최적화 기능의 몇 가지 필요한 것을) 하나의 매개 변수 기능으로 rootd을 정의합니다. 그러면 rootd 함수는 다음과 같이 보입니다.

function D = rootd(s1,x1) 
    ... 
end 
관련 문제