跳转到内容

MATLAB 编程/向量数学

来自维基教科书,开放的书籍,开放的世界


MATLAB 是一种向量编程语言。 最有效地使用 MATLAB 将涉及利用内置的用于操作数据的功能,而不是使用循环等结构。

基础数学

[编辑 | 编辑源代码]

大多数算术运算符将在向量上按预期工作

>> a = [2 43 943 78];
>> 5 * a
ans =
          10         215        4715         390
>> a / 2
ans =
    1.0000   21.5000  471.5000   39.0000
>> 0.2 + a
ans =
    2.2000   43.2000  943.2000   78.2000

同样,所有这些操作都可以对矩阵进行,以获得预期的结果。

大多数 MATLAB 函数,例如 sinlog,将返回与输入维度相同的向量或矩阵。 因此,要计算 0 到 10 之间所有整数的正弦,只需运行

>> sin(0:10)

返回的向量将包含十个值。

按元素运算

[编辑 | 编辑源代码]

诸如脱字符号 (^) 或向量之间的乘法之类的运算符可能无法按预期工作,因为 MATLAB 将向量视为与任何其他矩阵相同,因此执行矩阵幂和矩阵乘法。 所有运算符都可以加上一个 . 前缀,以明确表明应在矩阵的每个元素上执行运算。 例如,要计算 1 到 4 之间所有整数的正弦和余弦函数平方之差,可以使用

>> (sin(1:4) - cos(1:4)).^2
ans =
    0.0907    1.7568    1.2794    0.0106

而不是

>> (sin(1:4) - cos(1:4))^2
??? Error using ==> mpower
Matrix must be square.

这是 MATLAB 尝试使用矩阵乘法对 1x4 向量求平方而产生的结果。

使用 .*./ 允许将矩阵或向量的每个元素除以另一个矩阵或向量的元素。 为此,两个向量必须具有相同的尺寸。

将循环转换为基于向量的数学

[编辑 | 编辑源代码]

由于 MATLAB 是一种向量语言,因此诸如

x = [];
v = [5,2,4,6];
for i=1:4
   x(i) = v(i) * ((i+32)/2 - sin(pi/2*i));
   if(x(i) < 0)
      x(i) = x(i) + 3;
   end
end

可以在 MATLAB 中通过使用向量而不是循环来更高效地完成

i = 1:4;
v = [5,2,4,6];
x = v .* ((i+32)/2 - sin(pi/2*i));
x(x<0) = x(x<0) + 3;

在内部,MATLAB 当然是在循环遍历向量,但它是在比 MATLAB 编程语言中可能的更低的级别。

华夏公益教科书