【问题标题】:Define a variable before put it in objective function在将变量放入目标函数之前定义变量
【发布时间】: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


    【解决方案1】:

    如果您的目标函数很复杂,请在单独的 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);
    

    【讨论】:

    • 亲爱的 mikesapi,感谢您的回答,但我不确定我是否理解正确。所以,按照我上面提到的例子,我有:function [x]=objfun(K) @(x)f=[x(1)+x(2)]*K(x) end。现在,我想重写目标函数如下:@(x) f= M*K(x) 其中 M=x(1)+x(2)。我需要做什么?
    • 我的建议是重新制定您想要的方式。在给定一些输入变量的情况下,在单独的 M 文件中创建一个计算目标的函数 - 然后定义它的句柄。
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2011-05-28
    • 2014-05-30
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多