MATLAB编程-简介
完成条件
MATLAB 是一种向量化编程语言
MATLAB 是一种向量化编程语言。高效使用 MATLAB 的关键在于利用其内置的数据操作能力,而不是依赖循环等结构。
基础数学运算(Basic Math)
大多数算术运算符在向量上都能按预期工作:
>> 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 函数(如 sin
或 log
)会返回一个与输入维度相同的向量或矩阵。例如,计算从 0 到 10 的整数的正弦值,只需执行:
>> sin(0:10)
返回的结果将是一个包含 11 个值的向量。
每元素运算(Per Element Operations)
像乘方(^
)或向量乘法等操作,如果直接使用,在 MATLAB 中可能不会按你期望的那样工作,因为 MATLAB 默认将向量视为矩阵,并执行矩阵乘方或矩阵乘法。
要在矩阵或向量的每个元素上执行运算,应在操作符前加点(.
),使其变为逐元素操作符。
例如,计算从 1 到 4 的整数中,(sin - cos)
的平方差:
>> (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 的向量执行矩阵乘方运算,而这在数学上无效。
使用 .*
或 ./
可以实现两个矩阵或向量的逐元素乘法或除法。前提是两个向量的大小必须相同。
将循环转换为向量化计算(Converting Loops to Vector-based Mathematics)
由于 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
可以使用向量化方法重写为:
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 仍然在进行循环,但是在底层的 C 或 Fortran 实现中完成的,远比你在 MATLAB 脚本中写的 for
循环高效得多。
总之,利用 MATLAB 的向量化运算可以极大提升代码效率和可读性,是进行数值计算时推荐的最佳实践。
最后修改: 2025年04月15日 星期二 11:05