matlab中最短路编程求解

大二的时候发在matlab中文论坛的,写过来方便看,也算记录一下了

以下为原文-----------------------------------------------------------------------------------------------

运筹学学完最短路问题心血来潮,想通过matalb编程实现一下。

算法步骤是课上学的,如下:
1.令起点标号为0,即b(s)=0,
2.找出所有已标号vi和未标号vj的弧的集合,B={(i,j)},如果这样的弧不存在或者终点vt已标号,则计算结束
3.计算集合B中弧k(i,j)=b(i)+d(i,j)的标号
4.选一个点标号,b(l)=min{k(i,j)|(i,j)属于B},在最小的k(i,j)的终点j处标号b(l),返回第二步。

例题如图:


数字代表最短路问题里的运费或者时间。
废话不多bb,纯手工代码如下hhhh:
function [R,T] = minways( )
%最短路问题
D=[inf,8,6,2,inf,inf,inf;inf,inf,inf,inf,5,inf,inf;inf,5,inf,2,inf,4,inf;
    inf,inf,3,inf,inf,2,inf;inf,inf,inf,inf,inf,inf,5;
    inf,3,inf,inf,10,inf,7;inf,inf,inf,inf,inf,inf,inf];
R=[0,inf,inf,inf,inf,inf,inf];
Total=[1,2,3,4,5,6,7];
Done=[1];
Candidate=[2,3,4,5,6,7];
R(1)=0;
while (R(7)>1000)
a=length(Done);
b=length(Candidate);
t=1;
K={};
for i=1:a
    for j=1:b
  K{t}(i,j)=R(Done(i))+D(Done(i),Candidate(j));
    end
end
if a==1
[biaohao,number]=min(K{t});
else
x0=min(K{t});
[biaohao,number]=min(x0);
end
beibiaohao=Candidate(number);
Done=[Done,beibiaohao];
Candidate(Candidate==beibiaohao)=[];
R(beibiaohao)=biaohao;
t=t+1;
end
T=R(7);
end

写出来了很开心!!!
也发现了matalb的矩阵是多么的调皮,不听爸爸的话!

希望能给对这个问题感兴趣的提供一点微小的帮助。

END------------------------------------------------------------------------------------------------------------------------------------------------------

大二的时候好幼稚哈哈哈哈哈哈

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: matlab欧拉法仿真编程主要用于求解常微分方程的数值解。欧拉法是一种基本的数值积分方法,可以用于求解一阶常微分方程的近似解。 在matlab,我们可以通过定义函数并设置初始条件来实现欧拉法的数值求解。首先,我们需要建立一个函数,该函数描述了待求解的常微分方程的导数关系。例如,我们可以定义一个函数dydt来表示dy/dt的关系。 然后,在主程序,我们可以设置初始条件,包括方程的未知变量的初值和时间步长。然后,我们可以使用for循环来进行数值积分,根据欧拉法的迭代公式,逐步计算出函数在每个时间步长上的近似解。 在每次迭代,我们需要使用当前的时间和解的近似值,通过欧拉法的迭代公式计算出下一个时间步长上的解的近似值。然后,我们可以将这个解的近似值保存下来,并更新时间。 通过这样的迭代过程,我们可以得到函数在一段时间内的近似解。我们可以将这些解的近似值绘制成图像,进一步观察解的变化趋势。 总之,matlab欧拉法仿真编程可以帮助我们求解常微分方程的近似解。通过定义函数和设置初始条件,利用欧拉法的迭代公式进行数值积分,我们可以得到函数在一段时间内的近似解,并进一步分析解的变化趋势。 ### 回答2: 欧拉法是一种基本的数值求解方法,通过逐步逼近微分方程的结果来进行仿真和求解。在MATLAB,可以使用欧拉法进行函数的仿真编程。 首先,需要定义微分方程的初始条件和参数。例如,对于一阶常微分方程dy/dx = f(x, y),我们需要给定初始条件x0和y0,以及函数f(x, y)的定义。 接下来,可以使用欧拉法逐步逼近微分方程的解。可以通过设置步长h,从初始条件开始,计算下一个点的值。具体步骤如下: 1. 初始化变量,包括定义步长h、确定仿真时间范围和创建存储结果的向量。 2. 使用for循环进行迭代,直到达到设定的仿真时间。在每一步,计算下一个点的值。 3. 在每一步,根据欧拉法的定义,使用当前点的值和微分方程来计算下一个点的值。即 y(i+1) = y(i) + h*f(x(i), y(i))。 4. 更新变量并存储结果,即递增x的值,将当前点的值存储在结果向量。 5. 循环结束后,结果向量的值即为仿真所得的函数的近似解。 需要注意的是,欧拉法是一种一阶精度的方法,可能会存在误差。为了提高精度,可以选择更小的步长h,或者使用更高阶的数值方法来进行仿真。 综上所述,MATLAB可以通过欧拉法进行函数的仿真编程。通过定义初始条件和微分方程,逐步逼近微分方程的解,并存储结果。这样就可以得到函数的近似解,用于仿真和求解问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fff2zrx

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值