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