【发布时间】:2014-10-31 04:42:32
【问题描述】:
我的问题很清楚。 我在 MATLAB 中有一个目标函数。例如,我有 f=@(x) (x(1)+x(2)*K) +其他东西。 因为目标函数又长又复杂,我想预先定义一些变量并将它们替换为目标函数。 例如,我想设置 M=x(1)+x(2) 以便在目标函数中写入 M*K。 我试过 M=@(x) x(1)+x(2) 并用目标函数代替,但没有用。 请问有什么想法吗? 问候
【问题讨论】:
标签: matlab optimization
我的问题很清楚。 我在 MATLAB 中有一个目标函数。例如,我有 f=@(x) (x(1)+x(2)*K) +其他东西。 因为目标函数又长又复杂,我想预先定义一些变量并将它们替换为目标函数。 例如,我想设置 M=x(1)+x(2) 以便在目标函数中写入 M*K。 我试过 M=@(x) x(1)+x(2) 并用目标函数代替,但没有用。 请问有什么想法吗? 问候
【问题讨论】:
标签: matlab optimization
如果您的目标函数很复杂,请在单独的 M 文件中定义它,例如:
function [out1 out2 out3] = complex_cost_fn(in1, in2, in3, in4, in5)
%%COMPLEX FUNCTION WITH MULTIPLE SUBFUNCTIONS
end
function cost1 = fn1(in1, in3, ..)
.....
end
function gradients = fn2(in2, in4, ..)
....
end
然后定义句柄:
my_cost = @(in1, in2, in3) complex_cost_fn(in1, in2, in3, in4, in5);
其中“in1, in2, in3”是您将提供给“my_cost”的输入参数,而“in4, in5”输入将在您创建句柄时初始化一次。
然后,如果需要,您可以将“my_cost”传递给另一个函数,并将其调用为:
[out1 out2 out3] = my_cost(in1, in2, in3);
【讨论】: