我有以下"父母"代码,称之为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
。
答案 0 :(得分:0)
除非您将变量设为全局,否则无法访问它。但这可能不是matlab中最好的主意。
您可以将变量作为参数传递给函数。
s1 = .01;
fun1 = @(pars)rootd(s1,pars);
这只是将rootd
定义为单个参数函数(几个优化函数需要的函数),尽管您可以传递多个参数函数。您rootd
函数可以如下所示:
function D = rootd(s1,x1)
...
end