如何从父代码加载变量?

时间:2016-11-17 13:51:29

标签: matlab function variables

我有以下"父母"代码,称之为CorporateTransportRepository

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

当我运行父代码时,我获得:

  

未定义的函数或变量' s1'。

我知道我需要在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

1 个答案:

答案 0 :(得分:0)

除非您将变量设为全局,否则无法访问它。但这可能不是matlab中最好的主意。

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

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

这只是将rootd定义为单个参数函数(几个优化函数需要的函数),尽管您可以传递多个参数函数。您rootd函数可以如下所示:

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