前往
大廳
主題

ZeroJudge - f976: The Adventure of Morty and Jessica 解題心得

Not In My Back Yard | 2021-07-22 00:00:01 | 巴幣 0 | 人氣 227

題目連結:


題目大意:
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 之值即可(不過要注意浮點數誤差)。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作