跳转到内容

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

叉积本身总是垂直于两个初始向量。如果叉积为零,则两个初始向量彼此平行。

华夏公益教科书