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
叉積本身總是垂直於兩個初始向量。如果叉積為零,則兩個初始向量彼此平行。