# Lecture 2 – 矩陣與陣列運算、x-y 繪圖;Exp. 2 自由落體
## 課程目標
- 熟悉 MATLAB 中的變數運算
- 了解 **矩陣運算 (Matrix operation)** 與 **陣列運算 (Array operation)** 的差異
- 學會使用冒號運算子 `:`
- 練習建立與操作數值陣列
- 繪製基本的 x-y 圖形
- 進行自由落體實驗,測量重力加速度 g
---
## 一、變數與數值運算
在 MATLAB 中,數值變數以「**陣列**」形式儲存,因此運算必須遵守對應的規則。
例如:加、減、乘、除、次方、階乘等,都會依據 **矩陣規則** 或 **陣列規則** 來計算。
### 運算子優先順序
就像數學一樣:先乘除、後加減。

更完整的規則可以用:
```matlab
help Operator Precedence
```
---
## 二、矩陣運算 vs. 陣列運算
### 1. 矩陣運算 (Matrix operation)
與數學上的矩陣代數一致,例如:
- A * B:矩陣相乘(需符合「前矩陣欄數 = 後矩陣列數」)
- A \ B:等同於 inv(A) * B
- A / B:等同於 A * inv(B)
### 2. 陣列運算 (Array operation)
如果要對應元素逐一計算,必須在運算子前加上 .:
- .*:逐元素相乘
- ./:逐元素相除
- .^:逐元素次方
```matlab
A = [1 2; 3 4];
B = [2 0; 1 3];
C1 = A * B; % 矩陣乘法
C2 = A .* B; % 陣列逐元素乘法
```
---
## 三、冒號運算子 :
冒號常用於:
### 1. 建立向量
```matlab
x = 0:5 % [0,1,2,3,4,5]
y = 0:2:5 % [0,2,4]
z = 1:3:10 % [1,4,7,10]
```
### 2. 索引矩陣元素
```matlab
A = magic(5);
A(:,3) % 第 3 欄
A(2,:) % 第 2 列
A(3,2:4) % 第 3 列第 2~4 欄
```
---
## 四、建立與操作數值陣列
**建立向量與矩陣**
```matlab
A = [1, 3, 5, 7] % 列向量
B = [2; 4; 6; 8] % 行向量
C = [1 2; 3 4] % 2x2 矩陣
```
**修改矩陣元素**
```matlab
C(1,2) = 0 % 修改 (1,2) 元素
C(2,:) = C(2,:) - 1 % 修改第 2 列
```
**常用索引技巧**
```matlab
a = [1, 2, 0, 7, 9, 0];
idx = find(a > 5); % 找出大於 5 的位置
a(idx) % 取出對應數值
```
**檢查矩陣大小**
```matlab
length(A) % 元素個數
size(A) % 矩陣大小
```
**特殊函數 (部分)**
- inv(A):反矩陣
- det(A):行列式
- eig(A):特徵值
- rank(A):秩
- trace(A):對角和
- mean(A):平均值
- std(A):標準差
---
## 五、繪圖:x-y plot
### 1. 基本數據作圖
```matlab
x = [0.5, 1.1, 1.5, 2.2, 2.6, 3.0, 3.4];
y = [2.1, 4.3, 6.0, 9.0, 10.5, 11.9, 13.4];
plot(x, y, 'or') % 紅色圓點
```

可再透過圖軸視窗中的工具箱擬合功能(Tool→Basic Fitting)畫上趨勢線。

有了擬合趨勢線的結果,就可以進一步聯結實驗數據與理論物理參數的關係。
### 2. 畫函數圖
```matlab
x = linspace(0, 2*pi, 100);
y = sin(x);
figure(1)
subplot(1,3,1)
plot(x, y) % 單一曲線
subplot(1,3,2)
plot(x, sin(x), x, cos(x), x, sin(x)+cos(x)); % 多條曲線
subplot(1,3,3)
plot(x, sin(x), 'o', x, cos(x), 'x'); %改變標記
```

---
## 六、實驗 2:自由落體實驗
### 實驗目的
1. 學會使用手機感測器 (聲音或錄影) 記錄自由落體過程
2. 由自由落體實驗數據推算重力加速度 **g**
---
### 實驗原理
自由落體的位移公式為:
$$
x = \frac{1}{2} g t^2
$$
其中:
- \( x \):下落高度
- \( t \):時間
- \( g \):重力加速度
👉 若繪製 **\( x \) 對 \( t^2 \)** 的圖形,會是一條直線:
$$
x = \left(\frac{g}{2}\right) t^2
$$
因此,直線斜率 = \( \frac{g}{2} \),即可由實驗數據擬合出 \( g \)。
---
### 實驗步驟
1. 準備一個可變高度的固定架與小球/砝碼
2. 使用 **phyphox app 聲學碼錶** 或 **手機錄影**,記錄下落時間
3. 測量並記錄「高度 \(x\)」與「時間 \(t\)」數據
4. 將數據輸入 MATLAB,繪製 **x vs. t²** 圖形
5. 使用線性擬合 (`polyfit`) 求得斜率,進而計算 \( g \)
---
### MATLAB 範例程式
```matlab
% 高度 (m)
x = [0.5, 1.0, 1.5, 2.0];
% 對應的時間 (s)
t = [0.32, 0.45, 0.55, 0.64];
% 繪製 x vs. t^2
plot(t.^2, x, 'or')
xlabel('t^2 (s^2)')
ylabel('x (m)')
title('自由落體實驗:x vs. t^2')
% 線性擬合
p = polyfit(t.^2, x, 1);
% 由斜率計算 g
g = 2 * p(1)
```
