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