当前位置: 首页 > news >正文

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)
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)
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 表示沿列方向翻转)
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列的矩阵。

http://www.dtcms.com/a/363048.html

相关文章:

  • 互联网大厂求职面试记:谢飞机的搞笑答辩
  • Linux为什么不是RTOS
  • 对矩阵行化简操作几何含义的理解
  • 集群无法启动CRS-4124: Oracle High Availability Services startup failed
  • TSMC-1987《Convergence Theory for Fuzzy c-Means: Counterexamples and Repairs》
  • uni-app 实现做练习题(每一题从后端接口请求切换动画记录错题)
  • Nginx的反向代理与正向代理及其location的配置说明
  • 久等啦!Tigshop O2O多门店JAVA/PHP版本即将上线!
  • SpringBoot3 + Netty + Vue3 实现消息推送(最新)
  • B树和B+树,聚簇索引和非聚簇索引
  • 云计算学习100天-第44天-部署邮件服务器
  • vscode炒股插件-韭菜盒子AI版
  • 小白H5制作教程!一分钟学会制作企业招聘H5页面
  • Linux 环境配置 muduo 网络库详细步骤
  • WPF 开发必备技巧:TreeView 自动展开全攻略
  • gbase8s之导出mysql导入gbase8s
  • WebSocket STOMP协议服务端给客户端发送ERROR帧
  • 串口服务器技术详解:2025年行业标准与应用指南
  • 大文件稳定上传:Spring Boot + MinIO 断点续传实践
  • DevOps部署与监控
  • WPF中的DataContext以及常见的绑定方式
  • Zynq开发实践(FPGA之流水线和冻结)
  • FPGA入门-分频器
  • 【Python - 基础 - 工具】解决pycharm“No Python interpreter configured for the project”问题
  • 【踩坑随笔】VScode+ESP-IDF头文件标红但能正常运行
  • 广播电视制作领域,什么是SMPTE标准?
  • vscode使用black对python代码进行格式化
  • 2025年了,学C#上位机需要什么条件
  • Day33 网络编程:OSI/TCP/IP模型、协议族与UDP编程
  • 虚拟继承:破解菱形继承之谜