matlab fmincon的问题!

已知:x^7在[m,n]上积分小于等于2,且x^3在[m,n]上积分等于1;现想确定n的最小值,我编了下面的程序:function[c,ceq]=nonlcon(x,m,... 已知:x^7在[m,n]上积分小于等于2,且x^3在[m,n]上积分等于1;现想确定n的最小值,我编了下面的程序:
function [c,ceq]=nonlcon(x,m,n)
syms x m n ;
c=int(x^7,m,n)-2;
ceq=int(x^3,m,n)-1;
end

function main
syms x m n y ;
y=fmincon(n,1,[],[],[],[],[],[],'nonlcon');
end
有什么问题啊??
展开
 我来答
tianxiawulang
推荐于2016-10-09 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2656万
展开全部

程序的问题很多:

1、如楼上所说,n并不是一个函数句柄或函数名。这是个基本错误。

2、不要乱定义符号变量。尤其在nonlcon中,定义符号变量导致函数输入参数全被覆盖了。

3、需要搞清楚:未知数有两个——m和n,尽管你想优化n,但不能抛开m不管。

4、int是用于符号积分的,优化要的是数值积分。

 

楼上指出了一个问题,但并没有给出解决的方法。

 

以下是我编写的代码(取两组不同的初值,有两个局部最优点):

function main
mn=fmincon(@(mn)(mn(2)),[1 2],[],[],[],[],[],[],@nonlcon)
mn=fmincon(@(mn)(mn(2)),[-1 -2],[],[],[],[],[],[],@nonlcon)

function [c,ceq]=nonlcon(mn)
c=quad(@(x)x.^7,mn(1),mn(2))-2;
ceq=quad(@(x)x.^3,mn(1),mn(2))-1;

得到优化结果为:

mn =
    0.0443    1.4142
mn =
   -0.0434   -1.4142

mn的值中,前一个为m,后一个为n。综合起来的结果是n=-1.4142。

 

上述结果未考虑其它约束,例如,如果要求m<=n或者n>=0之类的,结果就只能是n=1.4142。

追问
function main11
mn=fmincon(@(mn)(mn(2)),[1 2],[],[],[],[],[],[],@nonlcon12)
end
function [c,ceq]=nonlcon12(mn)
c=quad(@(x)x.^7,mn(1),mn(2))-2;
ceq=quad(@(x)x.^3,mn(1),mn(2))-1;
end
您好,按照您的改法我试了试,还是报错说输入参数太多
追答
你用的MATLAB是什么版本?
我这里没任何问题啊(包括你改后的代码)。
如果还有问题,请贴出截图。
我行我素850915
2015-05-09 · TA获得超过8241个赞
知道大有可为答主
回答量:5788
采纳率:77%
帮助的人:1763万
展开全部
问题主要是:fmincon要求第一个参数是函数柄,而你的n不是。运行一下就提示:
Error using optimfcnchk (line 288)
If FUN is a MATLAB object, it must have an feval method.

Error in fmincon (line 423)
funfcn =
optimfcnchk(FUN,'fmincon',length(varargin),funValCheck,flags.grad,flags.hess,false,Algorithm);

就是这个原因。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式