1|把時間暫停
假設手機拍下一顆正在飛行的球。我們把畫面暫停,並且已從前後影格知道它此刻的位置 與速度 。
這些資料,夠不夠算出 0.01 秒後的位置?
先不用找課本公式。想像你只要往未來走一小步:如果這一瞬間球正以速度 前進,那麼很短的時間 之後,位置應該差不多是
可是,球的速度也可能正在改變。
2|只往前走一小步
如果此刻的加速度是 ,下一瞬間的速度便可以近似寫成
我們先用一維符號把想法說清楚;在平面或空間中,位置、速度與加速度都可以改用向量表示。
位置靠速度往前走,速度靠加速度往前走。問題好像縮小了,卻還留著最關鍵的一塊:
加速度從哪裡來?
3|牛頓的回答
對質量固定的物體,牛頓定律告訴我們:
這裡的 是物體所受的合力。只要知道力的規則,就能把「現在的狀態」推進到「下一瞬間的狀態」,再往前一步、再一步。
物理定律不是先把軌跡告訴我們,而是告訴我們「狀態如何演化」。
試著往下一瞬間走
假設球從離地 5 公尺處水平拋出,水平速度為每秒 4 公尺,僅受向下的重力加速度 9.8 m/s²。改變時間步,觀察同一個模型算出的路徑。
縱軸:高度(公尺) · 橫軸:水平位置(公尺)
時間 0.00 秒,水平位置 0.00 公尺,高度 5.00 公尺。
使用下文先更新速度、再更新位置的簡化方法。更換時間步會重新開始;到達地面附近即停止,不模擬碰撞。
4|一顆蘋果,和一顆行星
蘋果落向地面,行星繞著恆星運動。它們的路徑很不一樣,但在簡化的模型裡,都可以從萬有引力出發:
其中 是萬有引力常數, 是中央天體的質量, 是運動物體的質量; 是從中央天體指向物體的位置向量,。負號表示力朝向中央天體。我們先假設中央天體固定,忽略其他天體及阻力。
電腦可以反覆做這幾件事:
- 由位置求出力。
- 由力求出加速度。
- 更新速度。
- 更新位置,再重新計算力。
在時間步足夠小、數值方法適當時,軌道結構會由運動定律自然出現;究竟是繞行還是飛離,也和最初的位置、速度有關。
我們沒有事先把橢圓畫好交給電腦。當然,也不是任意一種簡單方法、隨便選一個時間步,就能精確畫出橢圓:數值誤差可能讓軌道偏移,甚至逐漸向外或向內漂移。
5|為什麼微積分會出現?
當我們把 想得愈來愈小,直到討論 的極限,剛才的近似便通向描述瞬時變化的方程:
也就是
微積分不是為了把物理變難,而是「下一瞬間會發生什麼?」這個問題本身需要描述瞬時變化的數學。
現在要找的,是一整個隨時間改變的函數 :它在每一瞬間,都要符合力所決定的變化規則。這就是微分方程第一次出現的地方。
6|讓電腦試一次
以下是概念性的 Python 寫法。先給定初始位置、速度、質量、時間步及步數,再依想研究的現象定義 force():
for step in range(N):
a = force(x, v) / m
v = v + a * dt
x = x + v * dt
這段程式先更新速度,再用更新後的速度移動位置,是半隱式歐拉法的一種寫法;和前面用當下速度估算位置的版本略有不同。兩者都在做一件事:把連續的運動,拆成可以計算的小步。
這是用來理解概念的簡化數值方法,不是高精度天體計算程式。程式片段中的變數與力函式需要先定義;若力隨時間改變,還需要把時間傳入函式。
保留這個更新流程,換掉 force(),並給定合適的初始條件,就可以探索自由落體、拋體、彈簧、重力軌道與阻力。遇到碰撞、接觸地面等情況,還需要額外的處理規則。
7|牛頓的描述,在哪裡需要改寫?
如果速度接近光速呢?
剛才的推算默認所有觀察者共用同一時間,也使用牛頓式的速度與運動描述。若真空中的光速對所有慣性觀察者都相同,這套描述就必須修正。
先把這個問題留下來:為什麼連「同一瞬間」都可能需要重新理解?沿著它追問,就會走到狹義相對論的入口。
8|把三個問題帶走
- 如果 取得太大,模擬的行星軌道可能發生什麼?
- 若 ,不先背 ,電腦能否自己產生振盪?
- 如果只有位置、沒有速度,能不能預測未來?一個系統的狀態至少需要包含哪些資訊?
Kakau 不要求你在進班前知道答案。
我們比較在意的是:看到這些問題時,你會不會想繼續往下挖。