matlab求最短距离问题

有n个点,每个点之间都是相连的,求从一个点经过所有的点后再回到原点的最短距离的matlab的程序。

用matrix dist储存每个点之间的距离,也就是说(dist)ij 是点i 和 j之间的距离。

N = size(dist,1);
seq = 1:1:N;
perm = perms(seq);
size_perm = size(perm,1);
min_dist = inf;

for i =1:1:size_perm
total_dist = 0;
for j = 1:1:N
total_dist = total_dist + dist(j,perm(i,j));
end
if total_dist<min_dist
min_dist = total_dist;
end
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-10
求点倒下线的吗?可以用fmincon
这是个约束问题,假设这个点为(a,b),曲线方程为f(x,y)=0,
这个问题可以转化为
min d^2=(x-a)^2+(y-b)^2
st. f(x,y)=0
你可以调用matlab的最优化函数fmincon

下面是函数介绍
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fmincon是求解目标fun最小值的内部函数
x0而初值
A b线性不等式约束
Aeq beq线性等式约束
lb下边界
ub上边界
nonlcon非线性约束条件
options其他参数,直接使用默认的即可

比如说 求目标函数f(x,y,z)=-xyz的最小值
有如下约束:
线性不等式:0<x+2y+3z<70
线性等式约束:x+y+z=100
边界约束:x,y,z>0

1.约束书写
对于0<x+2y+3z<70转换为
x+2y+3z<70和-x-2y-3z<0

A=[1 2 3;-1 -2 -3];
b=[70;0];

对于x+y+z=100有
Aeq=[1 1 1];
beq=[100];

2.边界的书写
这里只有下边界,故
lb=[0 0 0];

3.目标函数书写
function f=objfun(x_var)
%由于Matlab中可以求解多个变量,但是必须使用数组
%由于有三个变量,故x_var是长度为3的数组
x=x_var(1);
y=x_var(1);
z=x_var(1);
%直接写出目标的表达式
f=-x*y*z;

4.书写调用函数
%根据你的经验和实际,估计变量的大概范围,即初值
%有几个变量就有几个初值
x0=[1 2 3];
x=fmincon(@objfun,x0,A,b,Aeq,beq,lb)