matlab有一个45,MATLAB:只需一步即可推进ode45

博主在MATLAB中遇到一个问题,即在使用ode45函数求解Lorenz系统的最大Lyaponov指数时,需要比较两条相近的轨迹。他们尝试了一次调用ode45的方法来避免重复调用,但结果不匹配。他们在循环中重新解微分方程并在每个时间步调整第二个轨迹,发现生成的矩阵r和R不一致。他们寻求帮助以解决这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在matlab中使用 ode45() 进行动力学的一些工作,使用this procedure来计算Lorenz系统的最大Lyaponov指数 .

该过程涉及从 x0 开始求解微分方程组,并将其与非常接近 x0 的轨迹进行比较 .

在每个时间步,第二个轨迹需要在推进时间步之前重新调整,所以我希望能够只调用一次 ode45() - 这可能吗?

这里介绍了替代解决方案的开始尝试,但它不起作用;据我所知,下面得到的矩阵 r 和 R 应该是相似的:

% Time

ti = 0; tf = 1; res = 10;

T = linspace(ti, tf, res);

% Solve the system first time

[~,R] = ode45('tbmLorenz',T,x0);

% Alternate trajectory

r = zeros(size(R));

% Temporary cordinates

temp = zeros(3,3);

% Solve for second trajectory

for i = 2:(res-1)

% Time step

ts = T((i-1):(i+1));

% Solve three steps

[~,temp] = ode45('tbmLorenz',ts,r(i-1,:));

r_i = temp(2,:)

% Code to alter r_i goes here

% Save this

r(i,:) = r_i;

end

......但他们不是:

r =

1.0000 3.0000 4.0000

9.7011 20.6113 7.4741

29.9265 16.4290 79.0449

-5.7096 -15.2075 49.2946

-12.4917 -13.6448 44.7003

-13.6131 -13.8826 45.0346

-13.5061 -13.1897 45.4782

-13.0538 -13.0119 44.5473

-13.4463 -13.8155 44.4783

0 0 0

>> R

R =

1.0000 3.0000 4.0000

9.7011 20.6139 7.4701

29.9663 16.5049 79.1628

-5.7596 -15.2745 49.3982

-12.4738 -13.5598 44.7800

-13.5440 -13.8432 44.9084

-13.5564 -13.3049 45.4568

-13.1016 -12.9980 44.6882

-13.3746 -13.7095 44.4364

-13.7486 -13.6991 45.4092

r 的最后一行为零不是问题 .

有任何想法吗?干杯! \ t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值