奥普图有45件奇怪的艺术品

2024-04-23 13:56:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用Python和Matlab实现了算法。它在Python中工作正常,但是在Matlab中我在输出中得到了奇怪的人工制品(大多数时间,但不是所有的方式)。如下图所示,人工制品就是那个高峰。你知道吗

enter image description here

我试图克服所有的分歧。我在Python中覆盖所有与Matlab不同的函数(例如除法余数)。也许我错过了什么,但我不这么认为。函数的输出似乎与我计算出的所有测试都一致。你知道吗

我唯一没有“规范化”的部分是ODE解算器。在Matlab中,我使用ode45定义的时间点数组。在Python中,我使用自己的ODE45,它工作得很好,没有人工制品。我还尝试了不同的Python ode解算器(来自scipy),效果也很好。你知道吗

所以我的问题是-你知道为什么Matlab(很可能是ode45)有时会导致如此奇怪的错误吗?你知道吗

matlab中的公式:

function dxdt = derivsecgsyn(t,x,flag,rr,sfint,ti,ai,bi)

xi = cos(ti);
yi = sin(ti);
ta = atan2(x(2),x(1));
r0 = 1;
a0 = 1.0 - sqrt(x(1)^2 + x(2)^2)/r0;
ip = 1+floor(t*sfint); 
w0 = 2*pi/rr(ip);


fresp = 0.25;
zbase = 0.005*sin(2*pi*fresp*t);

dx1dt = a0*x(1) - w0*x(2);
dx2dt = a0*x(2) + w0*x(1);

dti = rem(ta - ti, 2*pi);
dx3dt = - sum(ai.*dti.*exp(-0.5*(dti./bi).^2)) - 1.0*(x(3) - zbase);

dxdt = [dx1dt; dx2dt; dx3dt];

Tags: 函数时间rrpitia0ai算器