【问题标题】:Passing parameters to fmincon with lb and ub使用 lb 和 ub 将参数传递给 fmincon
【发布时间】:2017-01-29 15:22:46
【问题描述】:

我有一个带有 fminsearch 的工作脚本,如下所示:

[t,fmin] = fminsearch(@fun,t0,[],x1,x2,x3,...,xn);

function error = fun(t,x1,x2,x3,...,xn)

我必须向函数 fun 传递相当多的参数才能获得包含两个值 t(1) 和 t(2) 的 t 数组。我了解到,虽然 fminsearch 不适用于约束,但我有一个约束:lb

我一直在阅读有关 fmincon 的内容,但我还没有找到关于传递附加参数和设置约束的解释。

使用带有简单不等式约束的 fmincon 的语法是什么?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    在 fmincon(和其他优化函数)中,如果不使用某些约束参数,则只需输入 []。

    您应该检查的另一件事是某些函数接收行向量和其他列向量。

    对于 3x1 向量函数:

    options = optimoptions('fmincon','Algorithm','interior-point','Display','final');
     [xfmincon,fval,exitflag,output] = fmincon(fh3,[0;0;0],[],[],[],[],[-10;-pi;-10],[+10;+pi;+10],[],options) 
    

    1) 要处理其他变量,您将主函数拆分为 2 个函数,一个将使用所有参数,另一个将传递给 fmincon:

    fh3main=@(v,param1,param2) v+param1*sin(v)+param2; 
    fh3=@(v) fh3main(v,myparam1,myparam2);
    

    2) 约束很容易处理,它们的大小与输入向量相同,您可以分配相同的值或不同的值。

    【讨论】:

    • 感谢您的回答。我的问题更多的是:1)我可以在哪里以及如何将脚本中的 x1、x2、x3、..xn 参数传递给 fmincon 和 2)我想将 lb 和 ub 都应用于两个变量 t(1) 和 t (2)(或您的示例中的三个)。对于约束应用,也许 lb 和 ub 会自动应用于所有变量?然后,我只需要知道附加参数的语法。
    • 再次感谢您。你能为我澄清几件事吗?我对匿名函数很陌生,仍然无法理解语法。在 fh3main 和 fh3 之间,param1&param2 本质上与 myparam1&myparam2 相同,对吧?对于 fh3main,就我而言,它是一个 .m 文件而不是内联函数。那样的话,我是不是这样写:fh3main=@(v,param1,param2) myfun(v,param1,param2)?
    • 'myparam1' 是输入参数,将在接收函数中调用'param1'。当然,您可以使用常规的 m 文件功能代替匿名。
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2018-09-01
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多