3. 变量、数组与矩阵基础
MATLAB 的一切计算几乎都围绕“数组”展开。理解变量如何存储数据、数组如何创建与索引、矩阵运算与数组运算的差别,是后续编写工程计算脚本的前提。本节围绕这些基础概念展开,并通过一个可复现的小例子把知识点串起来。
变量与数据类型
MATLAB 变量无需声明类型,赋值即创建。默认数值类型是双精度浮点 double,这也是工程计算中最常用的类型。常见类型还包括整型(int8~int64、uint8~uint64)、逻辑型 logical、字符型 char、字符串 string 以及元胞 cell、结构体 struct。可用 class(x) 查看类型,用 whos 查看变量名、大小、字节数和类型。
需要特别注意:MATLAB 中几乎所有标量本质上都是 1×1 的矩阵。因此 a = 5 与 A = [5] 在数值上等价,这一特性让标量与数组的运算规则保持统一。类型转换可用 double、int32、logical 等函数完成,例如 logical([1 0 1]) 得到逻辑数组,常用于后续的逻辑索引。
数组创建与索引
创建数组的常用方式有:方括号直接构造([1 2 3] 为行向量,[1;2;3] 为列向量)、冒号运算符生成等差序列(1:2:9 得到 1 3 5 7 9)、以及 linspace(0,1,5) 生成 5 个等分点。矩阵则用分号分行,如 A = [1 2 3; 4 5 6; 7 8 9]。
索引从 1 开始,这是 MATLAB 与 C、Python 的重要区别。对矩阵 A,A(2,3) 取第 2 行第 3 列元素;A(2,:) 取整行;A(:,2) 取整列;A(1:2,2:3) 取子块。此外还有线性索引:MATLAB 按列优先存储,A(4) 对应第 1 列第 4 个元素,即 A(1,2)。理解列优先顺序对后续 find、reshape 等函数非常关键。索引还可用于赋值,如 A(2,2) = 0 直接修改元素,A(:,4) = 10 可扩展出新列。
矩阵运算与数组运算的区别
这是初学者最容易混淆的地方。MATLAB 中 *、/、^ 默认按线性代数规则运算:A*B 要求内维匹配,执行矩阵乘法;A^2 表示 A*A。而数组运算(逐元素运算)需要在运算符前加点:.*、./、.^,要求两数组同尺寸或可广播,对应位置元素逐一运算。
例如对 A = [1 2; 3 4],A^2 得到 [7 10; 15 22],而 A.^2 得到 [1 4; 9 16]。工程中大量公式是逐元素形式,如计算各测点平方和、逐点缩放,此时必须用点运算。判断依据很简单:若公式是“每个元素各自算”,用点运算;若涉及矩阵整体变换(如解线性方程组、坐标旋转),用矩阵运算。
常用生成函数
工程建模中经常需要快速构造特定结构的数组,常用函数包括:zeros(m,n) 生成全零矩阵,ones 生成全一矩阵,eye(n) 生成单位阵,rand(m,n) 生成 0~1 均匀分布随机数,randn 生成标准正态随机数,magic(n) 生成魔方阵(常用于测试)。size 返回各维长度,numel 返回元素总数,length 返回最长维长度。这些函数在预分配内存时尤为重要——循环中不断扩展数组会显著降低效率,提前用 zeros 预分配是良好习惯。
逻辑索引与查找
逻辑索引是 MATLAB 处理数据的利器。比较运算(>、<、==、~=)作用于数组时返回同尺寸逻辑数组。例如 A = [3 8 1 6 9 2],A > 5 得到 [0 0 0 1 1 0],再用 A(A > 5) 即可取出所有大于 5 的元素 [8 6 9]。逻辑数组还能直接用于赋值,如 A(A < 3) = 0 把小于 3 的元素清零。
查找函数 find 返回满足条件的线性索引,[r,c] = find(A > 5) 同时返回行列号,便于定位具体位置。组合条件用 &(与)、|(或)、~(非),注意不要误用 &&、||(它们用于标量短路逻辑)。any、all 可判断是否存在或全部满足条件,isempty 判断是否为空数组。
综合示例:传感器数据处理
假设某实验采集了 6 个测点的温度值(单位 ℃),存为行向量 T = [21.5 25.8 19.2 30.1 27.6 22.3]。要求:找出超过 25 ℃ 的测点编号,计算这些测点温度相对 25 ℃ 的偏差平方和,并把低于 20 ℃ 的读数修正为 20 ℃。
T = [21.5 25.8 19.2 30.1 27.6 22.3];
idx = find(T > 25); % 返回 [2 4 5]
dev = T(idx) - 25; % 偏差 [0.8 5.1 2.6]
ss = sum(dev.^2); % 逐元素平方后求和,约 33.41
T(T < 20) = 20; % 第 3 个测点修正为 20
disp(T) % [21.5 25.8 20 30.1 27.6 22.3]
这段代码集中体现了本节要点:find 定位、逻辑索引取值、点运算逐元素平方、逻辑索引赋值修正。注意 dev.^2 必须用点运算,若写成 dev^2 会因维度不匹配报错。运行后可通过 idx 的长度判断超标测点数量,通过 ss 的数值评估整体偏离程度,通过 T 的变化确认修正是否生效。
whos 观察每一步变量的尺寸与类型变化,尤其是逻辑索引产生的 logical 数组与数值数组的区别,这能帮助建立对 MATLAB 数据模型的直观认识。掌握以上内容后,读者应能独立完成数组的创建、切片、逐元素计算与条件筛选。这些操作是后续函数编写、数据可视化与工程算法实现的基础,建议在练习中反复使用点运算与逻辑索引,形成稳定的编码习惯。