跳转到内容

MATLAB 编程/数组/基本向量运算

来自维基教科书,开放世界中的开放书籍
(重定向自 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

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

华夏公益教科书