跳轉到內容

MATLAB 程式設計/向量數學

來自華夏公益教科書,開放的書籍,開放的世界


MATLAB 是一種向量程式語言。 最有效地使用 MATLAB 將涉及利用內建的用於操作資料的功能,而不是使用迴圈等結構。

基礎數學

[編輯 | 編輯原始碼]

大多數算術運算子將在向量上按預期工作

>> a = [2 43 943 78];
>> 5 * a
ans =
          10         215        4715         390
>> a / 2
ans =
    1.0000   21.5000  471.5000   39.0000
>> 0.2 + a
ans =
    2.2000   43.2000  943.2000   78.2000

同樣,所有這些操作都可以對矩陣進行,以獲得預期的結果。

大多數 MATLAB 函式,例如 sinlog,將返回與輸入維度相同的向量或矩陣。 因此,要計算 0 到 10 之間所有整數的正弦,只需執行

>> sin(0:10)

返回的向量將包含十個值。

按元素運算

[編輯 | 編輯原始碼]

諸如脫字元號 (^) 或向量之間的乘法之類的運算子可能無法按預期工作,因為 MATLAB 將向量視為與任何其他矩陣相同,因此執行矩陣冪和矩陣乘法。 所有運算子都可以加上一個 . 字首,以明確表明應在矩陣的每個元素上執行運算。 例如,要計算 1 到 4 之間所有整數的正弦和餘弦函式平方之差,可以使用

>> (sin(1:4) - cos(1:4)).^2
ans =
    0.0907    1.7568    1.2794    0.0106

而不是

>> (sin(1:4) - cos(1:4))^2
??? Error using ==> mpower
Matrix must be square.

這是 MATLAB 嘗試使用矩陣乘法對 1x4 向量求平方而產生的結果。

使用 .*./ 允許將矩陣或向量的每個元素除以另一個矩陣或向量的元素。 為此,兩個向量必須具有相同的尺寸。

將迴圈轉換為基於向量的數學

[編輯 | 編輯原始碼]

由於 MATLAB 是一種向量語言,因此諸如

x = [];
v = [5,2,4,6];
for i=1:4
   x(i) = v(i) * ((i+32)/2 - sin(pi/2*i));
   if(x(i) < 0)
      x(i) = x(i) + 3;
   end
end

可以在 MATLAB 中透過使用向量而不是迴圈來更高效地完成

i = 1:4;
v = [5,2,4,6];
x = v .* ((i+32)/2 - sin(pi/2*i));
x(x<0) = x(x<0) + 3;

在內部,MATLAB 當然是在迴圈遍歷向量,但它是在比 MATLAB 程式語言中可能的更低的級別。

華夏公益教科書