MATLAB 向量操作:linspace() 与 zeros()
在 MATLAB 中,向量是最基础的数据结构。无论是数值计算、信号处理还是算法开发,创建指定特性的向量都是第一步。本文介绍两个最常用的向量创建函数——linspace() 和 zeros(),它们看似简单,却是日常编程的高频工具。
linspace():创建等间距数值向量
linspace() 用于生成指定范围内、等距分布的数值序列。当你需要一段连续的数据点时,它是首选函数。
函数语法
v = linspace(start, finish, n)
参数含义:
start:序列起始值(包含)finish:序列结束值(包含)n(可选):元素个数,默认为 100
基础示例
创建 1 到 10 之间含 5 个点的序列:
v = linspace(1, 10, 5)
执行结果:
v =
1.0000 2.2500 3.5000 4.7500 6.0000
使用默认参数(100 个点):
v = linspace(0, pi, 4)
执行结果:
v =
0 1.0472 2.0944 3.1416
典型应用场景
linspace() 的核心用途是生成函数绘图的数据点。例如,绘制 $y = \sin(x)$ 在 $[0, 2\pi]$ 区间内的图像:
x = linspace(0, 2*pi, 200);
y = sin(x);
plot(x, y);
grid on;
参数 200 决定了曲线的平滑程度——点数越多,曲线越流畅。
zeros():创建全零向量
zeros() 用于创建元素全部为零的向量或矩阵。在 MATLAB 中,0 是许多数值计算的初始值,这个函数能让初始化操作一步到位。
函数语法
v = zeros(n, 1) % 创建 n×1 的列向量
v = zeros(1, n) % 创建 1×n 的行向量
v = zeros(n) % 创建 n×n 的方阵
基础示例
创建含 5 个零元素的列向量:
v = zeros(5, 1)
执行结果:
v =
0
0
0
0
0
创建含 3 个零元素的行向量:
v = zeros(1, 3)
执行结果:
v =
0 0 0
典型应用场景
场景一:预分配内存提升代码效率
循环计算中预先分配向量空间,避免 MATLAB 每次循环扩容数组:
n = 1000;
result = zeros(n, 1);
for i = 1:n
result(i) = i^2;
end
场景二:滤波器初始化
数字信号处理中,常用零向量初始化滤波器状态或延迟线:
delayLine = zeros(1, 10); % 10 个采样点的延迟线
函数对比与选用指南
| 特性 | linspace() |
zeros() |
|---|---|---|
| 核心功能 | 创建等间距数值序列 | 创建全零向量 |
| 参数形式 | linspace(起点, 终点, 点数) |
zeros(行数, 列数) |
| 元素值 | 由起点、终点自动计算 | 固定为 0 |
| 典型用途 | 函数绘图、仿真采样 | 内存预分配、初始状态设置 |
选用原则
当你需要一段连续范围的数据点(如绘图、插值、循环边界),选择 linspace()。
当你需要一个已知大小的空容器(用于后续填充计算结果),选择 zeros()。
组合使用示例
在实际项目中,两者常配合使用。以下代码模拟一个衰减振荡信号并计算其包络:
t = linspace(0, 10, 1000); % 时间轴:0~10秒,1000个点
amplitude = exp(-0.5*t); % 衰减包络
signal = amplitude .* sin(2*pi*t); % 衰减振荡信号
envelope = zeros(size(t)); % 预分配包络数组
envelope(1:length(t)) = amplitude; % 填充包络值
进阶技巧
1. 等价替代方案
linspace(a, b, n) 与冒号运算符在特定条件下可互相转换:
% 两者结果相同
v1 = linspace(1, 5, 5);
v2 = 1:5;
区别在于:linspace() 能精确控制终点包含,而冒号运算符在涉及浮点数时可能出现精度偏差。
2. 批量创建多个向量
使用 zeros() 批量预分配多个数组:
[dataX, dataY, dataZ] = deal(zeros(100, 1));
deal() 函数将单个 zeros() 输出同时赋给多个变量,代码更简洁。
3. 动态类型适配
zeros() 会根据输入自动推断类型:
zeros(3, 1, 'single') % 单精度浮点型零向量
zeros(3, 1, 'int32') % 32位整型零向量
总结
linspace() 和 zeros() 是 MATLAB 向量操作的基石函数。前者解决范围采样问题,后者解决空间预分配问题。掌握它们的语法与适用场景,能显著提升代码的可读性与执行效率。

暂无评论,快来抢沙发吧!