我正在撰寫代碼來使用歐拉方法求解簡諧振子系統。系統的二階 ODE 由兩個一階 ODE 給出,x' = v 和 v' = -k/m x。問題是求解作為時間函式的 x 和 v 的一對方程,并繪制 x 與 t 的關系圖。使用的模型是鈉原子,因此質量為 3.82x10^-26 kg,k = 12.2 N/m。我被告知使用 1.0x10^-10 m 的初始位置和初始速度 v = 0 m/s。
我以前有一個程式可以解決螺旋彈簧的 SHO 系統,效果很好。然而,該系統的數量要大得多。在我的代碼中,我只是更改了引數的值,并保留了螺旋彈簧的其他所有內容。該圖應該看起來像一條正弦曲線,但事實并非如此,而且我不斷收到溢位警告。
我的問題是,我還需要更改什么才能使此代碼適用于這些數字?
簡單諧波振蕩器的 Python 代碼
圖形
uj5u.com熱心網友回復:
嘗試了您的代碼并對引數進行了一些更改后,我相信您的問題是由時間步長引起的。
如果您考慮受彈簧常數作用時鈉原子的加速度,它將非常大,大約10^16 ms^-2,因此原子將圍繞其平衡非常快速地移動。振蕩周期\sqrt{m/k}約為 ,在本例中約為 1e-27 秒。
因此,如果您使用 0.1 秒的時間步長,原子將振蕩很多次,因此您看不到任何看起來像正弦波的東西。發生溢位是因為距離和速度的估計步長太大,歐拉近似不合適。
我通過設定更改了您的代碼:
t_max = 1e-12
delta_t = 1e-15
并從中得到一個很好的正弦波。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535656.html
標籤:Python数学物理
