---
# System prepended metadata

title: Lecture 2 – 矩陣與陣列運算、x-y 繪圖；自由落體實驗

---

# Lecture 2 – 矩陣與陣列運算、x-y 繪圖；Exp. 2 自由落體

## 課程目標
- 熟悉 MATLAB 中的變數運算  
- 了解 **矩陣運算 (Matrix operation)** 與 **陣列運算 (Array operation)** 的差異  
- 學會使用冒號運算子 `:`  
- 練習建立與操作數值陣列  
- 繪製基本的 x-y 圖形  
- 進行自由落體實驗，測量重力加速度 g  

---

## 一、變數與數值運算
在 MATLAB 中，數值變數以「**陣列**」形式儲存，因此運算必須遵守對應的規則。  
例如：加、減、乘、除、次方、階乘等，都會依據 **矩陣規則** 或 **陣列規則** 來計算。  

### 運算子優先順序
就像數學一樣：先乘除、後加減。
![image](https://hackmd.io/_uploads/Bk5LidaKxx.png)

更完整的規則可以用：
```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')   % 紅色圓點
```
![image](https://hackmd.io/_uploads/H1N80dpYxe.png)
可再透過圖軸視窗中的工具箱擬合功能(Tool→Basic Fitting)畫上趨勢線。
![image](https://hackmd.io/_uploads/BJAYJFaYle.png)
有了擬合趨勢線的結果，就可以進一步聯結實驗數據與理論物理參數的關係。

### 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');  %改變標記
```
![image](https://hackmd.io/_uploads/BkWSytpKel.png)
---
## 六、實驗 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)
```
![image](https://hackmd.io/_uploads/Hkpu-FpYex.png)
