用Matlab解决非线性规划问题

天然气开采点S(0,0),需铺设管道分别向城市a(400km,400km),b(400km,600km),c(600km,400km)输送天然气(城市之间也可铺设管道),... 天然气开采点S(0,0),需铺设管道分别向城市a(400km,400km),b(400km,600km),c(600km,400km)输送天然气(城市之间也可铺设管道),且知这三个城市的天然气日需量分别为5万,4万,10万立方米,铺设日输天然气能力为1万立方米的管道1km的总费用为5万元(假定总费用与管道的输送能力成正比),试设计管道铺设方案使费用最省,并用Matlab画出管道铺设图,标注每条管道的输送能力.
在不使用最短路算法的前提下给出答案
展开
化学工程
2009-05-25 · TA获得超过8900个赞
知道大有可为答主
回答量:2212
采纳率:80%
帮助的人:3330万
展开全部

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绘制的那样。

xiaomol_ckt
2009-05-26 · TA获得超过216个赞
知道答主
回答量:41
采纳率:0%
帮助的人:0
展开全部

不知道你的题目是不是描述有问题。

但是如果,如果总费用与管道的输送能力成正比,那么只需要直接连接开采点到目标城市的路径则是最省的铺设方案。因为那样的条件相当于是独立运输的,运输路程最短就是最省的方案。

余下的问题就是用matlab画出图像即可。 

x=1:400;

y=1:400;

plot(x,y)

gtext('5')

gtext('(400,400)');

hold on;

z=1:1.5:600;

plot(x,z)

gtext('4');

gtext('(400,600)');

hold on;

plot(z,y)

gtext('6')

gtext('(600,400)');

hold off;

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式