MATLAB矩阵操作从入门到精通:创建、运算与实用技巧全解析
你有没有过这样的经历?打开MATLAB想做个简单的数据分析,结果对着空白的命令行发呆,不知道怎么开始处理那些密密麻麻的数字?别担心,今天咱们就来好好聊聊MATLAB里最核心、最常用的东西——矩阵!不管你是刚接触MATLAB的小白,还是想巩固基础的技术学习者,这篇文章都能帮你快速上手矩阵操作,避开那些容易踩的坑!
一、什么是MATLAB矩阵?
其实MATLAB这个名字本身就和矩阵有关——MATrix LABoratory(矩阵实验室)嘛!所以矩阵可以说是MATLAB的灵魂。简单来说,矩阵就是一个由数字组成的二维表格,有行和列。比如一个3行3列的矩阵,就像Excel里的3行3列单元格,每个单元格里都有一个数字(或者变量、表达式)。
举个例子,下面这个就是一个典型的MATLAB矩阵:
A = [1 2 3; 4 5 6; 7 8 9];
这里用方括号[]包裹,行与行之间用分号;分隔,同一行的元素用空格或者逗号分隔都可以。是不是很简单?
二、创建矩阵的N种姿势
创建矩阵的方法有很多,根据不同的需求选择合适的方法能节省不少时间哦!
1. 直接手动输入
这是最基础的方法,就像上面那个例子一样,直接把元素写在方括号里。适合元素数量不多的情况。比如:
B = [10, 20, 30; 40, 50, 60]; % 2行3列矩阵,逗号分隔元素也可以
2. 用冒号生成序列矩阵
如果你需要生成一个连续的序列,用冒号:就方便多了。比如:
C = 1:5; % 生成1到5的连续整数,结果是[1 2 3 4 5]
D = 0:0.5:2; % 从0开始,步长0.5,到2结束,结果是[0 0.5 1 1.5 2]
(超级重要!冒号生成的是行向量哦!)
3. linspace函数生成均匀分布
如果想生成指定数量的均匀分布的数,linspace函数更合适。比如:
E = linspace(0, pi, 10); % 从0到pi,生成10个均匀分布的数
这个函数的好处是不用自己算步长,直接指定数量就行,对于画图或者数值计算特别有用。
4. 特殊矩阵生成函数
MATLAB提供了很多内置函数来生成常用的特殊矩阵,比如全零、全一、单位矩阵等,这些函数能帮你快速创建大矩阵,不用手动输入啦!
- 全零矩阵:
zeros(m, n)生成m行n列的全零矩阵F = zeros(2,3); % 2行3列全零矩阵 - 全一矩阵:
ones(m, n)生成m行n列的全一矩阵 - 单位矩阵:
eye(n)生成n阶单位矩阵(对角线是1,其余是0的方阵)G = eye(4); % 4阶单位矩阵 - 随机矩阵:
rand(m, n)生成m行n列的均匀分布随机矩阵(元素在0到1之间) - 正态分布随机矩阵:
randn(m, n)生成m行n列的正态分布随机矩阵(均值0,方差1)
这些函数真的超级实用,比如你需要一个100行100列的全零矩阵,总不能手动输入吧?用zeros(100,100)一键搞定!
三、矩阵的基本操作:索引与修改
学会了创建矩阵,接下来就是怎么操作它了。矩阵的索引和修改是最基础也是最常用的操作,一定要掌握哦!
1. 矩阵索引
MATLAB里矩阵的索引是行号在前,列号在后的,这点和我们平时说的“第几列第几行”有点反过来,一定要记住!比如:
A = [1 2 3;4 5 6;7 8 9];
a = A(2,3); % 取第二行第三列的元素,结果是6
b = A(:,1); % 取第一列的所有元素,结果是[1;4;7](列向量)
c = A(3,:); % 取第三行的所有元素,结果是[7 8 9](行向量)
d = A([1,3],:); % 取第一行和第三行的所有元素,结果是[[1 2 3];[7 8 9]]
e = A(5); % 线性索引!MATLAB会把矩阵按列优先展开成一维向量,所以A(5)等于A(2,2)=5
这里要特别注意线性索引,比如A(5)对应的位置是第二行第二列,因为MATLAB是按列来数的:第一列是1、4、7(位置1-3),第二列是2、5、8(位置4-6),第三列是3、6、9(位置7-9)。所以A(5)就是第二列第二行的5,别搞混啦!
如果你想同时获取行列索引,可以用sub2ind和ind2sub函数:
ind = sub2ind(size(A), 2, 3); % 把行列索引转换成线性索引,结果是6
[row, col] = ind2sub(size(A), 5); % 把线性索引转换成行列索引,结果是row=2,col=2
不过对于初学者来说,先把基本的行列索引掌握好就够了。
2. 矩阵修改
修改矩阵元素也很简单,直接用索引赋值就行:
A(2,2) = 10; % 把第二行第二列的元素改成10,现在A变成[[1 2 3];[4 10 6];[7 8 9]]
A(:,2) = [11;12;13]; % 把第二列的所有元素改成11、12、13
A(A > 5) = 0; % 把所有大于5的元素设为0!这个技巧超级实用!
最后那个操作是不是很神奇?MATLAB允许你用逻辑条件来筛选元素,然后一次性修改,省去了循环的麻烦。比如你想把矩阵里所有负数变成0,直接写A(A<0)=0就可以了,效率又高又方便!
四、矩阵运算:加减乘除与点运算
矩阵运算也是MATLAB的强项,不过这里要注意普通运算和点运算的区别,很多初学者都会在这里踩坑!
1. 普通运算(矩阵运算)
- 加减:
A + B、A - B(要求两个矩阵的维度完全相同) - 乘法:
A * B(矩阵乘法,要求A的列数等于B的行数) - 求逆:
inv(A)(要求A是方阵且非奇异,即行列式不为0) - 行列式:
det(A)(仅适用于方阵) - 秩:
rank(A)(矩阵的秩,反映线性无关的行或列的数量)
比如:
A = [1 2;3 4];
B = [5 6;7 8];
C = A + B; % 结果是[[6 8];[10 12]]
D = A * B; % 矩阵乘法,结果是[[19 22];[43 50]]
E = inv(A); % A的逆矩阵,结果是[[-2 1];[1.5 -0.5]]
F = det(A); % A的行列式,结果是-2
G = rank(A); % A的秩是2
2. 点运算(元素级运算)
点运算就是对矩阵的对应元素进行运算,需要两个矩阵的维度完全相同。点运算的符号是在普通运算符号前面加一个点(.),比如:
- 对应元素相乘:
A .* B - 对应元素相除:
A ./ B - 对应元素幂运算:
A .^ 2(每个元素平方)
比如:
A = [1 2;3 4];
B = [5 6;7 8];
H = A .* B; % 对应元素相乘,结果是[[5 12];[21 32]]
I = A ./ B; % 对应元素相除,结果是[[0.2, 0.3333];[0.4286, 0.5]]
J = A .^ 2; % 每个元素平方,结果是[[1 4];[9 16]]
这里再次强调!点运算真的是MATLAB里最容易踩坑的地方之一!比如你想让两个矩阵对应元素相乘,一定要加个点,不然MATLAB会默认做矩阵乘法,结果要么报错要么得到完全不是你想要的东西!我当初第一次用的时候就因为少了个点,折腾了半小时才找到问题所在!
五、实用技巧:拼接、转置与重塑
除了上面的基本操作,还有几个实用技巧你肯定用得上:
1. 矩阵拼接
把两个矩阵拼在一起也是很常见的操作:
- 横向拼接:
[A B](要求两个矩阵的行数相同) - 纵向拼接:
[A; B](要求两个矩阵的列数相同)
比如:
A = [1 2;3 4];
B = [5 6;7 8];
K = [A B]; % 横向拼接,结果是[[1 2 5 6];[3 4 7 8]]
L = [A; B]; % 纵向拼接,结果是[[1 2];[3 4];[5 6];[7 8]]
2. 矩阵转置
矩阵转置就是把行变成列,列变成行,用单引号'表示:
A = [1 2;3 4];
M = A'; % 转置,结果是[[1 3];[2 4]]
不过要注意,如果矩阵里有复数元素,A'会进行共轭转置。如果想进行非共轭转置,用A.'就可以了:
N = [1+2i 3+4i;5+6i 7+8i];
O = N'; % 共轭转置,结果是[[1-2i,5-6i];[3-4i,7-8i]]
P = N.'; % 非共轭转置,结果是[[1+2i,5+6i];[3+4i,7+8i]]
对于实数矩阵来说,A'和A.'的结果是一样的,所以平时用A'就够了。
3. 矩阵重塑
有时候你需要改变矩阵的形状,比如把一个行向量变成列向量,或者把一个3行4列的矩阵变成2行6列的。这时候reshape函数就派上用场了:
A = 1:12; % 行向量[1 2 ... 12]
Q = reshape(A, 3, 4); % 变成3行4列的矩阵
R = reshape(Q, 2, 6); % 变成2行6列的矩阵
S = A'; % 把行向量变成列向量,也可以用reshape(A,12,1)
reshape函数的原则是保持元素的总数不变,所以34=12,26=12,都是可以的。如果元素总数不匹配,MATLAB会报错哦!
六、总结:从入门到精通的秘诀
MATLAB矩阵的操作其实就这些核心内容,但要真正熟练掌握,还是得自己多动手练习。比如你可以随便创建几个矩阵,然后试试上面提到的各种操作,看看结果是不是和你想的一样。比如:
- 创建一个5行5列的随机矩阵,然后把所有大于0.5的元素设为1,小于等于0.5的设为0;
- 计算这个矩阵的秩和行列式(如果是方阵的话);
- 把它转置后再和原矩阵相乘,看看结果是什么。
熟能生巧嘛,多练几次自然就记住啦!另外,MATLAB的帮助文档也是一个很好的资源,如果你忘记了某个函数的用法,直接在命令行里输入help 函数名就能看到详细的说明,比如help inv会告诉你inv函数的用法和注意事项。
最后,希望这篇文章能帮助你快速上手MATLAB矩阵操作,避开那些容易踩的坑。祝大家学习愉快!
浙公网安备 33010602011771号