我正在编写代码来解决简单的谐振子系统使用欧拉法。该系统的二阶ODE为两阶ODE,分别为x‘=v和v’= -k/m,问题是将x和v的方程解成时间函数和图first,所用模型是一个钠原子,质量为3.82x10^-26 kg,k=12.2N/m.
我以前有一个解决螺旋弹簧SHO系统的程序,它工作得很好。然而,该系统的数字要大得多。在我的代码中,我只是更改了参数的值,并保留了其他一切,就像螺旋弹簧一样。这个图形应该看起来像一个正弦曲线,但它不是,我一直收到溢出警告。
我的问题是,我还需要修改哪些代码才能处理这些数字呢?
发布于 2022-11-15 18:30:45
在尝试了您的代码并对参数进行了一些更改之后,我相信您的问题是由您的时间步长造成的。
如果你考虑钠原子在弹簧常数作用下的加速度,它会很大,在10^16 ms^-2附近,所以原子会在平衡附近快速移动。振荡周期是\sqrt{m/k}的阶数,在这种情况下,大约是1e-27秒。
所以,如果你用0.1秒的时间步长,原子会振荡很多次,所以你不会看到任何东西看起来像正弦波。发生溢出的原因是,距离和速度的估计步长太大,欧拉近似是不合适的。
我通过以下设置更改了您的代码:
t_max = 1e-12
delta_t = 1e-15从中得到了一个很好的正弦波。
https://stackoverflow.com/questions/74450022
复制相似问题