跳转至内容

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 编程教程索引

华夏公益教科书