第2章 MATLAB基础操作:变量与数据类型、矩阵与数组、运算符、常用数学函数
各位同学,欢迎来到MATLAB的世界。说实话,我刚开始接触MATLAB时,觉得它就是个高级计算器。但干了几年的仿真项目后,我越来越觉得——基础操作决定了你的上限。这一章,咱们就把MATLAB的“地基”打牢。
2.1 变量与数据类型——别小看这个“容器”
变量是什么?说白了,就是给数据贴个标签。你给它起个名字,它帮你存着值。
核心要点:MATLAB中变量不需要提前声明类型。你直接写 a = 5,它就自动认成double类型。
我个人习惯用有意义的变量名,比如 speed_ms 而不是 s。为什么?因为三个月后你自己回来看代码,大概率会忘记 s 是速度还是位移。
常见数据类型一览
| 数据类型 | 说明 | 示例 |
|---|---|---|
| double | 双精度浮点数(默认) | x = 3.14 |
| single | 单精度浮点数 | y = single(3.14) |
| int8 / int16 / int32 | 有符号整数 | z = int8(127) |
| uint8 / uint16 / uint32 | 无符号整数 | w = uint8(255) |
| char | 字符(用单引号) | c = 'Hello' |
| logical | 逻辑值(true/false) | flag = true |
我曾经踩过的坑:用 uint8 存图像数据时,不小心做了减法运算,结果像素值直接溢出变成0。嗯,那天的图像全黑了。所以——做运算前,先确认数据类型。
2.2 矩阵与数组——MATLAB的灵魂
你想想看,MATLAB的全称就是 Matrix Laboratory。矩阵操作是它的看家本领。别的语言用循环处理数组,MATLAB用一行搞定。
创建矩阵的几种方式
% 直接输入
A = [1, 2, 3; 4, 5, 6; 7, 8, 9]
% 冒号表达式
B = 1:2:10 % 从1到10,步长为2
% 全零矩阵
C = zeros(3, 4)
% 全一矩阵
D = ones(2, 5)
% 单位矩阵
E = eye(4)
% 随机矩阵
F = rand(3, 3) % 均匀分布
G = randn(3, 3) % 正态分布
我在项目中遇到过一个问题:需要生成一个1000×1000的矩阵,用循环赋值,结果跑了半天没出来。后来改成向量化操作,0.1秒搞定。所以——能用矩阵运算,就别用循环。
矩阵索引与切片
M = [10, 20, 30; 40, 50, 60; 70, 80, 90];
% 取单个元素
M(2, 3) % 第2行第3列 → 60
% 取整行
M(1, :) % 第1行所有列
% 取整列
M(:, 2) % 第2列所有行
% 取子矩阵
M(1:2, 2:3) % 第1-2行,第2-3列
小技巧:MATLAB索引从1开始,不是0。我刚从C语言转过来时,因为这个习惯吃了不少亏。你写 M(0) 会直接报错。
2.3 运算符——别搞混了点乘和乘
运算符这块,我建议你重点关注点运算。这是MATLAB特有的,也是初学者最容易翻车的地方。
算术运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
+ - |
加减法 | A + B |
* |
矩阵乘法 | A * B |
.* |
对应元素相乘 | A .* B |
^ |
矩阵乘方 | A ^ 2 |
.^ |
对应元素乘方 | A .^ 2 |
/ |
右除 | A / B |
./ |
对应元素右除 | A ./ B |
' |
转置 | A' |
注意:如果你想让两个矩阵的对应元素相乘,一定要用 .*。用 * 的话,MATLAB会按矩阵乘法规则算,维度不匹配就直接报错。我曾经在仿真一个控制系统时,就因为少写了一个点,结果整个系统的响应曲线完全不对。
关系与逻辑运算符
% 关系运算符:> < >= <= == ~=
a = [1, 5, 3];
b = [2, 5, 1];
a > b % 返回 [0, 0, 1]
a == b % 返回 [0, 1, 0]
% 逻辑运算符:& | ~
(a > 2) & (a < 6) % 返回 [0, 1, 0]
~(a == 5) % 返回 [1, 0, 1]
2.4 常用数学函数——工具箱里的好帮手
MATLAB内置的数学函数非常丰富。你不需要自己写sin、cos这些基础函数,直接调用就行。我建议你记住以下几类常用的:
基本初等函数
% 三角函数
sin(pi/2) % 1
cos(0) % 1
tan(pi/4) % 1
% 指数与对数
exp(1) % 2.7183
log(10) % 自然对数
log10(100) % 以10为底的对数 → 2
% 取整函数
floor(3.7) % 向下取整 → 3
ceil(3.2) % 向上取整 → 4
round(3.5) % 四舍五入 → 4
fix(3.7) % 向零取整 → 3
统计与矩阵函数
data = [3, 7, 2, 9, 5];
max(data) % 最大值 → 9
min(data) % 最小值 → 2
mean(data) % 平均值 → 5.2
median(data) % 中位数 → 5
sum(data) % 总和 → 26
std(data) % 标准差
var(data) % 方差
% 矩阵专用
M = [1, 2; 3, 4];
det(M) % 行列式
inv(M) % 逆矩阵
eig(M) % 特征值
size(M) % 矩阵尺寸 → [2, 2]
length(M) % 最大维度长度 → 2
我的习惯:处理数据前,先用 size() 和 class() 看一眼数据的维度和类型。这能帮你避免很多莫名其妙的错误。
知识体系总览
下面这张图,是我自己梳理的本章知识结构。你可以把它当作一个“地图”,学完后再回来看,会更有感觉。
好了,这一章的内容就是这些。变量、矩阵、运算符、函数——这四个东西你玩熟了,后面学Simulink建模会轻松很多。记住:基础不牢,地动山摇。别急着往后赶,先把这些代码敲一遍,感受一下MATLAB的“脾气”。
公众号:蓝海资料掘金营,微信deep3321