2016-11-17 80 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'。

我明白,我需要在rootd.m功能来定义变量s1。但我希望该功能自动从solve.m加载s1

+1

什么郎?将它放在标签中 – driconmax

+0

您必须在引用的笔记本中输入符号。 (如果不同的* .m包含相同的符号,系统如何“自动”知道你的意思?!) – BadZen

回答

0

除非您使全局变量无法访问它。但是这可能不是matlab中最好的想法。

您可以将该变量作为参数传递给函数。

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

这只是定义rootd是一个单一参数的函数(的东西,一些优化功能的要求),虽然可以通过多个之一。你的rootd功能可以看起来像这样:

function D = rootd(s1,x1) 
    ... 
end