# Lecture 5 – 函數宣告 (Function Declaration);Exp 4 Maxwell Wheel ## 課程目標 - 學會在 MATLAB 中建立自訂函數 - 了解函數在程式設計中的用途 - 透過範例練習:數值積分、拋體運動、行星軌道 - 進行 Maxwell Wheel 實驗,觀察能量轉換 --- ## 一、MATLAB 函數宣告 在 MATLAB 中,我們除了能使用內建函數外,也能撰寫 **自訂函數 (user-defined function)**,以降低程式複雜度、提升可讀性。 --- ### 1. 函數宣告方式 #### (1) 匿名函數 (Anonymous function) 匿名函數透過 **function handle** 建立,適合簡短的一次性函數。 範例: ```matlab y = @(x) sin(x).^3; integral(y, 0, pi) ``` 輸出: ```matlab ans = 1.3333 ``` ![image](https://hackmd.io/_uploads/BkaZomScgl.png) 👉 在 Workspace 會看到一個 function handle 物件,僅在此 script 中可用。 #### (2) 在 Script 內定義函數 ![image](https://hackmd.io/_uploads/HJfXomB9xe.png) 可以在腳本 (script) 最下方定義函數,並在上方呼叫。 ```matlab result = MyFunc(5) function y = MyFunc(x) y = x^2 + 2*x + 1; end ``` #### (3) 建立函數檔 (.m file) - 開新檔案 → Function 範本 → 撰寫函數內容 - 存檔檔名需與函數名稱相同 - 存檔後,MATLAB 會在 Current Folder 建立一個 function file,可在任何 script 呼叫。 範例: ```matlab function result = Integrate(a, b) y = @(x) sin(x).^3; result = integral(y, a, b); end ``` 呼叫方式: ```matlab f_integral = Integrate(0, pi) ``` 輸出: ```matlab f_integral = 1.3333 ``` --- ### 2. 範例練習 #### (1) 利用自定義函數畫出不同拋射角下理想二維拋體的軌跡 拋體運動是普物中一個重要的基礎題目。考慮一個物體以初速$v_o$且沿與水平軸夾角為θ的方向拋出。根據牛頓力學,其運動方程式可寫成: ![image](https://hackmd.io/_uploads/Hy5c2Xr5ee.png) 定義一個函數,繪製拋射角 40、45及50度的軌跡。 #### (2) 接續前一範例,考慮有Stokes' drag下的情況 拋體受阻力 𝐹 =−𝑏𝑣,運動方程式可以求解成: ![image](https://hackmd.io/_uploads/H1I_amB5ex.png) 請分析當初速度vo=20 m/s且阻力係數b=0.1 (1/s)時,拋射角θ=35°、45°、55°的軌跡。 - 進階討論: 解出此阻力條件下不同拋射角對應飛行時間以及最大射程? ![image](https://hackmd.io/_uploads/rklmAvHcxg.png) ### 3. 挑戰練習題-行星軌道 利用Kepler軌跡方程式: ![image](https://hackmd.io/_uploads/S16ORPSqgx.png) 其中L是橢圓的半正焦弦(semi-latus rectum)、ε是橢圓率(eccentricity)、θ則是真近點角(true anomaly, https://en.wikipedia.org/wiki/True_anomaly)。若以橢圓遠日距離rmax與近日距離rmin表示,則 ![image](https://hackmd.io/_uploads/SyH50DHqlx.png) ![image](https://hackmd.io/_uploads/rysq0DS5gx.png) 請將極座標轉換成直角座標並根據下表畫出太陽系行星之相對軌跡。 | Name | r_max (AU) | r_min (AU) | |---------|------------|------------| | Mercury | 0.467 | 0.308 | | Venus | 0.728 | 0.718 | | Earth | 1.017 | 0.983 | | Mars | 1.667 | 1.382 | | Jupiter | 5.452 | 4.953 | | Saturn | 10.081 | 9.015 | | Uranus | 19.997 | 17.949 | ![image](https://hackmd.io/_uploads/r10rJOB9ee.png) 👉 Bonus:參考https://personalpages.manchester.ac.uk/staff/paul.connolly/teaching/practicals/solar_system.html 嘗試讓你的太陽系行星動起來。 --- ## 二、實驗五 Maxwell Wheel ### 實驗目的 - 驗證能量轉換原理 - 理解 **轉動動能** 與 **線動能** 的關係 --- ### 實驗原理 Maxwell Wheel 是一個質量 \( m \)、半徑 \( R \) 的圓盤,繞細繩自由下落。 忽略摩擦與細繩質量,能量守恆式為: $$ m g h_0 = \tfrac{1}{2} m v^2 + \tfrac{1}{2} I \omega^2 $$ 其中: - \( I \):轉動慣量 - \(\omega = v/R\):角速度與線速度關係 當質心降至 \( y=0 \) 時: $$ v^2 = \frac{2 g h_0}{1 + I/(mR^2)} $$ 👉 可由數據擬合得到轉動慣量 \( I \)。 --- ### 實驗步驟 #### 量測 1:轉動慣量 1. 改變不同初始高度 \( h_0 \),測量 \( y=0 \) 時的速度 \( v \)。 2. 作圖並擬合數據,計算轉動慣量 \( I \)。 3. 與理論值比較。 > 注意:實際上因摩擦與細繩彈性,反彈時無法回到原高度,能量並非完全守恆。 --- #### 量測 2:能量損耗 1. 固定一個初始高度 \( h_0 \)。 2. 測量第 \( i \) 次反彈後質心高度 \( h_i \)。 3. 估算能量損耗比率。 4. 假設每次反彈視為彈性碰撞,能量損耗主要來自摩擦,思考如何由數據估算摩擦力大小。 --- ### 參考資料 - B. Percori and G. Torzo, *The Maxwell wheel investigated with MBL*, Phys. Tech. **36**, 362 (1998). - 示範影片:[YouTube - Maxwell Wheel](https://www.youtube.com/watch?v=8Ch9TDeW1FU) ---