0
我想在Matlab中评估一个匿名函数,它又由几个匿名函数组成。Matlab - 用arrayfun评估嵌套匿名函数
请原谅的变量有点混乱的标签,因为这是原问题的一个非常简化的版本:
C.B_MT = 2; C.T = 24; C.OM_MT = 1/24; C.P_WTmax = 2;
ub = 3;
ObjFcn = @(x) CostFcn1(x,C,ub);
x = 1:4;
fit = ObjFcn(x)
的功能ObjFcn
电话如下:
function F = CostFcn1(x,C,ub)
F = f_t(x,C,ub) + OM_DG(C) + TCPD_BES(x,C);
function ft = f_t(x,C,ub)
N = cell(1,2);
ft = x(2)*C.B_MT+ub;
for i = 1:2
N{i} = C.B_MT*x(i+2)+ub;
end
ft = ft(x) + sum(arrayfun(@(N_q) N_q{1}(x), N));
end
function om_dg = OM_DG(C)
om_dg = C.T*C.OM_MT;
end
function tcpd = TCPD_BES(x,C)
tcpd = x(1)*C.P_WTmax;
end
end
当我运行代码时不需要for循环和arrayfun
,它可以毫无问题地工作(fit = 10
)。然而,arrayfun
,我得到一个错误。如何更改arrayfun
不会导致任何问题的代码?
问题与你试图访问'ft(x)'和'N_q {1}(x)'的部分。用'ft'和'N_q {1}'替换这些部件,你应该很好走。另外,除非你需要在三个嵌套函数中做其他任何事情。你可以摆脱这些功能,直接使用它们中的语句。这将为您节省大量的开销 – anyanwu
谢谢@ammportal!这个小调整做了诀窍。真正的代码终于顺利运行。 – Maluquinho
@ammportal,请考虑创建一个答案或OP(Maluquinho)可以自己做。 – m7913d