matlab求最短距离问题

发布网友

我来回答

2个回答

热心网友

用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

热心网友

求点倒下线的吗?可以用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)

热心网友

用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

热心网友

求点倒下线的吗?可以用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)

热心网友

用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

热心网友

求点倒下线的吗?可以用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)

热心网友

用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

热心网友

求点倒下线的吗?可以用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)

热心网友

用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

热心网友

求点倒下线的吗?可以用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)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com