2020年1月15日 星期三

利用反作用力後退

作者:王一哲
日期:2020/1/15




題目


假設有一個裝置本體的質量 $M$,裝置上載有一些即將被水平拋出的物體,物體的總質量為 $m$,且$M>m$。假設總共拋出 $N$ 次,則每次拋出的物體質量 $dm = m/N$,被拋出的物體相對於拋出後本體的速度為 $v$。請問將所有物體拋出後本體的速度$v_t$與拋出次數$N$的關係為何?



理論計算


第1次拋出物體後本體對地速度為 $v_1$,被拋出的物體對地速度為 $v + v_1$,由動量守恆可知

$$(M+m-dm) v_1 + dm (v+v_1) = 0$$
$$v_1 = -\frac{dm \cdot v}{M+m}$$

第2次拋出物體後本體對地速度為 $v_2$,被拋出的物體對地速度為 $v + v_2$,由動量守恆可知

$$(M+m-2dm) v_2 + dm (v+v_2) = (M+m-dm) v_1$$

$$\begin{align*}
v_2 &= \frac{-dm \cdot v + (M+m-dm) v_1 }{M+m-dm} \\
&= -\frac{dm \cdot v}{M+m-dm} + v_1 \\
&= -dm \cdot v \left(\frac{1}{M+m-dm} + \frac{1}{M+m} \right)
\end{align*}$$

第3次拋出物體後本體對地速度為 $v_3$,被拋出的物體對地速度為 $v + v_3$,由動量守恆可知

$$(M+m-3dm) v_3 + dm (v+v_3) = (M+m-2dm) v_2$$

$$\begin{align*}
v_3 &= \frac{-dm \cdot v + (M+m-2dm) v_2 }{M+m-2dm}\\
&= -\frac{dm \cdot v}{M+m-2dm} + v_2\\
&= -dm \cdot v \left(\frac{1}{M+m-2dm} + \frac{1}{M+m-dm} + \frac{1}{M+m} \right)
\end{align*}$$



第$N$次拋出物體後本體對地速度為 $v_N$,被拋出物體對地速度為 $v + v_N$,依照以上的規律可以推測

$$(M+m-N \cdot dm) v_N + dm (v+v_N) = [M+m-(N-1) \cdot dm] v_{N-1}$$

$$\begin{align*}
v_N &= \frac{-dm \cdot v + [M+m-(N-1) \cdot dm] v_{N-1} }{M+m-(N-1) \cdot dm}\\
&= -\frac{dm \cdot v}{M+m-(N-1) \cdot dm} + v_{N-1}\\
&= -dm \cdot v \sum_{i=1}^N \frac{1}{M+m-(i-1) \cdot dm}
\end{align*}$$





程式1:指定$N$旳數值,計算每次拋出後本體的速度


import matplotlib.pyplot as plt

M, m, v, N = 2, 1, 3, 10
dm = m/N
vi, idx = [0], [0]

for i in range(1, N+1, 1):
    idx.append(i)
    vi.append((-dm*v + (M+m-(i-1)*dm)*vi[i-1]) / (M+m-(i-1)*dm))
 
plt.figure(figsize=(6, 4.5), dpi=100)
plt.subplots_adjust(left=0.2, right=0.95, top=0.9, bottom=0.15)
plt.xlabel('number', fontsize=16)
plt.ylabel(r'$v_i ~\mathrm{(m/s)}$', fontsize=16)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.grid(color='gray', linestyle='--', linewidth=1)
plt.plot(idx, vi, color='red', linestyle='', marker='o', markersize=5)
plt.savefig('ThrowBack'+str(N)+'.svg')
plt.savefig('ThrowBack'+str(N)+'.png')
plt.close



假設$M=2~\mathrm{kg}$、$m=1~\mathrm{kg}$、$v=3~\mathrm{m/s}$,手動修改拋出次數$N$,計算每次拋出物體後本體的速度並作圖。從以下的關係圖可以看出,當$N \geq 10$時數據點分布的曲線大致上相同,本體的末速約為$1.2 ~\mathrm{m/s}$。

N=3時,每次拋出物體後本體的速度

N=5時,每次拋出物體後本體的速度

N=10時,每次拋出物體後本體的速度

N=20時,每次拋出物體後本體的速度

N=100時,每次拋出物體後本體的速度


程式2:計算本體最終速度$v_t$與拋出次數$N$的關係


import numpy as np
import matplotlib.pyplot as plt

M, m, v = 2, 1, 3

def vN(N):
    dm = m/N
    vi, idx = [0], [0]
    for i in range(1, N+1, 1):
        idx.append(i)
        vi.append((-dm*v + (M+m-(i-1)*dm)*vi[i-1]) / (M+m-(i-1)*dm))
    return N, vi[-1]

num = 100
Ns, vs = np.zeros(num), np.zeros(num)

for j in range(1, num+1, 1):
    Ns[j-1], vs[j-1] = vN(j)

plt.figure(figsize=(6, 4.5), dpi=100)
plt.subplots_adjust(left=0.2, right=0.95, top=0.9, bottom=0.15)
plt.xlim(0, max(Ns)+1)
plt.xlabel('N', fontsize=16)
plt.ylabel(r'$v_t ~\mathrm{(m/s)}$', fontsize=16)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.grid(color='gray', linestyle='--', linewidth=1)
plt.plot(Ns, vs, color='red', linestyle='', marker='o', markersize=5)
plt.savefig('ThrowBackFor.svg')
plt.savefig('ThrowBackFor.png')
plt.close



將程式1稍微修改一下,使用 for 迴圈計算本體最終速度$v_t$與拋出總次數$N$的關係並作圖。從以下的關係圖可以看出,當$N$越大時$v_t$的量值也會變大,這表示將物體分成較多等份,每次拋出一小塊,這樣可以得到較快的最終速度,但即使分成再多等份,最終速度最快也只能達到大約$1.2 ~\mathrm{m/s}$。

本體最終速度與拋出總次數的關係圖

本體最終速度與拋出總次數的關係圖(只畫出N = 1 ~ 10)



結語


這是一個相當經典的高中物理題目,通常會放在高二下學期第6章動量守恆。由於我已經習慣寫 Python 程式,所以我很自然地選擇用程式碼處理這個問題,不想要看到程式碼的同學也可以用試算表軟體做到類似的效果,這是我用 Google 試算表製作的檔案連結


使用 Google 試算表繪製的本體最終速度與拋出總次數的關係圖(只畫出N = 1 ~ 10)





HackMD 版本連結:https://hackmd.io/@yizhewang/ByRIWtheL

沒有留言:

張貼留言