熱門文章

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於鹿林天文台所見星空(天頂)