題目連結:
題目大意:
Morty 和 Jessica 正自由落體。一開始時間點 t = 0 的初速為 0。而向下之重力加速度為 a 、 空氣阻力的向上加速度為 kv(其中 v 為當前的速度),因此合併的向下加速度為 a - kv。
輸入有多列,每列給定三正整數 a 、 k 、 t(1 ≦ a 、 k ≦ 1000,1 ≦ t ≦ 1000000),試問 t 單位時間後的位移 x(t) 、速度 v(t) 以及加速度 a(t) 之值為何,請四捨五入至小數點後第二位?輸出格式參見範例輸出。
範例輸入:
1 4 5
2 4 3
1 1 1
範例輸出:
x(5)=1.19
v(5)=0.25
a(5)=0.00
x(3)=1.38
v(3)=0.50
a(3)=0.00
x(1)=0.37
v(1)=0.63
a(1)=0.37
解題思維:
根據微積分的概念,位移 x(t) 對於時間 t 的微分恰好為 v(t)(瞬時速度即瞬時位移變化量),而速度 v(t) 對於時間 t 的微分恰好為 a(t)(瞬時加速度即瞬時速度變化量)。
因此根據題目我們可以列出一個一階線性常微分方程式(First-Order Linear Ordinary Differential Equation):
v'(t) = a - k * v(t)
而不會解微分方程式沒關係,有不少網站可以幫你忙。例如
wolframalpha.com 這個強大網站,你只要輸入「solve v'(t) = a - k * v(t) for v」便可以得到
v(t) = (a ÷ k) + ce ^ (-kt)
其中 c 為一個未知常數。而我們可以代入 t = 0 時會得到初速 = 0 這個資訊得出 c 應為
-(a ÷ k)
而我們已經知道 v(t) 了,就可以反推回去 x(t)(利用積分,以下令 U = (a ÷ k)):
U × (t + e ^ (-kt) / k) - C
同樣地,一開始位移量 = 0,所以 t = 0 時 x(0) = 0 可得
C = (U ÷ k)
這樣一來,x(t) 、 v(t) 、 a(t) 這三個函數都已知了,因此直接套入給定的 a 、 k 、 t 之值即可(不過要注意浮點數誤差)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。