0

数据点的数量与时间步长和积分步长有什么关系?如何确定步长以便我可以生成N点数?

例如,当N=1000数据点(每个时间序列的长度)应该是什么t以及积分时间步长时,dt. 同样,如果我想生成,N=10k那么如何确定tdt. 下面的代码用于模拟罗斯勒系统。我得到了一个有趣的情节,而不是通常的吸引子。我想生成用户定义N的点数。但我不明白应该tdt应该采取什么价值观。Rossler 系统应该在参数值为 时给出一个整洁的混沌吸引子a=0.38,b=0.2,c=5.7

a = 0.38; b = 0.2; c = 5.7;
t = [0,50];
xinit = [-20 0 0];
ross = @(t, x) [-x(2)-x(3); x(1) + a*x(2); b + x(3)*(x(1) - c)];
[T, X] = ode45(ross, t, xinit);
figure; hold on;
plot3(X(:,1), X(:,2), X(:,3))
4

1 回答 1

0

例如,当 N=1000 个数据点(每个时间序列的长度)时,t 应该是多少,积分时间步长 dt

t应该是您的 1×N '数据点'。使用ode45,它只允许你做初始点和结束点。

dt是相邻时间点之间的持续时间。你不需要它ode45。如果您需要了解 Matlab 的功能,请查看本文或从他们的参考书目中挑选第一本书。

如何确定t

它应该来自您问题的性质。

您可以从统一的时间步长开始。例如,。t=linspace(0,50,10000)

我在自适应时间步长上做了一个快速的谷歌搜索,前几个链接看起来相当不错。从使用欧拉方法说明概念的教育写作开始。

ode45使用自己选择的自适应时间步长。他们的方法在第一篇链接文章中有所描述。

下面的代码用于模拟罗斯勒系统。

你的odefun格式是对的。Ofc,由于我们仅在Minimal Reproducible Example中进行交流,因此您的系数必须是正确的——尽管您可能希望再次检查。

我对以下结果是否是正确的解决方案没有意见。(我不想。)

您可以尝试不同的公差值,看看是否可以产生更合理的结果。

ode45当我手动实现的非自适应 RK45 甚至 Euler 方法按预期工作时,知道我从非常简单的系统中看到了奇怪和不正确的结果,也许您会发现这很有帮助。

如果我是你,我会同时在 math.stackexchange 上讨论自适应 ODE 方法收敛的原因和时间。也许这会让您了解ode45结果可能高度不准确的原因和时间。

我想生成一个用户定义的 N 个点。

ode45将决定自己的时间步长。输入扩展t而不是仅输入端点会告诉ode45您使用所需的点数。它对于告诉ode45及时向后整合也很有用。生成 1×N 向量的格式为. 您不需要也不能为.t=linspace(t0,tf,N)dtode45


使用ode45, 100k 点,您的常数: 1

使用ode113、 100k 点、a=0.2ode15s结果看起来相似: 在此处输入图像描述

于 2020-08-17T15:54:23.167 回答