作业帮 > 综合 > 作业

用Matlab解决非线性规划问题

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/05/07 16:28:33
用Matlab解决非线性规划问题
天然气开采点S(0,0),需铺设管道分别向城市a(400km,400km),b(400km,600km),c(600km,400km)输送天然气(城市之间也可铺设管道),且知这三个城市的天然气日需量分别为5万,4万,10万立方米,铺设日输天然气能力为1万立方米的管道1km的总费用为5万元(假定总费用与管道的输送能力成正比),试设计管道铺设方案使费用最省,并用Matlab画出管道铺设图,标注每条管道的输送能力.
在不使用最短路算法的前提下给出答案
用Matlab解决非线性规划问题
function hh 
X0=[500 500]; 
format short g 
[X,FVAL,EXITFLAG]=fminsearch(@myfun,X0) 
%test fmin 
syms x y 
A=5;B=4;C=10; 
f0=(A+B+C)*sqrt(x^2+y^2); 
fa=A*sqrt((x-400)^2+(y-400)^2); 
fb=B*sqrt((x-400)^2+(y-600)^2); 
fc=C*sqrt((x-600)^2+(y-400)^2); 
f=5*(f0+fa+fb+fc) 
ezmesh(f,[0 500 0 500]) 
function f=myfun(x) 
A=5;B=4;C=10; 
f0=(A+B+C)*sqrt(x(1)^2+x(2)^2); 
fa=A*sqrt((x(1)-400)^2+(x(2)-400)^2); 
fb=B*sqrt((x(1)-400)^2+(x(2)-600)^2); 
fc=C*sqrt((x(1)-600)^2+(x(2)-400)^2); 
f=5*(f0+fa+fb+fc); 
结果: 
X = 
2.2307e-005 1.7288e-005 
FVAL = 
64620 
EXITFLAG = 

开始不相信,x=0,y=0的结果.以为一根大管,到了三角形中间,再分配. 
经验证(见下图),极小值的确就在(0,0)处!
从出发点分别引出三条管线,就像楼上回答者: xiaomol_ckt绘制的那样.