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
請注意,此角度是弧度,而不是度數。
兩個大小為 3 的向量的叉積使用 'cross' 函式計算
>> CP = cross(Horiz, Vert) CP = -3 6 -3
請注意,叉積是一個向量。類似於點積,也可以使用叉積的幅度找到兩個向量之間的角度
>> CPMag = norm(CP); >> theta = asin(CPMag/(magHoriz*magVert)) theta = 0.2257
叉積本身始終垂直於最初的兩個向量。如果叉積為零,則最初的兩個向量彼此平行。