2018年12月10日 星期一

於 Ubuntu 上安裝 Kyocera 多功能事務機驅動程式的方法

環境


  1. Ubuntu 18.04 LTS
  2. Kyocera TASKalfa 4501i
  3. 事務機本身有鎖定帳號,需要登錄帳號才能列印



步驟


  1. 於英文版的官方網站下載驅動程式,網址為https://www.kyoceradocumentsolutions.eu/index/service/dlc.false.driver.TASKALFA4501I._.EN.html#,我選擇的檔案是 Linux PPDs 8.1301 版
  2. Kyocera 官方網站
  3. 將下載的檔案解壓縮,我需要的驅動程式是在壓縮檔中的 /EU/English/Kyocera_TASKalfa_4501i.PPD
  4. 用文字編輯器開啟 .PPD 檔,找到以下的部分
  5. *KmManagment Default/Off: ""
    *KmManagment MG00000000/00000000: "(00000000) statusdict /setmanagementnumber get exec"
    *KmManagment MG00000001/00000001: "(00000001) statusdict /setmanagementnumber get exec"
    ......
    

2018年12月2日 星期日

NumPy 筆記:陣列 ndarray

前言


NumPy 是 Python 的運算套件,提供陣列 (ndarray)、矩陣 (matrix)……等常用的數學工具,運算速度比 Python 內建的資料格式快很多。NumPy 已經將許多常用的運算寫成函式,如果能善用這些函式,可以大幅加快程式的運算速度。以下是一些我目前常用到的陣列相關函式整理,如果之後有用到新的函式會再新增內容。請注意,以下的程式碼都省略了 import numpy as np



產生陣列


手動輸入


一維陣列語法

np.array([元素1, 元素2, 元素3, 元素4, 元素5], dtype = 格式)

二維陣列語法

np.array([(元素11, 元素12, 元素13, 元素14, 元素15), (元素21, 元素22, 元素23, 元素24, 元素25)], dtype = 格式)

數值格式可以是 整數 (int)、浮點數 (float)、複數 (complex),如果不指定的話系統會自動判斷。
範例:

in[1]:  np.array([1, 2, 3, 4, 5])
out[1]: array([1, 2, 3, 4, 5])
in[2]:  np.array([1, 2, 3, 4, 5], dtype = float)
out[2]: array([1., 2., 3., 4., 5.])
in[3]:  np.array([1, 2, 3, 4, 5], dtype = complex)
out[3]: array([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 5.+0.j])
in[4]:  np.array([(1, 2, 3, 4, 5), (6, 7, 8, 9, 10)], dtype = int)
out[4]: array([[ 1,  2,  3,  4,  5],
               [ 6,  7,  8,  9, 10]])

2018年11月29日 星期四

Python 符號運算套件:SymPy

前言


SymPy 是 Python 的符號運算套件,可以幫助我們計算函數的微分、積分,而且套件裡已經內建了常用的常數和函數,例如圓周率$\pi = 3.14159265358979$、尤拉常數$E = 2.71828182845905$、正弦函數$\sin$。如果已經在電腦上安裝好 Python,接下來只要在文字介面中執行下的指令即可安裝 SymPy

pip install sympy

如果是 Windows 的用戶,可以使用 Windows PowerShell(系統管理員) 替這部電腦所有的使用者安裝,如果是 Linux 的用戶,在執行指令時可能需要在最前面加上 sudo 暫時取得管理者權限。如果只想要試用看看,可以到 SymPy 的官方網站按右上角的 Online Shell 使用線上版的 SymPy Live。



SymPy 官方網站




SymPy Live



2018年11月26日 星期一

利用殼層定理推導電量均勻分布的球殼產生的電場

球殼外部


高中物理課本或是講義通常會避開這個問題,直接告訴學生經由微積分的計算後,我們可以將所有的電量集中在球心,用球心到該點的距離計算該點的電場,但是某些學生可能覺得無法接受,這時只好請出微積分這個強大的數學工具。推導過程如下:

下圖中A點是我們要計算電場的位置,B點為球殼上的某個點,O點為球心,R為球殼半徑,r為球心到A點的距離,s為A、B的距離,$\theta$為角AOB,$\phi$為角OAB。其中變數為s、$\theta$、$\phi$,但是由餘定理可得
$$\cos \theta = \frac{r^2 + R^2 - s^2}{2rR}$$
$$\cos \phi = \frac{r^2 + s^2 - R^2}{2rs}$$
所以真正的變數只有s


電量均勻分布的球殼產生的電場(外部)


2018年11月24日 星期六

Matplotlib 繪圖技巧:讀取數據及線性擬合

前言


對於物理實驗而言,我們在處理數據時通常會繪製 xy 散佈圖,將應變變因的數值畫在 y 軸、操縱變因的數值畫在 x 軸,如果數據點分布在一條斜直線上,就可以利用最小平方法找出最接近直線的斜率和截距,再利用物理定律解釋斜率和截距的成因。但如果數據點不是分布在一條斜直線上,就要先想辦法處理數據,圖形化為直線。

以雙狹縫干涉的實驗為例,假設雷射光波長為 $\lambda$ 、狹縫間距為 $d$ 、狹縫與屏幕間的距離為 $L$,則干涉的寬度
$$\Delta y = \frac{\lambda L}{d}$$
如果我們固定 $\lambda$ 和 $d$,改變 $L$ 並測量 $\Delta y$,再畫出 $\Delta y - L$ 關係圖,這些數據點應該會分布在一條斜直線上,而且斜率 = $\frac{\lambda}{d}$、截距 = 0。

如果我們固定 $\lambda$ 和 $L$,改變 $d$ 並測量 $\Delta y$,再畫出 $\Delta y - d$ 關係圖,這些數據點會分布在一條曲線上。如果我們猜測 $\Delta y$ 和 $d$ 成反比,應該要計算 $1/d$,再畫出 $\Delta y - 1 / d$ 關係圖,如果數據點分布在一條斜直線上,才能證明 $\Delta y$ 和 $d$ 成反比。由理論式可知,直線的斜率 = $\lambda L$、截距 = 0。


左:雙狹縫干涉 Δy - d 關係圖;右:雙狹縫干涉 Δy - 1/d 關係圖



2018年11月21日 星期三

GeoGebra 繪圖技巧:反比函數

我們在〈Matplotlib 繪圖技巧:在同一張圖上繪製兩個函數、兩張圖並列〉中使用 Matplotlib 繪製反比及平方反比的函數圖形,但如果想要在函數的曲線上,沿著 x 軸方向每隔一段固定的距離畫一個點,再標示出對應的 y 軸數值,使用 Matplotlib 會有一點複雜。如果改用 GeoGebra 會比較簡單一點,成果如下圖,這個檔案的 GeoGebra 網頁版連結為 https://ggbm.at/p4hzbuza


反比函數圖形


2018年11月20日 星期二

Matplotlib 繪圖技巧:在同一張圖上繪製兩個函數、兩張圖並列

我們在〈冰與水蒸氣混合達熱平衡時溫度與質量比值關係圖〉中使用 Matplotlib 繪製單一的函數圖形,但如果我們想在同一張圖上繪製兩個函數,或是將兩張圖並列畫在同一張圖片中時要怎麼做呢?

我們以兩個點電荷之間的靜電力和電位能與距離的關係為例,假設點電荷的電量分別為 Q 和 q,兩者之間的距離為 r,則兩者之間的靜電力量值
$$F = \frac{kQq}{r^2}$$
電位能量值
$$U = \frac{kQq}{r}$$
由於使用 Matplotlib 繪圖時必須代入數值,我將數值設定為 $Q = 1 \times 10^{-4} ~\mathrm{C}$、$q = 1 \times 10^{-4} ~\mathrm{C}$、$0.01 \leq r \leq 10~\mathrm{m}$,r 不從 0 開始畫是為了避免靜電力和電位能量值變為無窮大。接著我們來繪製函數圖形。


在同一張圖上繪製兩個函數


我們希望圖片能有以下的特點:

  1. 用不同的顏色繪製不同的函數
  2. 加上圖例、格線、坐標軸標籤
  3. 設定縱軸繪圖範圍

成果如下圖所示,使用的程式碼如下。


在同一張圖上繪製靜電力、電位能與距離的關係圖



2018年11月18日 星期日

冰與水蒸氣混合達熱平衡時溫度與質量比值關係圖

題目


假設 0°C 的冰塊質量為 M1,100°C 的水蒸氣質量為 M2,將兩者放入絕熱容器內達到熱平衡時的溫度為 T,請畫出 T 與質量比值 M1 / M2 的關係圖。(水的熔化熱為 80 cal/g,水的汽化熱為 540 cal/g)

解答


假設平衡時的溫度為 T,由於系統與外界沒有熱交換,冰塊吸收的熱等於水蒸氣釋放的熱,因此
$$M_1 \times 80 + M_1 \times 1 \times (T-0) = M_2 \times 540 + M_2 \times 1 \times (100 - T)$$
$$\frac{M_1}{M_2} \times 80 + \frac{M_1}{M_2} \times T = 640 - T$$
若$\frac{M_1}{M2} \equiv x$,則上式可改為
$$80x+xT = 640−T$$
$$T=\frac{640−80x}{x+1}$$
若 $x < 3$ 代入上式則 $T > 100$,代表水蒸氣沒有用完,此時水與水蒸氣共存 $T = 100$;若 $x > 8$ 代入上式則 $T < 0$,代表冰塊沒有用完,此時水與冰塊共存 $T = 0$。因此 $$T(x) = \begin{cases} 100 & \text{ if } x < 3 \\ 0 & \text{ if } x > 8 \\
\frac{640 - 80x}{x + 1} & \text{ if } 3 \leq x \leq 8
\end{cases}$$
很明顯地,這個函數圖形並不好畫,我們需要使用一些輔助工具會比較方便。

2018年11月12日 星期一

Stellarium 教學手冊

Stellarium 教學手冊

作者:王一哲     日期:2017/9/17

Stellarium 的安裝及操作

安裝軟體

前往 Stellarium 首頁 http://www.stellarium.org/zh/ ,選擇適合自己所用的作業系統版本,下載並安裝 Stellarium 主程式。

Stellarium 首頁


認識 Stellarium 選單及工具列

安裝完畢之後進入 Stellarium,所見的到畫面如下。

Stellarium 程式畫面截圖


2018年11月11日 星期日

星空與時區問題

星空與時區問題

作者:王一哲     日期:2018/11/11

最近學校剛考完第2次學測模擬考,其中有一題天文的題目幾乎沒有學生答對,題目的大意是:
某個學生在臺灣(北緯23度)晚上8點時看到位於天頂的星座,如果他兩個月後在日本(北緯43度)晚上11點觀星,是否能在天空中找到同一個星座?
這個題目會用到周年運動周日運動以及時區是否會影響所見星空等觀念,答對率一定不高,這是意料中的事。為了能更具體地解釋這個題目,我利用 Stellarium 按照題目的條件設定,將模擬的星空畫面截圖。


  1. 假設某人於2018年6月27日20:00於鹿林天文台觀星,所見星空如下圖所示,圖中的下方是南方,天頂附近是牧夫座的下半部。

2018年6月27日20:00於鹿林天文台所見星空(天頂)

2018年8月28日 星期二

GeoGebra初學指引

GeoGebra初學指引

日期:2018/8/7

什麼是GeoGebra

GeoGebra 的名稱是由兩個單字組成的

Geometry (幾何)+ Algebra (代數)

這是一套基於 GPL 發行的數學動態繪圖軟體,主要是以 JAVA 和 HTML5 寫成的,我覺得目前的功能已經足以應付高中課堂的需求。下圖是我用 GeoGebra 繪製的圓形波傳播方式示意圖,如果要在黑板上畫出25個點波源以及圓形波前,可能畫完就下課了,但是用 GeoGebra 可以很快就畫好,還可以當場調整點波源的數量。


圓形波傳播方式示意圖



下載及安裝

以下是 GeoGebra 的首頁(https://www.geogebra.org/)

GeoGebra 首頁


其中新數學應用經典應用是線上版軟體,可以直接在瀏覽器上面執行。但是我們想在電腦上安裝 GeoGebra ,請按右下角的離線應用當中的應用下載。在下載頁面當中有6種不同的軟體,我選擇的是最傳統的GeoGebra Classic 5

GeoGebra 下載頁面


下載完安裝檔之後,就是 Windows 傳統的安裝方式,全部採用預設值,一直按下一步就對了。如果不想安裝軟體,也可以下載免安裝版本,下載後只要解壓縮就可以使用,下載連結在此



選擇 GeoGebra Classic 5 或 6?

以下分別是 GeoGebra Classic 5 和 6 開啟新檔案後的畫面,比較明顯的差異在於 5 的下方是輸入指令的欄位,6 的下方則是提示輸入格式的虛擬鍵盤,輸入指令的欄位被移到左側。在運行速度方面,我試著用 5 和 6 開啟同一個檔案,在執行動畫功能時,5 的運作比較流暢,6 則有點卡,因此建議以 5 為主。

GeoGebra Classic 5 開啟新檔案後的畫面


GeoGebra Classic 6 開啟新檔案後的畫面


2018年7月23日 星期一

VPython進階教學:按鈕

作者:王一哲
日期:2018/7/23




由於我們之前做的動畫,都是在按在 F5 後自動開始執行,如果我們想要在動畫中新增按鈕,讓使用者可以自己控制動畫,應該要怎麼做呢?我們希望按鈕的功能有:

  1. Run:按下時開始執行動畫
  2. Reset:按下時還原成起始狀態
  3. Stop:按下時停止執行程式

我們使用最簡單的動畫〈等速度直線運動〉的程式碼來改寫,成果如下:

有按鈕的等速度直線運動畫面截圖

按下 Run 按鈕後

用滑桿改變速度,使木塊向左移動

按下 Reset 按鈕後

2018年7月15日 星期日

讀書心得: 誰說不能從武俠學物理?

讀書心得: 誰說不能從武俠學物理?

日期:2018/7/15

李開周(2018)。 誰說不能從武俠學物理? 。臺北市:時報文化。

本書的作者嘗試用物理原理分析武俠小說的內容,這完全對應到我的特質,我在大學主修物理,練過幾年國術,也讀過金庸、古龍兩位大師絕大多數的作品。但是當我在讀武俠小說時總是不斷地提醒自己,千萬不要試著用物理原理分析小說的內容,因為裡面有很多與物理原理不合之處,這麼認真分析會破壞閱讀體驗。金庸大師在《天龍八部》第三版的〈後記〉中也提到
《天龍》中的人物個性與武功本領,有很多誇張或事實上不可能的地方,如「六脈神劍」、「火焰刀」、「北冥神功」、無崖子傳功、童姥返老還童等等。讀讀者們想像一下現代派繪畫中超現實主義、像徵主義的畫風,例如一幅畫中一個女人有朝左朝右兩個頭之類,在藝術上,脫離現實的表現方式是容許的。

而本書的作者偏要認真地用物理原理分析武俠小說,替小說中種種不可思議的武功和橋段自圓其說,實在是令人佩服。


本書分為7章:
  1. 武俠世界的速度
  2. 武俠世界的力度
  3. 武俠世界的功和能
  4. 武俠世界的聲和光
  5. 電場、磁場、氣場
  6. 凌波微步與量子物理
  7. 小龍女的不老密訣

2018年7月14日 星期六

VPython進階教學:蛇擺 Pendulum Wave

作者:王一哲
日期:2018/7/14




最近看到建國中學曾靖夫老師的 VPython 講義〈Lecture 7 多物件控制(list) - 波動現象模擬〉,其中一項作業就是要學生做出蛇擺的動畫。蛇擺的英文為 pendulum wave,如果照字面翻譯應該譯為擺波,由一組數個的單擺構成的波,假設整組蛇擺的週期為 $T$,其中週期最長的單擺在這段時間內共擺動 $N$ 次,則週期次長的單擺擺動 $N-1$ 次,依此類推。我們之前已經做過〈單擺〉的動畫,可以以此為基礎改造一下程式碼,應該很容易就能做出蛇擺的動畫。關於蛇擺的物理原理介紹請參考中央大學科學教育中心的網頁:〈蛇擺〉、〈大型蛇擺〉。

這是我用 VPython 在 Glowscript 網站製作的動畫,連結為 https://www.glowscript.org/#/user/yizhe/folder/Public/program/PendulumWave


這個程式是進階教材,我們要善用類別 (class)的特性,使程式在使用上更加方便。程式的目標:

  1. 輸入蛇擺的週期、週期最長的單擺在蛇擺的一個週期內擺動的次數、單擺個數,自動計算所有單擺的週期及擺長。
  2. 建立一個類別 (class),輸入單擺的週期、懸掛位置,自動產生擺錘、繩子,掛於指定的位置,將擺錘放置於最大擺角。計算單擺對應的轉動慣量,設定起始的角速度、角加速度為0。
  3. 在類別中建立一個方法 (mehtod),輸入經過的時間,計算擺錘所受力矩、角加速度、角速度,更新擺錘的位置及繩子的方向。



2018年6月18日 星期一

Android 手機上的 Python IDE: Pydroid 3

Android 手機上的 Python IDE: Pydroid 3

日期:2018/6/18


今天在 Google Play 上找到一個好玩的東西,名為 Pydroid 3 的 Python IDE,看起來評價不錯,就下載來試試看,以下是下載連結:https://play.google.com/store/apps/details?id=ru.iiec.pydroid3&hl=zh_TW




2018年6月13日 星期三

使用 matplotlib 繪製函數及數據圖

使用 matplotlib 繪製函數及數據圖


日期:2018/6/13

繪製函數圖


我之前曾經用 Gnuplot 畫函數圖形,但自從學了 Python 以及 matplotlib 之後,就想要用 Python 來畫圖,下圖是 -4π ≤ x ≤ +4π 範圍內對應的 sin(x) 圖形,下方則是程式碼。



"""
 Python筆記: 2D曲線圖
 日期: 2018/6/13
 作者: 王一哲
"""
import numpy as np                                        # 引入科學計算函式庫
import matplotlib.pyplot as plt                           # 引入繪圖函式庫

xmin, xmax, num = -4*np.pi, 4*np.pi, 1000                 # 設定繪圖範圍、取點數
x = np.linspace(xmin, xmax, num)                          # 產生x
y = np.sin(x)                                             # 產生y

plt.figure(figsize = (8, 6), dpi = 100)                   # 設定圖片尺寸
plt.xlabel('x(rad)', fontsize = 16)                       # 設定坐標軸標籤
plt.ylabel('sin(x)', fontsize = 16)
plt.xticks(fontsize = 12)                                 # 設定坐標軸數字格式
plt.yticks(fontsize = 12)
plt.grid(color = 'red', linestyle = '--', linewidth = 1)  # 設定格線顏色、種類、寬度
plt.plot(x, y, color = 'blue', linewidth = 3)             # 繪圖並設定線條顏色、寬度
plt.savefig('plot_2D.svg')                                # 儲存圖片
plt.savefig('plot_2D.png')
plt.show()                                                # 顯示圖片


2018年6月5日 星期二

使用 with 開啟檔案並寫入內容

使用 with 開啟檔案並寫入內容
日期:2018/6/6



我在之前的 VPython 文章〈使用for迴圈計算水平抛射資料〉以及水平抛射〉當中,將程式產生的資料轉成字串存到文字檔中,但是當時使用的寫法很有可能會因為最後沒有關閉檔案而發生問題,之前的寫法如下:

file = open("data.txt", "w", encoding = "UTF-8")
file.write("h(m), t(s), R(m)\n")

for h in range(5, 51, 1):
......
    file.write(str(h) + "," + str(t) + "," + str(ball.pos.x + L/2) + "\n")

file.close() 



在 Python 裡有一個小技巧,使用 with 開啟檔案,就可以避免忘記關閉檔案造成的問題,寫法如下:

with open("data.txt", "w", encoding = "UTF-8") as file:
    file.write("h(m), t(s), R(m)\n")

for h in range(5, 51, 1):
......
    with open("data.txt", "a", encoding = "UTF-8") as file:
        file.write(str(h) + "," + str(t) + "," + str(ball.pos.x + L/2) + "\n")



順帶一提,昨天花了一點時間測式高亮度語法的外掛程式,我採用的外掛是 Prism ( https://prismjs.com/index.html ),詳細的作法是參考這篇文章完成的:〈[技術分享] 寫給會在部落格中撰寫程式碼的你 ─ 在網頁中嵌入高亮程式碼上色 (syntax highlighting)〉。我昨天在 Ubuntu 上用 Google Chrome 編輯版面設置,但是沒辦法顯示高亮度語法;今天改用 Windows 再按照相同的步驟編輯就成功了,原因不明。

2018年5月14日 星期一

電流的磁效應

作者:王一哲
日期:2018/5/14




選修物理下第8章電流的磁效應會介紹必歐 - 沙伐定律 (Biot–Savart law),用來計算一小段載流導線於空間中某處產生的磁場,方程式為

$$ d \vec B = \frac{\mu_0}{4\pi} \frac{I d \vec L \times \hat r}{r^2} ~\Rightarrow~ dB = \frac{\mu_0}{4\pi} \frac{I dL \sin \theta}{r^2} $$

利用必歐 - 沙伐定律可以算出長直載流導線垂直距離 r 處的磁場量值為

$$ B = \frac{\mu_0 I}{2 \pi r} $$

半徑為 r 的載流線圈圓心處的磁場量值為

$$ B = \frac{\mu_0 I}{2 r} $$

單位長度中有 n 匝線圈的的載流螺線管中心處的磁場量值為

$$ B = \mu_0 nI $$

磁場應該是分布在空間中的,但是書上的圖卻都是平面的,因此我想要藉由 VPython 將空間中的磁場強度、方向畫出來,成果如下圖。


載流螺線管產生的磁場示意圖



2018年5月13日 星期日

拉塞福散射

作者:王一哲
日期:2018/5/13




拉塞福散射 (Rutherford scattering) 實驗是找到原子核存在的重要證據。將 α 粒子(氦原子核)射向金箔,α 粒子與金原子核之間的靜電力為排斥力,若忽略重力的作用,由於金原子核固定不動,α 粒子所受靜電力通過金原子核,相對於金原子核的角動量守恆。α 粒子與金原子核之間只有靜電力作功,系統力學能守恆。

下圖為拉塞福散射實驗示意圖,當 α 粒子於無窮遠處時速度向右,金原子核與速度方向之間的垂直距離稱為碰撞參數,通常代號為 b。這次的程式目標是改變 b,畫出 α 粒子動能、系統電位能、力學能與時間的關係圖,找出 α 粒子向上偏移的量值。


拉塞福散射實驗示意圖


質譜儀

作者:王一哲
日期:2018/5/13




有5種粒子以相同之速度垂直進入均勻磁場B,其軌跡如下圖所示。設此5種粒子為:碳原子(12C)、氧離子(16O2-)、鈉離子(23Na+)、鎂離子(24Mg2+)及氯離子(35Cl-)。若不考慮重力因素,則圖中1、2、3、4及5之示意軌跡分別代表何者?


粒子在質譜儀中運動軌跡示意圖



這是84年日大聯招的題目,雖然年代已經很久遠,但在坊間各家的參考書中仍然可以找到這個題目。當粒子向上進入磁場時,帶正電粒子所受的磁力向左,帶負電粒子所受的磁力向右,電中性的粒子沒有受到磁力。若以磁力當作向心力,在磁場中做等速率圓周運動,則

$$ qvB = m \cdot \frac{v^2}{R} ~\Rightarrow~ R = \frac{mv}{qB} \propto \frac{m}{q} $$

因此本題的答案為23Na+24Mg2+、12C16O2-35Cl-。這次我們要試著用 VPython 將粒子在質譜儀中的運動過程畫出來。



2018年5月12日 星期六

帶電粒子在磁場中的運動

作者:王一哲
日期:2018/5/12





帶電粒子在均勻磁場中所受磁力為

$$ \vec F_B = q(\vec v \times \vec B) ~\Rightarrow~ F_B = qvB \sin \theta $$

其中 $q$ 為粒子電量、$v_0$ 為粒子速度、$B$ 為外加磁場。可能的運動方式有3種:

  1. $\theta = 0^{\circ}$ 或 $180^{\circ}$ : $F_B = 0$,等速度直線運動
  2. $\theta = 90^{\circ}$ :$F_B = qvB$,等速率圓周運動
  3. 其它角度:螺線運動,一邊繞圓圈一邊前進

這次的目標就是畫出這3種運動狀態,而且動畫視窗的視角會自動隨著速度與磁場的夾角轉至方便觀察的方向。
螺線運動示意圖

黎曼和題目

黎曼和題目
日期:2018/5/12
這是昨天學生問我的題目,雖然我不太清楚他們為什麼會問物理老師數學問題,也許是當時找不到數學老師。因為我很久沒有複習高中數學,其實當時並沒有想出來,後來才發現那其實是黎曼和的題目,於是我用 GeoGebra 做了以下的檔案(連結在此


  對於這樣的題目也可以寫程式去跑,雖然這樣有點暴力,但當作是驗算也不錯。我將 n 設定為 100000000,用 python 算出來的結果是 16.25000009500000,用 c 算出來的結果是 16.25000009500101,都很接近理論值 16.25,至於兩種程式語言算出來的結果為什會不一樣,這部分我就沒有深入研究。雖然數值很接近,但運算速度上差異很大,python 需要跑大約 4 分鐘,c 只需要 2.078 秒,這樣就不難理解為什麼有些人不喜歡用 python 跑大量的數運算。
python 程式碼

n = 1000000
total = 0
for i in range(1, n+1):
    total += (2*n + i)**3
print("{0:.14f}".format(total/n**4))

c 程式碼

#include <stdlib.h>
#include <stdio.h>
int main(void) {
    int i;
    double n = 100000000.0;
    double total = 0.0;
    double result = 0.0;
    for(i = 1; i <= n; i++) {
            total += (2*n + (double)i)*(2*n + (double)i)*(2*n + (double)i);
    }
    result = total / (n*n*n*n);
    printf("result = %.14f", result);
    return 0;
}

電子荷質比

作者:王一哲
日期:2018/5/12




測量電子荷質比的實驗裝置圖如下,外觀與速度選擇器十分相似,因此我們將〈速度選擇器〉的程式稍微修改一下,就能夠做出電子荷質比實驗的動畫。 (GlowScript 網站動畫連結


實驗裝置示意圖



理論分析


請參考上圖,粒子質量為 $m$、電量為 $-q$,以向右的水平速度 $v_0$ 進入向下的均勻電場 $E$,平行帶電板的長度為 $L$,平行帶電板右側與屏幕間的距離為 $D$。若只考慮靜電力的作用,粒子在電場的加速度向上為

$$ a = \frac{qE}{m} $$

水平方向沒有外力,等速度前進,因此在電場中運動的時間為

$$ t_1 = \frac{L}{v_0} $$

向上的位移為

$$ y_1 = \frac{1}{2}at^2 = \frac{1}{2} \cdot \frac{qE}{m} \cdot \left( \frac{L}{v_0} \right)^2 = \frac{qEL^2}{2mv_0^2} $$

粒子在離開電場時向上的速度為

$$ v_y = at_1 = \frac{qE}{m} \cdot \frac{L}{v_0} = \frac{qEL}{mv_0} $$

粒子在電場外不受外力,為等速度直線運動,在電場外運動的時間為

$$ t_2 = \frac{D}{v_0} $$

向上的位移

$$ y_2 = v_y t_2 = \frac{qEL}{mv_0} \cdot \frac{D}{v_0} = \frac{qELD}{mv_0^2} $$

向上的位移總和為

$$ y = y_1 + y_2 = \frac{qEL^2}{2mv_0^2} + \frac{qELD}{mv_0^2} = \frac{qEL}{2mv_0^2}(L+2D) $$

帶電粒子的荷質比為

$$ \frac{q}{m} = \frac{2yv_0^2}{EL(L+2D)} $$

電場量值可由平行帶電板的電壓與距離求得,粒子初速度 \$v_0 \$ 可以由速度選擇器控制,因此實驗中除了荷質比之外的數據都是可以測量的。



2018年5月11日 星期五

速度選擇器

作者:王一哲
日期:2018/5/10




速度選擇器是用來篩選具有特定速度帶電粒子的裝置,基本的構造如下圖。用兩塊平行帶電板製造向下的電場,再加上垂直射入紙面的磁場,若帶正電的粒子由左側以水平速度 v 進入速度選擇器,粒子會受到向下的靜電力以及向上的磁力,當合力為零時粒子等速度前進,此時

$$ qE = qvB ~\Rightarrow~ v = \frac{E}{B} = \frac{V}{Bd} $$

如果在右側加上只有一個小孔的擋板,只有向右直線前進的粒子可以通過,就可以藉由改變電場、磁場的量值控制通過裝置的粒子速度量值。以下共有兩個程式:

  1. 程式20-1:畫電場、磁場、平行帶電板、粒子運動軌跡出來,粒子撞到平行帶電板後停止運動。
  2. 程式20-2:以20-1為基礎,於出口處加上擋板。





速度選擇器構造示意圖



2018年5月10日 星期四

靜電力及簡諧

作者:王一哲
日期:2018/5/9




我們之前在〈重力及簡諧〉當中處理過重力造成的簡諧運動,當我們學到靜電力時會發現庫侖定律和萬有引力定律的型式很像,因此靜電力應該也能產生相同的運動模式。以下有 3 個不同的程式:





程式 19-1


理論推導


如下圖所示,有兩個電量為 $+Q$ 的點電荷,兩者位置固定、距離為 $2d$,在連心線上中央偏左側距離 $x$ 處,有一個電量為 $+q$、質量為 $m$ 的點電荷。





若 $+q$ 點電荷在此處的速度為0, $x \ll d$,只考慮物體間靜電力的作用,則 $+q$ 所受合力方向向右,量值為

$$ \begin{align*}
F &= \frac{kQq}{(d-x)^2} - \frac{kQq}{(d+x)^2} \\
&= kQq \left[ \frac{(d+x)^2 - (d-x)^2}{(d-x)^2 (d+x)^2} \right ]\\
&= kQq \left[ \frac{4dx}{d^4 \left(1 - \frac{x}{d} \right)^2 \left(1 + \frac{x}{d} \right)^2} \right ]\\
&\approx \frac{4kQq}{d^3} \cdot x = Kx
\end{align*} $$

因此 $+q$ 做簡諧運動,週期

$$ T = 2 \pi \sqrt{\frac{m}{k}} = 2 \pi \sqrt{\frac{md^3}{4kQq}} = \pi \sqrt{\frac{md^3}{kQq}} $$


下圖是以 $Q = q = 2 \times 10^4 ~\mathrm{C}$ 繪製的靜電力F-距離x關係圖,由圖中可以看出當x很小時, $F \propto x$,且斜率約等於 1.5,與理論值相符。


靜電力F-距離x關係圖 (0 ≤ x ≤ 9)




靜電力F-距離x關係圖 (0 ≤ x ≤ 4)


2018年5月7日 星期一

重力場及電場

作者:王一哲
日期:2018/5/7




若在空間中有一個質量為 $M$ 且質量均勻分布的球體,若以 $M$ 的球心為原點,在空間中位置向量為 $M$ 處的重力場為

$$ \vec g = - \frac{GM}{r^2} \hat r $$

上式中的負號帶表重力場方向指向球心。若有多個球體,第 $i$ 個球體質量為 $M_i$、球心位置為 $r_i$,則重力場為

$$ \vec g = \sum \vec g_i = - G \sum \frac{M_i}{(\vec r - \vec r_i)^2} \frac{\vec r - \vec r_i}{|\vec r - \vec r_i|} $$

如果要在黑板上畫出各個位置的重力場強度及方向,這幾乎是不可能的任務,下圖是我畫出來的地球重力場示意圖


地球重力場示意圖



在以下的課程中,我們想要在空間每隔一段距離取一個點,以箭頭的長度及方向來表示該點的重力場。因此我們在程式 18-1 中先練習使用 for 迴圈,在空間中每隔一段距離畫一個箭頭。在程式 18-2 中除了畫出箭頭還要計算此處的重力場,再更新箭頭的長度及方向。如果能夠成功畫出一個球體的重力場,在程式 18-3 中則更進一步地畫出兩個球體,甚至是多個球體建立的重力場。




在畫完重力場之後,我們可以用相同的方法畫出帶電球體在空間中建立的電場,其數學型式為

$$ \vec E = \sum \vec E_i = k \sum \frac{Q_i}{(\vec r - \vec r_i)^2} \frac{\vec r - \vec r_i}{|\vec r - \vec r_i|} $$

我們只要稍微修改程式 18-3 就能畫出兩個帶電球體在空間中建立的電場。

2018年5月6日 星期日

三維彈性碰撞

作者:王一哲
日期:2018/5/6




這個程式主要是參考臺大物理系石明豐教授的講義〈VPhysics大一課程:碰撞〉,但是將其中的程式碼改寫成 python 3.X 版的格式。在寫好這個程式之後,可以將它用來模擬理想氣體分子之間的碰撞,作出分子數量 - 速率分布圖,但由於這個程式較為複雜,請參考 VPython 範例程式 "A hard-sphere gas"。

以下共有兩個程式

  1. 17-1 兩球質量相等 (GlowScript 網站動畫連結
  2. 17-2 可以分別設定兩球質量 (GlowScript 網站動畫連結




17-1 模擬程式畫面截圖




17-2 模擬程式畫面截圖


2018年5月5日 星期六

自由落下兩球碰撞

作者:王一哲
日期:2018/5/5




若將兩個彈性極佳的球上下疊放,且下方的球質量較大,將兩球從某個高度釋放,兩球受到重力的作用由靜止開始向下加速,當下方的球撞到地面反彈後會發生什麼事?在 YouTube 上有相當多實驗影片,例如 "Stacked Ball Drop" 。我們可以利用之前寫好的〈自由落下〉及〈一維彈性碰撞〉模擬程式來處理這個問題。

以下共有兩個程式,16-1 有兩個球,16-2 改為三個球。其實可以讓畫只執行到最上方的球飛出去之後就停止,因為在真實的情境下很難讓最上方的球被撞擊後往正上方飛出,掉落下後發生第二次碰撞的機率極低。


程式16-1畫面截圖




程式16-2畫面截圖


2018年4月29日 星期日

一維彈性碰撞

作者:王一哲
日期:2018/4/29




一維彈性碰撞是基礎物理2B下最後一章的內容。假設在水平光滑桌面上有兩個小球,質量分別為 $m_1$ 及 $m_2$,速度分別為 $v_1$ 及 $v_2$,由於兩個小球的碰撞過程不受外力,系統動量守恆;若碰撞過程沒有能量損失,則碰撞前、後兩小球的總動能相等;由以上兩個條件可以導出小球碰撞前後的速度關係式為

$$ v_1' = \frac{m_1 - m_2}{m_1 + m_2} v_1 + \frac{2m_2}{m_1 + m_2} v_2 $$

$$ v_2' = \frac{2m_1}{m_1 + m_2} v_1 + \frac{m_2 - m_1}{m_1 + m_2} v_2 $$


一維彈性碰撞的過程



以下共有兩個程式,第一個是直接代撞後速度公式,第二個則是在木塊間加上理想彈簧作為緩衝,畫出完整的碰撞過程。


程式15-1畫面截圖




程式15-2畫面截圖


2018年4月26日 星期四

雙重簡諧運動

作者:王一哲
日期:2018/4/26




假設在光滑水平桌面上有兩個小球,質量分別為 m1 及 m2,用一條彈力常數為 k 的理想彈簧連結。若施力敲擊其中一個小球,使小球獲得動量,則整個系統會以類似毛毛蟲爬行的方式前進。我以前看到的動畫是用 Mathematica 製作的,這次我們改用 VPython 達成同樣的效果。


模擬程式畫面截圖


2018年4月22日 星期日

相疊木塊

作者:王一哲
日期:2018/4/22




這是會出現在基礎物理2B下的例題,出現的章節甚至橫跨動量守恆、功與能量、碰撞等三章,題目敘述如下:

木塊A質量為 $2m$、木塊B質量為 $m$,兩個木塊相疊,桌面與木塊A之間沒有摩擦力,A的初速度為 $v$。兩個木塊之間的動摩擦係數為 $\mu_k$,若A的長度夠長,A、B最後能以相同的速度前進,請問:(1) A、B的末速為何? (2) 經過多久之後兩者速度相同。


兩木塊相疊示意圖



題目有兩種版本,第一種是像上圖的版本,木塊B的初位置在木塊A的最右側且原為靜止,木塊A的初速度向右;第二種則是木塊B的初位置在木塊A的最左側且初速度向右,木塊A原為靜止。這次的目標是將運動過程中木塊A、B的速度 - 時間關係圖、能量 - 時間關係圖畫出來。


模擬程式畫面截圖



2018年4月18日 星期三

行星運動

作者:王一哲
日期:2018/4/18




克卜勒行星運動定侓(Kepler’s laws of planetary motion)共有以下3條:

  1. 第一定律(軌道定律):所有行星繞太陽公轉的穩定軌道為橢圓形,太陽在其中一個焦點上。
  2. 第二定律(等面積速率定律):行星與太陽連線於單位時間內掃過的面積相等。
  3. 第三定律(週期定律):所有繞太陽公轉的行星,公轉週期平方分之平均軌道半徑的三次方等於定律。

我們知道第一定律是因為太陽與恆星之間只有重力作用,依照萬有引力定律可以證明只有橢圓是穩定軌道。第二定律則是因為重力通過太陽,所以行星相對於太陽的角動量守恆,因此行星與太陽連線於單位時間內掃過的面積相等。第三定律則可以用有引力定律當作向心力推導出來。如果配合太陽系星球的真實數據,應該可以將這三個定律畫出來。




用 ejs 自製的行星運動定律動畫


2018年4月15日 星期日

重力及簡諧

作者:王一哲
日期:2018/4/15




這是在高二下的課程當中一定會出現卻又很抽象的題目:



在外太空有兩個質量為 $M$ 的星球,星球質量均勻分布且位置固定,兩星球的球星距離為 $2d$,在中垂線上距離 $x$ 處有一個質量為 $m$ 的質點。若質點原為靜止,若只考慮重力的作用,當 $x \ll d$ 時,求 $m$ 運動的週期為何?








解析:

先對 $m$ 畫力圖,則 $m$ 所受合力

$$ F_x = -\frac{2GMmx}{(d^2 + x^2)^{\frac{3}{2}}} \approx -\frac{2GMm}{d^3} x = -kx $$

$$ T = 2\pi \sqrt{\frac{m}{k}} = 2\pi \sqrt{\frac{d^3}{2GM}}$$


m 的力圖




m 所受合力與距離 x 的關係圖 (0 ≤ x ≤ 100)



2018年4月5日 星期四

木塊彈簧系統分離

作者:王一哲
日期:2018/4/5




我們在上課時,經常用水平光滑桌面上的木塊彈簧系統分離過程說明動量守恆定律,但是幾乎所有的課本、講義都只看開始、結束時兩個木塊的速度與質量的關係,很少有書把分離過程中各個物理量與時間的關係圖畫出來,即使有畫圖大概也是憑感覺畫,所以我們希望藉由 VPython 把運動過程畫出來。我們希望藉由動畫看出以下3點:

  1. 分離過程中系統力學能守恆。
  2. 分離過程中系統動量守恆,也就是木塊的速度量值與質量成反比。
  3. 分離過程中木塊的加速度量值與質量成反比。


木塊彈簧系統分離畫面截圖


單擺

作者:王一哲
日期:2018/4/5




將小球用一條理想的繩子懸掛在天花板底下,若繩子與鉛垂線的夾角(擺角)為 $\theta_0$,小球由靜止釋放。當擺角為 $\theta$ 時,小球受到重力及繩子張力的作用,相對於懸掛點產生的力矩為

$$ \vec \tau = \vec r \times \vec F ~\Rightarrow~ \tau = -rF \sin \theta $$

$$ \tau = I \alpha ~\Rightarrow~ -rF \sin \theta = mr^2 \frac{d^2 \theta}{dt^2} $$

由於上式中 $\tau$ 與 $\theta$ 的方向相反,需要加上負號。若 $r = L$,$F = mg$,當 $\theta < 5^{\circ}$ 時, $\sin \theta \approx \theta$,可以解出 $$ \theta (t) = \theta_0 \cos \left(\sqrt{\frac{g}{L}} t \right) $$ 週期為 $$ T = 2 \pi \sqrt{\frac{L}{g}} $$


以下共有2個程式:

  1. 理想的單擺,改變起始的擺角計算運動過程及週期。 (GlowScript 網站動畫連結
  2. 考慮空氣阻力的單擺。 (GlowScript 網站動畫連結


單擺畫面截圖



簡諧運動

作者:王一哲
日期:2018/4/5




在水平光滑桌面上有一個木塊質量為 m,用一條彈性係數為 k 的彈簧連接到左側的牆壁上,若將木塊向右拉一段距離 R 再由靜止釋放,木塊所受合力與加速度的關係為

$$ F = -kx = ma ~\Rightarrow -kx = m \frac{d^2 x}{dt^2} $$

此時木塊的運動方式稱為簡諧運動(simple harmonic motion, S.H.M.),由上式可以解出

$$ x(t) = R \cos (\omega t + \phi) $$

$$ v(t) = -\omega R \sin (\omega t + \phi) $$

$$ a(t) = -\omega^2 R \cos (\omega t + \phi) $$

上式中 $\omega$ 為角頻率

$$ \omega = \sqrt{\frac{k}{m}} $$

週期為

$$ T = 2\pi \sqrt{\frac{m}{k}} $$

理論上我們只要在 VPython 中設定好木塊所受的彈簧回復力與木塊離開平衡點位置的關係,應該就能畫出簡諧運動的過程與週期。以下共有2個程式:

  1. 理想的簡諧運動。 (GlowScript 網站動畫連結
  2. 考慮阻尼(damping)的簡諧運動。 (GlowScript 網站動畫連結


2018年4月4日 星期三

圓周運動

作者:王一哲
日期:2018/4/4




如果一個小球的質量為 m,速度為 v,轉彎時的曲率半徑為 R,則轉彎需要的向心加速度與向心力分別為

$$ F_c = ma_c = m \cdot \frac{v^2}{R} $$

也就是說,如果想要用 VPython 畫出小球在水平面上做等速率圓周運動,我們需要想辦法計算向心加速度的大小與方向。如果成功地畫出水平面上的等速率圓周運動,也許就可以進一步挑戰鉛直面圓周運動。以下共有3個程式:

  1. 只畫出小球的等速率圓周運動。 (GlowScript 網站動畫連結
  2. 畫出小球、繩子、轉軸的等速率圓周運動。 (GlowScript 網站動畫連結
  3. 鉛直面圓周運動,畫出速率、切線加速度、法線加速度與時間的關係圖,計算週期。 (GlowScript 網站動畫連結



2018年3月29日 星期四

斜向抛射

作者:王一哲
日期:2018/3/29




將一個小球由地面以初速 v0、仰角 𝜃 抛出,小球受到重力作用向下加速,計算小球的飛行時間及水平射程。分為以下3種不同的狀況:

  1. 只考慮重力的作用,小球撞到地板時停止運動。 (GlowScript 網站動畫連結
  2. 同時考慮重力及空氣阻力 $f = -bv$,同時畫出考慮空氣阻力與不考慮空氣阻力的小球。 (GlowScript 網站動畫連結
  3. 使用 for 迴圈,分別計算不同仰角 𝜃、不同的空氣阻力係數 b 對應的飛行時間和水平射程。 (GlowScript 網站動畫連結

成果如下:


只考慮重力的作用,小球撞到地板時停止運動