Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2009-09-11, 21:35   #1
340440776
初级会员
 
注册日期: 2009-09-11
帖子: 1
声望力: 0
340440776 正向着好的方向发展
默认 求教:非线性规划问题(含源代码)

我现在做一个非线性规划问题,用fmincon命令做了一下,发现给出的初始向量x0不同时,有时得出的结果会不一样,不知道为什么?
问题: 目标函数是y=3600*0.05*336400000/(3030600-6441.7*x1+1863200000000/x2)+0.03747*x2*x2*x2*0.55/(3600*1000*943.1*943.1*943.1*0.9)
约束有80>=x1-336400000/(1.163*x2)>=60
且140>=x1>=90,8000000>=x2>=1000000.
因为用fmincon命令做出的结果不太真,我就又编了一个循环结构的程序,按步长搜索了一下。源代码如下:
step_a=1;%x(1)的间距是1
step_b=100;%x(2)的间距是100
x1=90:step_a:140;
x2=1000000:step_b:8000000;
for i=1:1:length(x2)
for j=1:1:length(x1)
if(80>=x1(j)-336400000/(1.163*x2(i)) && x1(j)-336400000/(1.163*x2(i))>=60)
y(i,j) =3600*0.05*336400000/(3030600-6441.7*x1(j)+1863200000000/x2(i))+0.03747*x2(i)*x2(i)*x2(i)*0.55/(3600*1000*943.1*943.1*943.1*0.9);
else
y(i,j)=1000999999;%或不满足约束条件,则令y等于一个很大的值,这样在求取y的最小值时,肯定不会取到这些值
end
end
end
min_of_y=min(min(y));%找到了y的最小值

for i=1:1:length(x2)
for j=1:1:length(x1)
if y(i,j)==min_of_y
min_x1=90+(j-1)*step_a;
min_x2=1000000+(i-1)*step_b;
end
end
end
min_x1
min_x2
min_of_y


运行结果是min_x1 =140


min_x2 =2159000


min_of_y =2.0316e+004

这里结果明显不符合80>=x1-336400000/(1.163*x2)>=60这个约束条件。找了好久没有找到原因,请高手指点一下。不胜感激。
340440776 当前离线   回复时引用此帖
 

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 16:08


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.