跳轉至內容

Octave 程式設計教程/向量和矩陣

來自華夏公益教科書

建立向量和矩陣

[編輯 | 編輯原始碼]

以下是我們在 Octave 中指定行向量的示例

octave:1> x = [1, 3, 2]
x =

  1  3  2

請注意

  • 向量用方括號括起來;
  • 每個元素之間用可選的逗號分隔。x = [1 3 2] 會產生相同的行向量。

要指定列向量,只需將逗號替換為分號

octave:2> x = [1; 3; 2]
x =

  1
  3
  2

由此可見,我們使用逗號移動到向量(或矩陣)的下一列,並使用分號移動到下一行。因此,要指定矩陣,請鍵入行(用逗號分隔每個元素),並使用分號移動到下一行。

octave:3> A = [1, 1, 2; 3, 5, 8; 13, 21, 34]
A =

   1   1   2
   3   5   8
  13  21  34

運算子

[編輯 | 編輯原始碼]

可以使用標準運算子來

  • 加(+),
  • 減(-),以及
  • 乘(*

矩陣、向量和標量。請注意,這些運算子要起作用,矩陣需要具有匹配的維數(在乘法情況下,是內部維數)。

  • 轉置運算子是單引號:'。繼續上一節的示例,
octave:4> A'
ans =

   1   3  13
   1   5  21
   2   8  34

(注意:這實際上是複共軛轉置運算子,但對於實矩陣,這與轉置相同。要計算復矩陣的轉置,請使用點轉置 (.') 運算子。)

  • 冪運算子 (^) 也可以用於計算方陣的實冪。

元素運算

[編輯 | 編輯原始碼]

當您有兩個相同大小的矩陣時,可以對它們執行逐元素運算。例如,以下程式碼將A中的每個元素除以B中的對應元素

octave:1> A = [1, 6, 3; 2, 7, 4]
A =

  1  6  3
  2  7  4

octave:2> B = [2, 7, 2; 7, 3, 9]
B =

  2  7  2
  7  3  9

octave:3> A ./ B
ans =

  0.50000  0.85714  1.50000
  0.28571  2.33333  0.44444

請注意,您使用點除 (./) 運算子來執行逐元素除法。還有類似的運算子用於乘法 (.*) 和冪運算 (.^)。

讓我們引入一個標量供將來使用。

a = 5;

點除運算子還可以與標量一起以以下方式使用。

C = a ./ B

返回一個矩陣C,其中每個條目由下式定義

aB中的每個條目除。類似地

C = a .^ B

返回一個矩陣,其中

您可以透過索引來處理矩陣和向量的部分內容。您使用一個整數向量來告訴 Octave 使用向量或矩陣的哪些元素。例如,我們建立一個向量

octave:1> x = [1.2, 5, 7.6, 3, 8]
x =

  1.2000  5.0000  7.6000  3.0000  8.0000

現在,要檢視x的第二個元素,請輸入

octave:2> x(2)
ans = 5

您還可以按如下方式檢視元素列表。

octave:3> x([1, 3, 4])
ans =

  1.2000  7.6000  3.0000

最後一個命令顯示了向量x的第 1、3 和 4 個元素。

要從矩陣中選擇行和列,我們使用相同的原理。讓我們定義一個矩陣

octave:4> A = [1, 2, 3; 4, 5, 6; 7, 8, 9]
A =

  1  2  3
  4  5  6
  7  8  9

並選擇第 1 行和第 3 行以及第 2 列和第 3 列

octave:5> A([1, 3], [2, 3])
ans =

  2  3
  8  9

冒號運算子 (:) 可用於從矩陣中選擇所有行或列。因此,要選擇第 2 行中的所有元素,請輸入

octave:6> A(2, :)
ans =

  4  5  6

您也可以像這樣使用: 來選擇所有矩陣元素

octave:7> A(:,:)
ans =
 
  1   2   3
  4   5   6
  7   8   9

我們還可以從矩陣中選擇一系列行或列。我們使用以下方法指定範圍

start:step:stop

您實際上可以在 Octave 提示符下鍵入範圍以檢視結果。例如,

octave:3> 1:3:10
ans =

   1   4   7  10

第一個顯示的數字是start,第二個是start + step,第三個是start + (2 * step)。最後一個數字小於或等於stop

通常,您只需將步長設定為 1。在這種情況下,您可以省略步長引數並鍵入

octave:4> 1:10
ans =

   1   2   3   4   5   6   7   8   9  10

如您所見,範圍命令的結果只是一個整數向量。我們現在可以使用它來索引向量或矩陣。要選擇A左上角的 子矩陣,請使用

octave:4> A(1:2, 1:2)
ans =

  1  2
  4  5

最後,有一個名為end的關鍵字,它可以在索引矩陣或向量時使用。它指的是行或列中的最後一個元素。例如,要檢視矩陣的最後一列,可以使用

octave:5> A(:,end)
ans =

  3
  6
  9

以下函式可用於建立和操作矩陣。

建立矩陣

[編輯 | 編輯原始碼]
  • tril(A) 返回A的下三角部分。
  • triu(A) 返回A的上三角部分。
  • eye(n) 返回 單位矩陣。您還可以使用eye(m, n) 來返回 矩形單位矩陣。
  • ones(m, n) 返回一個 矩陣,其中所有元素均為 1。類似地,ones(n) 返回一個 方陣。
  • zeros(m, n) 返回一個 矩陣,其中所有元素均為 0。類似地,zeros(n) 返回一個 方陣。
  • rand(m, n) 返回一個 矩陣,其中元素是從 範圍內均勻隨機生成的。類似地,rand(n) 返回一個 方陣。
  • randn(m, n) 返回一個 矩陣,其中元素是正態分佈的隨機數。
  • randperm(n) 返回一個行向量,包含數字 的隨機排列。
  • diag(x)diag(A)。對於向量 x,此函式返回一個方陣,對角線上為 x 的元素,其他位置為 0。對於矩陣 A,此函式返回一個向量,包含 A 的對角線元素。例如,
octave:16> A = [1, 2, 3; 4, 5, 6; 7, 8, 9]
A =

  1  2  3
  4  5  6
  7  8  9

octave:17> x = diag(A)
ans =

  1
  5
  9

octave:18> diag(x)
ans =

  1  0  0
  0  5  0
  0  0  9
  • linspace(a, b, n) 返回一個包含 n 個值的向量,第一個元素等於 a,最後一個元素等於 b,相鄰元素之間的差值恆定。最後一個引數 n 是可選的,預設值為 100。
octave:186> linspace(2, 4, 2)
ans =

  2   4

octave:187> linspace(2, 4, 4)
ans =

  2.0000   2.6667   3.3333   4.0000

octave:188> linspace(2, 4, 6)
ans =

  2.0000   2.4000   2.8000   3.2000   3.6000   4.0000


  • logspace(a, b, n) 返回一個包含 n 個值的向量,第一個元素等於 ,最後一個元素等於 ,相鄰元素之間的比率恆定。最後一個引數 n 是可選的,預設值為 50。
octave:189> logspace(2, 4, 2)
ans =

    100   10000

octave:190> logspace(2, 4, 4)
ans =

  1.0000e+02   4.6416e+02   2.1544e+03   1.0000e+04

octave:191> logspace(2, 4, 5)
ans =

  1.0000e+02   3.1623e+02   1.0000e+03   3.1623e+03   1.0000e+04

其他矩陣

[編輯 | 編輯原始碼]

還有一些建立特殊矩陣的函式,如下所示:

使用 help 命令可以獲取有關如何使用這些函式的更多資訊。

更改矩陣

[編輯 | 編輯原始碼]
  • fliplr(A) 返回矩陣 A 的副本,其中列的順序反轉,例如,
octave:49> A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12] 
A =

   1   2   3   4
   5   6   7   8
   9  10  11  12

octave:50> fliplr(A)
ans =

   4   3   2   1
   8   7   6   5
  12  11  10   9
  • flipud(A) 返回矩陣 A 的副本,其中行的順序反轉,例如,
octave:51> flipud(A)
ans =

   9  10  11  12
   5   6   7   8
   1   2   3   4
  • rot90(A, n) 返回矩陣 A 的副本,該副本已逆時針旋轉 (90n)°。第二個引數 是可選的,預設值為 1,可以為負值。
octave:52> rot90(A)
ans =

   4   8  12
   3   7  11
   2   6  10
   1   5   9
  • reshape(A, m, n) 建立一個 矩陣,其元素取自 AA 中的元素數量必須等於 。元素從 A 中按列優先順序獲取,這意味著第一列中的值()首先被讀取,然後是第二列(),等等。
octave:53> reshape(A, 2, 6)
ans =

   1   9   6   3  11   8
   5   2  10   7   4  12
  • sort(x) 返回向量 x 的副本,其中元素按升序排序。
octave:54> x = rand(1, 6)
x =

  0.25500  0.33525  0.26586  0.92658  0.68799  0.69682

octave:55> sort(x)
ans =

  0.25500  0.26586  0.33525  0.68799  0.69682  0.92658

線性代數

[編輯 | 編輯原始碼]

有關更多可用於操作向量和矩陣、查詢特徵值等的運算子和函式的描述,請參見 線性代數 部分。


返回 Octave 程式設計教程索引

華夏公益教科書