置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2019年8月14日 星期三

一維彈性碰撞次數與圓周率

作者:王一哲
日期:2019/8/14




前言


如下圖所示,假設在水平光滑桌面上有兩個木塊,右側紅色木塊的質量為$m_1$、初速度方向向左,左側綠色木塊的質量為$m_2$、原為靜止,且$m_1 = 100^n m_2$,最左側有固定的牆壁。若木塊之間、木塊與牆壁之間的碰撞皆為一維彈性碰撞,則碰撞次數與$n$的關係如下。


裝置示意圖



n 碰撞次數
1 31
2 314
3 3141
4 31415
5 314159



如果想要了解背後的原理請看這部影片 So why do colliding blocks compute pi? [1],影片作者是3Blue1Brown。接下來我們拿之前寫過的〈一維彈性碰撞〉程式碼來修改,試著畫出這個現象。


2019年8月13日 星期二

使用 Python 產生聲音及繪製頻譜圖

作者:王一哲
日期:2019/8/13




前言


我在去年看到了啾啾鞋講解電話按鍵聲的影片 [1],裡面用到的技術稱為雙音多頻訊號 (Dual-Tone Multi-Frequency, DTMF) [2],各個按鍵對應的聲音頻率如下表所示

1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D



另外也在 YouTube 上找到了成功大學數學系舒宇宸教授演講的影片 [3],教授在演講時用 MATLAB 產生了上述表格中的聲音。既然用 MATLAB 可以做到,應該也可以用 Python 做到同樣的效果才對,於是我花了一天的時間研究了一下,找到以下的解決方案。



2019年8月8日 星期四

使用 numpy.genfromtxt 從文字檔中讀取資料

作者:王一哲
日期:2019/8/8




假設某人儲存資料時不是用csv檔,而是使用數量不一致的空格分格資料,我們將前一篇文章〈最接近直線〉的數據排列成底下這樣再儲存為文字檔data.txt。

index   x  errx   y     erry
    0   1.0  0.1      4.9   0.5
 1  2.0   0.1    6.9  0.5
2   3.0  0.1     9.0      0.5
  3   4.0    0.1  11.1   0.6
   4  5.0   0.1  13.2   0.6
 5  6.0   0.2    15.2     0.8
6 7.0 0.2  16.9    0.8
  7  8.0  0.2     18.9      0.8
 8    9.0   0.2  20.9   0.8
9   10.0  0.2   22.8    0.8

我絕對不會用這樣的格式儲存資料,但如果真的遇到這種狀況還是有辦法解決,只要使用numpy.genfromtxt即可,語法為

2019年8月6日 星期二

最接近直線

作者:王一哲
日期:2019/8/5

前言


物理科及化學科在處理實驗數據時,通常會先繪製 XY 散佈圖,如果資料點看起來有線性的關係,就要用最小平方法計算最接近直線的斜率和截距,再試著解釋斜率和截距的物理意義。但如果更講究一點,由於測量數據時本身就會有一定的不準量,最接近直線的斜率、截距也會有不準量,要用什麼方法才能很方便地算出這些數呢?



最接近直線公式


以下的公式是我從物理奧林匹亞培訓講義上抄來的。假設操縱變因(自變數)為$x$、不準量為$\Delta x$,測量的應變變因(應變數)為$y$、不準量為$\Delta y$,數據共有$n$組。則最接近直線

$$斜率 \quad a = \frac{\sum x \sum y - n \sum xy}{(\sum x)^2 - n \sum x^2}$$
$$截距 \quad b = \frac{\sum x \sum xy - \sum y \sum x^2}{(\sum x)^2 - n \sum x^2}$$
$$相關係數 \quad R = \frac{\sum x \sum y - n \sum xy}{\sqrt{\left[ (\sum x)^2 - n \sum x^2 \right] \left[ (\sum y)^2 - n \sum y^2 \right]}}$$

為了要計算斜率及截距的不準量,我們先定義下列的符號

$$\sigma_x = \sqrt{\frac{\sum (\Delta x)^2}{n}}$$
$$\sigma_y = \sqrt{\frac{\sum (\Delta y)^2}{n}}$$
$$\sigma = \sqrt{\sigma_y^2 + a^2 \sigma_x^2}$$

斜率與截距的不準量分別為

$$斜率的不準量 \quad \Delta a = \sqrt{\frac{n \sigma^2}{n \sum x^2 - (\sum x)^2}}$$
$$截距的不準量 \quad \Delta b = \sqrt{\frac{\sigma^2 \sum x^2}{n \sum x^2 - (\sum x)^2}}$$

如果要將$x$軸的不準量$\Delta x$加到$y$軸上,等效的$y$軸不準量計算方式為

$$\Delta y_{eff} = \sqrt{(\Delta x)^2 + (a \Delta y)^2}$$



2019年7月22日 星期一

Matplotlib 繪圖技巧:四張小圖並列

作者:王一哲
日期:2019/7/22

前言


以下是將在四張小圖畫在同一張圖中的作法,將圖排列為 $2 \times 2$ 的樣子,圖中的函數分別為

$$\mathrm{sigmoid:}~~~~~S(x) = \frac{1}{1+e^{-x}}$$
$$\mathrm{tanh:}~~~~~\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$$
$$\mathrm{ReLU:}~~~~~f(x) = \begin{cases} 0 & \mathrm{if~~~} x < 0 \\ x & \mathrm{otherwise} \end{cases}$$ $$\mathrm{Leaky~ReLU:}f(x) = \begin{cases} \lambda x & \mathrm{if~~~} x < 0 \\ x & \mathrm{otherwise} \end{cases}$$


2019年7月21日 星期日

於 Matplotlib 繪製的圖表中插入 LaTeX 數學式

作者:王一哲
日期:2019/7/21

前言


如果想在 Matplotlib 繪製的圖形中插入簡單的 $\LaTeX$ 數學式,例如

$$f(x) = ax^2 + bx + c$$

只需要在繪圖時加入
label=r'$f(x) = ax^2 + bx + c$'

即可。但如果要插入更複雜的數學式,例如

$$f(x) =
\begin{cases}
0.2x & \mathrm{if~~~} x < 0 \\ x & \mathrm{otherwise} \end{cases}$$ 會需要另外安裝 $\LaTeX$ 軟體,還需要另外加上一些程式碼。

2019年7月14日 星期日

用 Google 試算表製作工作清單

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

前言


我最近讀了一本關於工作方法的書,裡面提到了工作清單及優先順序的問題,處理原則和我之前讀過的時間管理書籍完全一致。不過書中的工作清單是用 Excel 製作的,我想用 Google 試算表應該會更方便,於是就有了這個檔案:工作清單範本公開版


2019年7月11日 星期四

設定 Python 路徑

作者:王一哲
日期:2019/7/11

前言


當我們在 Windows 中安裝 Python 時,如果沒有勾選安裝視窗中最下方的選項Add Python 3.6 to PATH,在安裝之後系統會不知道要從什麼地方找到 Python 指令,也就無法指令介面執行 Python。這時我們需要自行修改 Windows 的環境變數 PATH,以下是修改的步驟。


Python 3.6.4 安裝視窗

2019年7月9日 星期二

Google for Education Level 1 認證

作者:王一哲
日期:2019/7/8

前言


由於本校資訊組正在推行 G Suite,希望吸引更多的老師將 Google 軟體運用在教學上,因此特地找了 Google 認證培訓機構的講師來開課,並在課程的最後一個下午參加 Google for Education Level 1 認證考試,以下是關於考試的筆記。



Google for Education Level 1 認證


簡介


這個認證考試主要是針對適合用在教學上的 Google 系列產品,分為教育家第1級教育家第2級,考試內容可以先參考 Google for Education 官方網站的訓練課程,第1級為基礎課程,第2級為進階課程

教育家第1級的考試費用為10美金,通過考試後取得的認證有效期限為3年,考試時間為3小時,考試內容分為觀念題及實作題,但如果點 Google 認證教育家第1級頁面中的練習,只能看到幾個例題而已。如果平常就有在用 Google 的產品,應該只要照著題目的指示操作就可以通過考試。

2019年6月25日 星期二

於 Linux Mint 上安裝 EPSON 印表機的方法

作者:王一哲
日期:2019/6/25

環境


  1. Linux Mint 19.1 Cinnamon
  2. EPSON AL-C300DN
  3. 由內部網路連線至印表機


步驟


  1. 於官方網站下載驅動程式頁面搜尋印表機型號AL-C300DN,或是按後方的連結下載epalc300dn.ppd
  2. EPSON 官方網站