2017-03-06 215 views
2

我一直試圖數值求解對於基本諧波振盪器的曲線圖,但是當在對象上的加速度成比例,從中心的距離的倒數發生問題: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,堆棧交換和數值解決問題。任何反饋表示讚賞

+0

您的代碼在我的電腦上無法使用。它只是按照我的預期在屏幕上打印一個點。我想知道你怎麼能製作這樣的圖表? – phil

+0

請注意,'dt = 1/1000'將在Python中始終爲'0'。 'dt = 1.0/1000'可能是你想要的。 – phil

+1

我猜他正在使用python3。關於你的問題:諧波振盪器的加速度與距離成正比。因此,您必須計算加速度:'a = -xg [i-1]'。此外,你會得到這種一階積分的漂移。 – jotasi

回答

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

0

假設你想加速比例到距離的倒數,當xg接近0時,數值將發散,引起數值不穩定。