永发信息网

matlab优化非线性约束

答案:2  悬赏:0  手机版
解决时间 2021-02-22 17:42
  • 提问者网友:咪咪
  • 2021-02-22 11:55
目标函数是:求x(2)/x(1)-800最大值

约束条件是:(x(1)-566)^2+(x(2)-566)^2大于600^2,小于1100^2,x(1)大于-43小于800;x(2)大于707小于1100;我在matlab编写文件如下:
function [c, ceq]=mycon(x)
c=((x(1)-566)^2+(x(2)-566)^2-600)*((x(1)-566)^2+(x(2)-566)^2-1100);
ceq=[ ]; %无等式约束

fun='x(2)/x(1)-800';
x0=[-40 720];
A=[];
b=[];
Aeq=[ ];
beq=[ ];
lb=[-43 707];
ub=[800 1100];
[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon)
为什么结果和理想的差很多?
最佳答案
  • 五星知识达人网友:慢性怪人
  • 2021-02-22 12:04
将下面语句在matlab编辑器中保存为mycon.m
function [c, ceq]=mycon (x)
c=(300/210000*(1-x(1)/300))^3/x(2)^2-(300/210000*(1-x(1)/300))^3/(0.2+x(2))^2-0.000075;
ceq=[ ]; %无等式约束
在matlab窗口中输入:
fun=’-x(1)*(0.02+x(2))/(2*(300-x(1)))+300/210000’; x0=[1 1];A=[];b=[]; Aeq=[ ]; beq=[ ];
lb=[0 0];ub=[300 1]; [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon)
全部回答
  • 1楼网友:何以畏孤独
  • 2021-02-22 12:37
方法/步骤 此题的问题描如下图。由于本经验主要是谈非线性约束下的最优化问题,对于其他线性约束就不再考虑。 然后启动matlab。新建一个函数文件,用来写目标函数。 在编辑器窗口中写入我们要求的目标函数,并保存,注意使函数名与文件名相同。 然后再新建一个函数文件,用来编写非线性约束条件。步骤及其注意事项同上。额外需要注意的是,需要将两个函数文件放在同一个文件夹中。 最后,在命令行窗口处写入fmincon命令。此处需要注意的是,对于没有的线性约束条件的位置药用空矩阵代替,并且初始条件需要满足非线性约束条件(本例中写的是[1,2])。 敲下键盘上的enter建,结果得出。可以发现exitflag=1是大于0的,所以结果正确。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯