我一直试图数值求解对于基本谐波振荡器的曲线图,但是当在对象上的加速度成比例,从中心的距离的倒数发生问题:Python的数值求解谐振子图形产生不想要的结果
import math
from pylab import *
xg = [2]
xt = [0]
k = 1
dt = 1/1000
Vx = 0
for i in range(800000):
a = -1/xg[i-1] #acceleration on the object
Vx = Vx + dt*a
xg.append(xg[i-1]+Vx*dt)
xt.append(i*dt)
plot(xt,xg)
show()
正如你所看到的,它似乎倾泻而下,而不是因为某种原因返回。
我想知道是什么原因造成这种情况发生,我一直在努力解决这个问题了几个小时。
是的,我是新来的python,堆栈交换和数值解决问题。任何反馈表示赞赏
您的代码在我的电脑上无法使用。它只是按照我的预期在屏幕上打印一个点。我想知道你怎么能制作这样的图表? – phil
请注意,'dt = 1/1000'将在Python中始终为'0'。 'dt = 1.0/1000'可能是你想要的。 – phil
我猜他正在使用python3。关于你的问题:谐波振荡器的加速度与距离成正比。因此,您必须计算加速度:'a = -xg [i-1]'。此外,你会得到这种一阶积分的漂移。 – jotasi