例如求f=(200+3x(5))*(1000-x(4))/[(100+3*x(1))*(600+x(5))*(2100+20*x(3)+20*x(2))]的最大值,约束条件:x(1)+x(2)+x(3)+x(3)+x(4)+x(5)=100。告诉我方法也可以
x(i)为自然数
matlab求非线性极值
答案:3 悬赏:40 手机版
解决时间 2021-02-07 00:08
- 提问者网友:斑駁影
- 2021-02-06 13:25
最佳答案
- 五星知识达人网友:酒者煙囻
- 2021-02-06 15:02
fmax=-inf;
ff(5000000)=0;
cnt=0;
for x1=0:100
temp1=100+3*x1;
for x2=0:100-x1
x1_2=x1+x2;
for x3=0:100-x1_2
x1_3=x1_2+x3;
temp3=2100+20*x3+20*x2;
for x4=0:100-x1_3
x5=100-(x1_3+x4);
if x5>=0 || x5<=100
temp4=1000-x4;
cnt=cnt+1;
f=(200+3*x5)*temp4/(temp1*(600+x5)*temp3);
ff(cnt)=f;
if fmax<f
fmax=f;
[x1,x2,x3,x4,x5,fmax]
end
end
end
end
end
end
fmax
ff(5000000)=0;
cnt=0;
for x1=0:100
temp1=100+3*x1;
for x2=0:100-x1
x1_2=x1+x2;
for x3=0:100-x1_2
x1_3=x1_2+x3;
temp3=2100+20*x3+20*x2;
for x4=0:100-x1_3
x5=100-(x1_3+x4);
if x5>=0 || x5<=100
temp4=1000-x4;
cnt=cnt+1;
f=(200+3*x5)*temp4/(temp1*(600+x5)*temp3);
ff(cnt)=f;
if fmax<f
fmax=f;
[x1,x2,x3,x4,x5,fmax]
end
end
end
end
end
end
fmax
全部回答
- 1楼网友:枭雄戏美人
- 2021-02-06 17:02
我估计是无穷大
令x(1)-> -100/3
那么分母 ->0
随便取一组x(2)~x(4)满足条件的值
只要分子不->0, 那么表达式的值就->∞
- 2楼网友:深街酒徒
- 2021-02-06 16:08
在确定了约束函数后,可以在matlab中进行编写求极值程序。
fun=@(x)------ %输入函数表达式
x0=[]; %附函数初值lb=[]; %约束下界 ub=[]; %约束上界options=optimset('maxfunevals','1000','algorithm','sqp');% 设置求解最大次数及算法,往往对于复杂函数表达式,默认的算法不能求解出来!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯