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
有什么问题啊?? 展开
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
有什么问题啊?? 展开
展开全部
程序的问题很多:
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是什么版本?
我这里没任何问题啊(包括你改后的代码)。
如果还有问题,请贴出截图。
展开全部
问题主要是: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);
就是这个原因。
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);
就是这个原因。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询