# 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²)

---
### 建立運動方程式
由牛頓第二定律:
$$ \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)')
```

結果解釋
- 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)