# Lecture 3 – 符號運算 (Symbolic) 與字串運算 (String);Exp 3 彈跳球&球碰撞 ## 課程目標 - 學會 MATLAB 的 **符號運算 (symbolic computation)** - 學會 **字串操作 (string operation)** - 結合符號與數值運算解物理問題 - 進行 **彈跳球實驗 (Bouncing Ball)** 測量重力加速度 g 與恢復係數 η --- ## 一、符號運算 (Symbolic Computation) ### 1. 基本概念 MATLAB 除了可以做數值計算,也能進行代數計算(符號運算),例如: - 解方程式 - 微積分 - 解微分方程式 使用前需要先宣告符號變數: ```matlab syms x ``` ### 2. 微積分 ```matlab syms f(x) f(x) = sin(x^2) df = diff(f, x) % 對 x 微分 ``` 多變數偏微分: ```matlab syms f(x,y) f(x,y) = sin(x^2)*cos(3*y) diff(f, x) % 對 x 偏微分 diff(f, y) % 對 y 偏微分 ``` 積分: ```matlab syms f(x) f(x) = exp(-x^2) int(f, x) % 不定積分 int(f, x, -Inf, Inf) % 定積分 ``` ### 3. 解方程式 解一元二次方程式: ```matlab syms x a b c f = a*x^2 + b*x + c; solve(f == 0, x) ``` ### 4. 解微分方程式 無初始條件: ```matlab syms v(t) b dsolve(diff(v,t) == -b*v) ``` 有初始條件: ```matlab syms v(t) g b v0 f = diff(v,t) == g - b*v; v_sol(t) = dsolve(f, v(0) == v0) ``` --- ## 二、字串運算 (String Operation) ### 1. 基本操作 用單引號 ' ' 定義字串: ```matlab str1 = 'You'; str2 = 'and'; str3 = 'me.'; str4 = [str1 ' ' str2 ' ' str3] % 字串串接 ``` 字串裡要加單引號 ',要打兩個: ```matlab str5 = 'I''m a student' ``` ### 2. 常用函數 | 函數 | 說明 | | ------------------- | --------------- | | `int2str(x)` | 將數字轉成字串 | | `num2str(x)` | 數字轉字串 | | `str2num(str)` | 字串轉數字 | | `strcmp(s1,s2)` | 比較字串是否相同 | | `strncmp(s1,s2,n)` | 比較前 n 個字元是否相同 | | `findstr(str,s)` | 找字串 s 在 str 的位置 | | `strrep(str,s1,s2)` | 替換字串 | | `strtok(str,token)` | 以 token 切割字串 | | `strvcat(s1,s2)` | 垂直排列字串 | 範例: ```matlab A = {'Taipei','Taoyuan','Chiayi'}; B = {'Taipei','Tainan','Hsinchu'}; strcmp(A,B) % 比較字串 strncmp(A,B,1) % 比較前1個字元 findstr('hello the world','world') strrep('Call me','Call','Save') ``` --- ## 三、結合符號與數值運算 在 MATLAB 中,符號運算 (`syms`) 得到的結果,可以再帶入數值進行計算。 常用指令:`subs(符號表達式, 變數, 值)` --- ### 範例:雨滴自由落體 (含阻力) 條件: - 高度 H = 100 m - 初速 v0 = 0 - 阻力係數 β = 0.5 (s⁻¹) - 重力加速度 g = 9.8 (m/s²) ![image](https://hackmd.io/_uploads/Sy4tEYAtxx.png) --- ### 建立運動方程式 由牛頓第二定律: $$ \frac{dv}{dt} = g - \beta v $$ MATLAB 程式: ```matlab syms v(t) g b v0 f = diff(v,t) == g - b*v; % 解微分方程式,初始條件 v(0) = v0 v_sol(t) = dsolve(f, v(0) == v0) ``` 輸出結果: ```matlab v_sol(t) = (g - exp(-b*t)*(g - b*v0))/b ``` 代入數值計算 ```matlab % 帶入 g=9.8, b=0.5, v0=0 v_num = subs(v_sol, [g b v0], [9.8 0.5 0]); % 計算 t=2 秒時的速度 v_at_2 = double(subs(v_num, t, 2)) y(t)=int(v_sol(t),t,0,t); ti = linspace(0,20,100); yT = subs(y,{t},{ti}); plot(ti,yT,'-r') line(xlim,[100, 100],'Color','black','LineStyle','--') xlabel('Time(s)'); ylabel('Traveling distance(m)') ``` ![image](https://hackmd.io/_uploads/SJxJIYCKeg.png) 結果解釋 - v_sol(t):符號解,表示任意 t 的解析式 - subs:代入數值,得到特定條件下的速度函數 - double:將符號結果轉成數值 👉 這樣就能結合 符號推導 與 數值模擬,用於物理問題分析。 # 實驗 3 – 彈跳球與球碰撞 (Bouncing Ball & Ball Collision) ## 實驗目標 - 測量重力加速度 **g** - 測量不同球類的 **恢復係數 (Coefficient of restitution, η)** - 理解能量轉換與 **動量守恆** 的概念 --- ## 一、彈跳球實驗 (Bouncing Ball Problem) ### 原理 球的運動方程式會受到以下作用力影響: - 重力 (Gravitational force) - 空氣阻力 (Drag) - Magnus 力 (因旋轉產生) - 浮力 (Buoyancy) 若只關心「碰撞前後的能量變化」,可以用 **恢復係數 η** 簡化: $$ \eta = \frac{v_f}{v_i} = \sqrt{\frac{H_f}{H_i}} $$ 其中: - $(v_f, v_i)$:碰撞後、前的速度 - $(H_f, H_i)$:碰撞後、前的高度 若將$H_f$以碰撞間彈跳球的飛行時間$T_f$表示,其中: $$ T_f/2 =\sqrt{\frac{2H_f}{g}}→\sqrt{H_f}=\sqrt{\frac{g T_f^2}{8}} $$ 則 $$ \eta =\sqrt{\frac{g T_f^2}{8 H_i}} $$ --- ### 實驗步驟 1. 選一種球,量測: - 每次碰撞前的高度 $( H_{i-1} )$ - 對應的飛行時間 $( T_i )$ 2. 作圖: - 縱軸 = $( T_i^2 )$ - 橫軸 = $( 8 H_{i-1} )$ - 擬合直線 → 斜率 = $( \eta^2 )$ 3. 更換 3~4 種不同材質的球,重複步驟,得到各自的恢復係數 --- ## 二、球碰撞實驗 (Ball Collision in Vertical Direction) ### 原理 當 **大球** 與 **小球** 同時由高度 $\ H_i$ 落下: - 大球與地面碰撞後,將部分動量傳給小球 - 小球可能彈到 **高於原高度** 的位置 忽略空氣阻力,落下時速度: $$ v = \sqrt{2gH_i} $$ 若大球與地面恢復係數為 $\eta_l$,則: - 大球與地面碰撞 → 改變速度 - 大球與小球碰撞 → 動量守恆 + 相對速度關係 若將碰撞後大、小球之相對速度表成碰撞前之相對速度與大小球相對恢復係數$\eta_s$之乘積 最後,小球彈起高度可寫為: $$ H_f = \frac{v_f^2}{2g}=H_i{[{\frac{M(1+\eta_s)\eta_l+(M\eta_s-m)}{M+m}}]}^2 $$ --- ### 實驗步驟 1. 選一組「大球 + 小球」,先量測大球與地面恢復係數 $\eta_l$。 2. 改變初始高度 $\ H_i$,紀錄小球彈起高度 $\ H_f$。 3. 利用數據計算大球與小球間的恢復係數 $\eta_s$。 4. 更換 1~2 組不同球體,重複實驗。 --- ## 三、進階討論 真實彈跳球運動更複雜,可能涉及: - 空氣阻力 - 浮力 - Magnus 力(旋轉效應) - 球體與地面碰撞時的形變 👉 思考:如果要建立更精確的模型,應該如何將這些因素納入? 參考文章: - [Wikipedia: Bouncing Ball](https://en.wikipedia.org/wiki/Bouncing_ball) - [Real World Physics Problems – Bouncing Ball Physics](https://www.real-world-physics-problems.com/bouncing-ball-physics.html)