Try   HackMD

利用反作用力後退

作者:王一哲
日期: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}\)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
N=3時,每次拋出物體後本體的速度

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
N=5時,每次拋出物體後本體的速度

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
N=10時,每次拋出物體後本體的速度

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
N=20時,每次拋出物體後本體的速度

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
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}\)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
本體最終速度與拋出總次數的關係圖

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
本體最終速度與拋出總次數的關係圖(只畫出N = 1 ~ 10)

結語

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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
使用 Google 試算表繪製的本體最終速度與拋出總次數的關係圖(只畫出N = 1 ~ 10)


tags:PhysicsPython