日期:2020/1/15
題目
假設有一個裝置本體的質量 M,裝置上載有一些即將被水平拋出的物體,物體的總質量為 m,且M>m。假設總共拋出 N 次,則每次拋出的物體質量 dm=m/N,被拋出的物體相對於拋出後本體的速度為 v。請問將所有物體拋出後本體的速度vt與拋出次數N的關係為何?
理論計算
第1次拋出物體後本體對地速度為 v1,被拋出的物體對地速度為 v+v1,由動量守恆可知
(M+m−dm)v1+dm(v+v1)=0
v1=−dm⋅vM+m
第2次拋出物體後本體對地速度為 v2,被拋出的物體對地速度為 v+v2,由動量守恆可知
(M+m−2dm)v2+dm(v+v2)=(M+m−dm)v1
v2=−dm⋅v+(M+m−dm)v1M+m−dm=−dm⋅vM+m−dm+v1=−dm⋅v(1M+m−dm+1M+m)
第3次拋出物體後本體對地速度為 v3,被拋出的物體對地速度為 v+v3,由動量守恆可知
(M+m−3dm)v3+dm(v+v3)=(M+m−2dm)v2
v3=−dm⋅v+(M+m−2dm)v2M+m−2dm=−dm⋅vM+m−2dm+v2=−dm⋅v(1M+m−2dm+1M+m−dm+1M+m)
第N次拋出物體後本體對地速度為 vN,被拋出物體對地速度為 v+vN,依照以上的規律可以推測
(M+m−N⋅dm)vN+dm(v+vN)=[M+m−(N−1)⋅dm]vN−1
vN=−dm⋅v+[M+m−(N−1)⋅dm]vN−1M+m−(N−1)⋅dm=−dm⋅vM+m−(N−1)⋅dm+vN−1=−dm⋅vN∑i=11M+m−(i−1)⋅dm
程式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 kg、m=1 kg、v=3 m/s,手動修改拋出次數N,計算每次拋出物體後本體的速度並作圖。從以下的關係圖可以看出,當N≥10時數據點分布的曲線大致上相同,本體的末速約為1.2 m/s。

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

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

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

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

N=100時,每次拋出物體後本體的速度
程式2:計算本體最終速度vt與拋出次數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 迴圈計算本體最終速度vt與拋出總次數N的關係並作圖。從以下的關係圖可以看出,當N越大時vt的量值也會變大,這表示將物體分成較多等份,每次拋出一小塊,這樣可以得到較快的最終速度,但即使分成再多等份,最終速度最快也只能達到大約1.2 m/s。

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

本體最終速度與拋出總次數的關係圖(只畫出N = 1 ~ 10)
結語
這是一個相當經典的高中物理題目,通常會放在高二下學期第6章動量守恆。由於我已經習慣寫 Python 程式,所以我很自然地選擇用程式碼處理這個問題,不想要看到程式碼的同學也可以用試算表軟體做到類似的效果,這是我用 Google 試算表製作的檔案連結。

使用 Google 試算表繪製的本體最終速度與拋出總次數的關係圖(只畫出N = 1 ~ 10)
HackMD 版本連結:https://hackmd.io/@yizhewang/ByRIWtheL
沒有留言:
張貼留言