跳轉到內容

MATLAB 程式設計/陣列/基本向量運算

來自華夏公益教科書


MATLAB 中的向量被定義為僅具有一維且大小大於 1 的陣列。例如,陣列 [1,2,3] 被視為向量。向量可以執行一些對其他陣列(如矩陣)意義不大的操作。但是,由於向量是矩陣的特例,因此所有矩陣函式也可以對向量執行,只要操作在數學上是有意義的(例如,可以將垂直向量和水平向量進行矩陣乘法)。本節重點介紹僅對向量執行的操作。

宣告向量

[編輯 | 編輯原始碼]

宣告向量就像宣告普通陣列一樣,除了一個維度以外,所有維度的長度都必須為 1。陣列是垂直還是水平並不重要。例如,以下兩個都是向量

>> Horiz = [1,2,3];
>> Vert = [4;5;6];

可以使用isvector函式在程式中判斷一個變數是否是向量,然後再嘗試對其進行向量運算。這對於錯誤檢查很有用。

>> isvector(Horiz)
ans = 1
>> isvector(Vert)
ans = 1

建立向量的另一種方法是將矩陣的單行或單列賦值給另一個變數

>> A = [1,2,3;4,5,6];
>> Vec = A(1,:)
Vec = 1   2   3

這是儲存多個向量然後在需要使用時提取它們的有效方法。例如,梯度可以儲存為雅可比矩陣的形式(這就是符號數學工具箱返回多變數函式導數的方式),並在需要時提取以找到系統中特定函式導數的大小。

用線性或對數間隔宣告向量

[編輯 | 編輯原始碼]

假設您希望宣告一個線上性範圍內變化的向量。例如,向量 [1,2,3] 線上性範圍內從 1 變化到 3,向量 [1,1.1,1.2,1.3,...,2.9,3] 也線上性範圍內從 1 變化到 3。為了避免鍵入所有這些項,MATLAB 提供了一個名為linspace的便捷函式,可以自動宣告此類向量

>> LinVector = linspace(1,3,21)
 LinVector = Columns 1 through 9 
   1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000
 Columns 10 through 18 
   1.9000    2.0000    2.1000    2.2000    2.3000    2.4000    2.5000    2.6000    2.7000
 Columns 19 through 21 
   2.8000    2.9000    3.0000

請注意,linspace 生成的是行向量,而不是列向量。要獲取列向量,請對 LinVector 使用轉置運算子 (')。

函式的第三個引數是您想要向量的總大小,其中包括前兩個引數作為端點,以及介於兩者之間的 n - 2 個其他點。如果省略第三個引數,MATLAB 假設您希望陣列包含 100 個元素。

如果您希望間隔是對數的,請使用logspace函式。與 linspace 函式不同,此函式不會在第一個引數 a 和 b 之間找到 n - 2 個點。而是找到 10^a 和 10^b 之間的 n-2 個點,如下所示

>> LogVector = logspace(1,3,21)
 LogVector = 1.0e+003 *
 Columns 1 through 9 
   0.0100    0.0126    0.0158    0.0200    0.0251    0.0316    0.0398    0.0501    0.0631
 Columns 10 through 18 
   0.0794    0.1000    0.1259    0.1585    0.1995    0.2512    0.3162    0.3981    0.5012
 Columns 19 through 21 
   0.6310    0.7943    1.0000

這兩個函式對於生成您希望在其中評估另一個函式的點很有用,分別用於在矩形和對數軸上進行繪圖。

向量大小

[編輯 | 編輯原始碼]

可以使用norm函式找到向量的幅值

>> Magnitude = norm(inputvector,2);

例如

>> magHoriz = norm(Horiz) 
magHoriz = 3.7417
>> magVert = norm(Vert)
magVert = 8.7750

輸入向量可以是水平的也可以是垂直的。

兩個相同大小的向量的點積(垂直或水平,只要長軸的長度相同,就無關緊要)可以使用dot函式找到,如下所示

>> DP = dot(Horiz, Vert)
DP = 32

點積會生成一個標量值,該值可與兩個向量的幅值結合使用,以找到角度,如下所示

>> theta = acos(DP/(magHoriz*magVert));
>> theta = 0.2257

請注意,此角度是弧度,而不是度數。

可以使用'cross'函式計算兩個大小為 3 的向量的叉積

>> CP = cross(Horiz, Vert)
CP = -3   6   -3

請注意,叉積是一個向量。類似於點積,也可以使用叉積的幅值找到兩個向量之間的角度

>> CPMag = norm(CP);
>> theta = asin(CPMag/(magHoriz*magVert))
theta = 0.2257

叉積本身總是垂直於兩個初始向量。如果叉積為零,則兩個初始向量彼此平行。

華夏公益教科書