Python在数值上解决了谐振子图形产生不需要的结果

时间:2017-03-06 11:39:20

标签: python physics numerical

我一直试图用数字方法求解基本谐振子的图形,但是当物体上的加速度与距离中心的距离的倒数成反比时会出现问题:

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,堆栈交换和数字解决问题的新手。任何反馈都表示赞赏

2 个答案:

答案 0 :(得分:2)

试试这个

import math
from pylab import *
xt = [2]
t = [0]
k = 1

dt = 0.0001
Vx = 0
for i in range(800000):
    t.append(dt*i)
    a = -k*xt[i]
    xt.append(xt[i] + dt*Vx)
    Vx = Vx + dt*a
plot(t,xt)
show()

你最终得到这个:(我也将时间步长fyi减少到1/10000) enter image description here

答案 1 :(得分:0)

假设你想要一个与距离倒数成比例的加速度,当xg接近0时,数值会发散,导致数值不稳定。