【问题标题】:MatLab fmincon constrained optimization "Not enough input arguments."MatLab fmincon 约束优化“输入参数不足”。
【发布时间】:2013-12-25 00:36:47
【问题描述】:

我做了这个

function f=objfun(w)
a=0.5
w0=[0.1;0.2;0.3];
f=(a^2)/2 + w(1)+ w(2)+ w(3);

[w,fval]=fmincon('objfun',w0,[],[],[],[],[],[],'constraint')

但我收到此错误消息。

Error using objfun (line 3)
Not enough input arguments.

它在说什么问题?

我从 fmincon 那里学到了

http://www.math.colostate.edu/~gerhard/classes/331/lab/fmincon.html

它告诉我这样的代码

function f=objfun(x)

f=x(1)^4-x(1)^2+x(2)^2-2*x(1)+x(2);

将是进行约束优化的第一行。

出了什么问题?

【问题讨论】:

  • 您的代码混淆了,例如您在 objfun 中定义 w0。此外,fmincon 至少需要四个输入参数:(fun,x0,A,b)。也许您应该先从文档中了解该功能:mathworks.com/help/optim/ug/fmincon.html
  • 作为 Matlab 用户,您首先要学习的一些知识:使用或学习新功能时,在 Matlab 命令窗口中键入 help nameoffunction 并阅读。然后(或相反)您可以单击帮助底部的链接,也可以键入doc nameoffunction 在漂亮的浏览器窗口中深入阅读。只有在您用尽了这些资源并且意识到您发现的内容可能不适用于您的 Matlab 版本之后,才应该在谷歌上搜索函数的名称。
  • @A.Donda 最初我为stackoverflow编写了一个简化版本的代码。但是在我的代码中 fmincon 就像 [x,fval]=fmincon('objfun',w0,[],[],[],[],[],[],'constraint') 所以输入参数的不足可能不是问题。
  • 好的,我是否正确理解您在目标函数中调用fmincon?说真的,请先阅读文档。

标签: matlab optimization minimization


【解决方案1】:

我相信您需要将函数句柄传递给 fmincon。来自文档http://www.mathworks.com/help/optim/ug/fmincon.html

x = fmincon(@myfun,x0,A,b)

其中 myfun 是一个 MATLAB® 函数,例如

function f = myfun(x)
f = ...            % Compute function value at x

尝试将函数句柄传递给 fmincon。我假设约束是你的非线性约束函数,它也应该是一个函数句柄。我还假设您没有从目标函数内部调用 fmincon 。如果是这样,那么我认为您会有这样的事情:

objfun.m

 function f = objfun(w)
    a=0.5;
    f=(a^2)/2 + w(1)+ w(2)+ w(3);
    return
end

main.m

 w0=[0.1;0.2;0.3];
[w,fval]=fmincon(@objfun,w0,[],[],[],[],[],[],@constraint)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    相关资源
    最近更新 更多