MATLAB矩阵及其运算(四)矩阵的运算及操作

一、矩阵的运算

MATLAB的运算符分为算术运算符、关系运算符和逻辑运算符三大类别。

1.1 算术运算符

MATLAB的算术运算符如下表:

|-----|------|
| 符号 | 功能 |
| + | 相加 |
| - | 相减 |
| * | 矩阵相乘 |
| .* | 数组相乘 |
| ^ | 矩阵乘方 |
| .^ | 数组乘方 |
| / | 左除 |
| \ | 右除 |
| ./ | 数组左除 |
| .\ | 数组右除 |

需注意的是,乘法、除法的对象为矩阵时,表示矩阵的乘除,而.*和./表示数组中对应元素的乘和除。

例:矩阵的乘法运算。

另外,左除、右除代表的含义也不同。

(1)对象为标量的时候,被除数的位置不同。

例:标量的左除和右除。

左除运算:

右除运算:

右除的分母在右边,左除的分母在左边。

(2)对象为矩阵的时候,代表的含义不同。

例:矩阵的左除和右除。

矩阵的左除是以左边的矩阵为除数,右除是以右边的矩阵为除数,因此得到的结果不一样。

1.2 关系运算符

MATLAB提供了6种关系运算符,其结果返回值为1或者0,分别表示运算关系是否成立。关系运算符如下表:

|-----|------|
| 运算符 | 功能 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| == | 等于 |
| ~= | 不等于 |

关系运算符通常用于程序的流程控制,常与if,while,for,switch等控制命令一起使用。

例:设矩阵A=4 3 -5,B=4 5 -8,比较两者的大小。

1.3 逻辑运算符

MATLAB提供了4种逻辑运算符,其结果返回值为1或0,表示一个逻辑量,即"真"或"假"。逻辑运算符如下表:

|-----|----|
| 运算符 | 功能 |
| & | 与 |
| | | 或 |
| ~ | 非 |
| xor | 异或 |

例:设矩阵a=1 3 9 - 8 5 6,判断矩阵a中大于3且小于7的元素。

二、矩阵的其他运算符

MATLAB的矩阵运算符非常丰富,能够满足各种运算需求,矩阵的其他运算符见下表:

|----------------|-----------------------|
| 符号 | 功能 |
| A' | 转置 |
| reshape(A,n,m) | 重新排列,保证重构后的新矩阵的元素与A一致 |
| rank(A) | 求秩 |
| det(A) | 矩阵行列式 |
| inv(A) | 矩阵求逆 |

2.1 转置

转置是将矩阵的行转成列,列转成行。

例:将矩阵转置。

2.2 重新排列

重新排列后的新矩阵,必须保证重构后的新矩阵的元素与A一致,两者行、列、维数相等。

2.3 求秩

在线性代数中,一个矩阵A的列秩是A的线性独立(线性不相关)的纵列的极大数目。类似地,行秩是A的线性无关的横行的极大数目。也就是说,如果把矩阵看成是一个个行向量或者列向量,秩就是这些行向量或者列向量的秩,也就是极大无关组中所含向量的个数。

例:求矩阵的秩。

矩阵A为满秩矩阵(秩等于矩阵的行数(或列数,因为它是方阵)。

因为矩阵B中,第一行与第二行线性相关,故矩阵B的秩为2。

不满秩矩阵被称为奇异矩阵,其行列式一定等于0。

矩阵的秩是矩阵中线性无关的行(或列)向量的最大数量,计算方法主要有以下几种,适用于不同场景:

方法 1:通过行最简形(行阶梯形)计算

这是最常用的方法,步骤如下:

  1. 初等行变换 :对矩阵进行初等行变换(交换两行、某行乘非零常数、某行加另一行的倍数),将矩阵化为行阶梯形矩阵(Row Echelon Form)。
  2. 数非零行 :行阶梯形矩阵中非零行的数量即为矩阵的秩。

方法 2:通过行列式判断(仅适用于方阵)

对于n×n的方阵:

  1. 行列式不为 0,则矩阵满秩(秩 = n)。
  2. 行列式为 0,则秩 < n,需进一步判断(例如计算其 n-1阶子式是否非零,直至找到最高阶非零子式)。

示例: 3 阶矩阵 A 的行列式 det(A)不等于 0→ 秩为 3;

3 阶矩阵 B 的行列式 det(B) = 0,且存在 2 阶子式非零 → 秩为 2。

方法 3:通过向量组的线性相关性

  1. 把矩阵的行(或列)视为向量,构成行(或列)向量组。
  2. 求该向量组中线性无关向量的最大个数,即为矩阵的秩。

方法 4:用软件计算(实际应用中)

在 MATLAB、Python 等工具中,可直接调用函数:

  • MATLAB:rank(A)
  • Python(NumPy):np.linalg.matrix_rank(A)
python 复制代码
import numpy as np
A = np.array([[1,3,8], [2,4,6], [7,8,9]])
print(np.linalg.matrix_rank(A))  # 输出3

关键结论

  • 矩阵的秩 = 行秩 = 列秩(行秩与列秩相等)。
  • 秩的范围:\(0 \leq \text{秩}(A) \leq \min(\text{行数}, \text{列数})\)。
  • 初等变换不改变矩阵的秩(这是行阶梯形方法的理论基础)。

实际计算时,行阶梯形方法是最直观且通用的选择,尤其适合手动计算;软件工具则适合处理高阶矩阵。

2.4 矩阵行列式

行列式的计算方法根据矩阵阶数的不同而有所区别,以下是几种常用的计算方法,从低阶到高阶逐步介绍:

高阶行列式(n≥4)

高阶行列式计算较复杂,通常结合以下技巧简化:

方法 :初等行变换(化为上三角矩阵)

利用行列式的性质,通过初等行变换将矩阵化为上三角矩阵(主对角线下方元素全为 0),此时行列式等于主对角线元素的乘积。

行列式性质

  • 交换两行,行列式变号;
  • 某行乘常数 k,行列式变为原来的 k 倍;
  • 某行加另一行的倍数,行列式不变。

用软件计算(高效便捷)

在实际应用中,高阶行列式可通过工具快速计算:

  • MATLABdet(A)
  • Python(NumPy)np.linalg.det(A)
Matlab 复制代码
import numpy as np
A = np.array([[1, 2], [3, 4]])
print(np.linalg.det(A))  # 输出 -2.0

总结

  • 低阶行列式(2-3 阶):直接用公式或对角线法则。
  • 高阶行列式:优先通过初等行变换化为上三角矩阵,或按零元素多的行 / 列展开。
  • 实际应用:借助软件工具高效计算,避免手动计算出错。

行列式的核心意义在于判断矩阵是否可逆(行列式非零则可逆),以及求解线性方程组等场景。

矩阵行列式的调用命令是det。

例:求矩阵的行列式。

(1)不满秩的情况。

(2)满秩的情况。

2.5 矩阵求逆

一个矩阵具有逆矩阵,必须满足相应的条件。矩阵的逆矩阵存在的充要条件为:

(1)矩阵为满秩矩阵;

(2)矩阵的行列式不等于零;

(3)矩阵必须为方阵。

例:求矩阵的逆。

假如矩阵为奇异矩阵(不满秩),则其逆矩阵不存在。

例:求矩阵的逆。

2.6 矩阵的翻转与旋转

矩阵的翻转与旋转命令如下表:

|---------|------------|
| 命令 | 功能 |
| fliplr | 矩阵左右翻转 |
| flipud | 矩阵上下翻转 |
| flipdim | 矩阵的第n维翻转 |
| Rot90 | 矩阵逆时针旋转90度 |

flipdim 函数的作用是沿指定维度翻转矩阵,它必须接收两个输入参数

  1. 第一个参数是要翻转的矩阵(如变量 A
  2. 第二个参数是指定的翻转维度(1 表示沿行方向翻转,2 表示沿列方向翻转)
Matlab 复制代码
c = flipdim(A, 1);  % 沿第1维度(行方向)翻转矩阵A
% 或
c = flipdim(A, 2);  % 沿第2维度(列方向)翻转矩阵A

在较新的 MATLAB 版本中,推荐使用更直观的 flip 函数替代 flipdim,用法类似:flip(A, 1)flip(A, 2)

2.7 矩阵的提取与合并

矩阵的提取主要分为两种形式:

一种使用函数提取;另一种使用冒号表达式提取。

函数diag实现矩阵对角元素的提取。

其调用格式如下:

(1)diag(x):

当输入x为矩阵的时候,输出结果为提取主对角线的元素形成的列向量。

当输入x为向量时,输出结果为以x为主对角线的对角矩阵。

(2)diag(x,k):

当输入x为矩阵的时候,输出结果为以x作为第k条对角线形成的列向量。

当输入x为向量的时候,输出结果为以x作为第k条对角线的对角矩阵。

例:矩阵的提取。

提取x中的第一条对角线元素形成向量输出。

例:向量的提取。

2.8 冒号":"的使用

在MATLAB中,冒号表示全部的含义,除了用于形成等差数组,还能用于矩阵元素的提取。

例:冒号功能的使用示例。

已知矩阵

M=1 5 6 ;9 8 7 ;2 90 10

观察以下命令作用的结果。

显示矩阵M第一列的全部元素。

显示矩阵M第2行和第3行的全部元素

显示矩阵M第1行、第2行的第1列元素

显示矩阵M第4个位置的元素。

显示矩阵M第1个到第4个位置的元素

即当矩阵的括号里无逗号的时候,里面的元素表示位置。

M(a):a表示位置,M(3)表示第三个位置的元素。

M(1:5):表示提取第1个到第5个位置对应的元素。

有逗号的时候,逗号之前是行,之后是列,":"表示全部。

M(1,6):表示提取第1行、第6列的元素

M(1:2,:)表示提取第1行、第2行的所有元素。

M(:,2:4:6)表示提取第2,4 6列的所有元素。

M(:,1 3 4)表示提取第1,3,4列的所有元素。

M(:,2 3)= 表示删除第2 ,3列的所有元素。

2.9 矩阵的和并

将小矩阵合并成大矩阵的操作,主要利用分号和逗号表达式来完成。

例:已知A=1 3 ;5 6,B= 7 8,C=100 200 8',将A与B合并成3行2列得到E矩阵,再将E与C合并成3行3列的矩阵。

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai13 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜13 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa13 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio