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

c++求矩阵的秩_Matlab:矩阵的秩,简化梯形矩阵和线性方程组

点击上方蓝字关注 无距书乡 获取持续更新

在开始今天的正式内容之前,先补充一个创建矩阵的方法——由向量组合成矩阵。A=[1;2;3],B=A+3,C=B+3,A, B, C 均为列向量,矩阵D由向量A, B,C 构成,D=[A B C],则D是一个3x3的矩阵。示例如下:

35878f86e279a055bcc9095ee4f4b8fc.png

9441a5b1bba615456b36c177066e68c2.png

矩阵的秩

矩阵的秩是矩阵中线性无关的行向量的数目。在matlab中求矩阵的秩用rank()命令,如:求前述矩阵D的秩,通过观察的方法,矩阵的第三行减去第二行后都为1,第二行减去第一行后都为1。此时,矩阵的第二行和第三行都为1,两行线性相关可以消除其中一行,观察可知矩阵的的秩为2,下面用matlab 验证一下。示例如下:

ce476234f94f6b8686e7639010712671.png

下面我们来随机生成一个矩阵E并求rank(E)。示例如下:

768b5b52908ccacb69354d0490756d36.png

矩阵E的秩为5,说明矩阵E的各行均线性无关。

下面我们对矩阵E做一个简单的改造,将矩阵E的第五行换成第一行和第二行的和,此时矩阵E的第五行就可以用第一行和第二行线性表示了,即第五行可以通过行变换化为全零,此时rank(E)应该等于4。在matlab中验证一下:

c455d30be4c896569a4370554766967e.png

简化梯形矩阵

在笔算求矩阵的秩时,通常都会对矩阵做梯形简化,方便观察矩阵的秩,在解线性方程组时也会做这样的简化。matlab中使用rref()命令来获得简化梯形矩阵。示例如下:

7a1f1de840da953c5ed208b83ec19a03.png

通过简化后的梯形矩阵,很容易就能观察到矩阵D的秩为2。

再来看看矩阵E,示例如下:

af5651c01721833b519b480aa00f70c9.png

通过简化后的梯形矩阵,很容易就能观察到矩阵E的秩为4。此处默认将非零行的第一个非零元素化为1,所以后面出现了实数。

线性方程组

有了前面内容的铺垫,现在可以很方便的求解线性方程组的解了,并观察解的性质。给定如下方程组:

b08ae5ca7661c15e38ef360b8dfc961f.png

将方程组的系数矩阵记作M, 等式右边的向量记作b。则:

21baa26c4a63af76e298feab2cf1b8d9.png

看看系数矩阵M的秩:

b5bace54d37df4ebc57ed437ba303845.png

rank(M)=2,满秩,说明方程组有唯一解。通过消元法,可以很容易解得x1=2,x2=5,这个在中学就学习过。

这里从线性代数的角度来求解这个方程组,一是Cramer 法则求解,二是高斯消元法,分述如下:

1. Cramer 法则:

首先计算系数矩阵的行列式detM;再用向量b替换M的第一列,并计算其行列式detM1,则 x1=detM1/detM; 同理,用b替换M的第二列,计算detM2,则 x2=detM2/detM。下面,在matlab中完成上述计算过程并验证结果。

5594f0c72954ab3e8aa4c7bb85063f12.png

45bb48b32c5f2e4cd2082eb79d9cd8ab.png

e0d93119c0c22dfaf49beb773406dcb4.png

如上图所示,x1=2,x2=5,结果与笔算一样。这里举例用了二元方程组,对于变量个数多余2的时候,matlab的简便性就更突出了。

2. 高斯消元法

高斯消元法是将系数矩阵M和列向量b组合在一起,做行变换得到简化梯形矩阵,再求解。仍然用上面的方程组做实验:

令:Mb=[M b]

2959876261629e4abde078bfdb97c0a3.png

经过梯形简化后,方程组变为如下形式:

dfaddce042f0bcfc49c68f7c81f7c5e6.png

一眼就能观察出来,x1=2,x2=5。比高斯消元法还要简单。

再补充一个三元线性方程组:

d76228557d3fbddbb3c7abbe7bb61acd.png

系数矩阵仍记作M,等式右边的向量记作b。

先计算rank(M):

500cd400c6ba7fb629be1895e02fb3aa.png

rank(M)=3,满秩,方程组有唯一解。

先用Cramer 法则求解:

f4f5a1567b755d15ce4d061fcee61cdf.png

计算各个行列式的值:

160bcb12a6a6184d48a0a3b6c9372c46.png

计算x1,x2,x3的值:

a19af13ff58fff43a8522616ca14c659.png

再看看高斯消元法求解:

0f8e290f970a531a257f56dfbaebffed.png

经过梯形简化后,方程组变为如下形式:

fe159361994eaa0f4b7ccbd0006d391b.png

可以很方便的得到 x1=8,x2=15,x3=6。

解线性方程组是科学计算中的一个很重要很基本的部分,除了上面介绍的方法,关于线性方程组的解法还有很多种,后面会陆续介绍。对于那些不是线性的方程组,在经过简化后,也可以化作线性方程组来求解。所以,线性方程组的解法是科学计算的一个基石。

这么简单实用的工具,不来用一下吗!

长按识别二维码关注我

f544f6c65a124baac2f596875ff150ed.png

点个赞,携手共进

回复“ishare”加入社区

http://www.lryc.cn/news/2419692.html

相关文章:

  • 【C语言】:static和extern的详细介绍和使用
  • softcore -- CPU rasterization
  • xp序列号大全可通过正版验证的XP序列号发布
  • SolrIK分词器-简单介绍与安装
  • MouseArea组件和MouseEvent事件在Qt中是经常使用的重要组件和事件。本文将详细介绍MouseArea组件和MouseEvent事件的用法,并提供...
  • TTYL的完整形式是什么?
  • mongo执行命令: not authorized on admin to execute command
  • 【渝粤教育】电大中专电商运营实操12作业 题库
  • nbtscan局域网扫描的原理
  • VS各个版本之间2005、08、10、12...转换
  • NumberFormat类
  • WritePrivateProfileString() 用法
  • 新发的日常小实验——使用IETester测试不同IE版本的浏览器,测试网页JS的兼容性(console未定义兼容测试)
  • cpio命令的常用方法
  • stm32串口反相输出 SP3232输出反相解决办法
  • FindWindowEx 遍历所有窗口
  • AV1编码各种浏览的版本支持
  • 网安概论(三)
  • 85m gamer主板acpi驱动_关于网卡驱动的问题
  • Python实现经典吃豆豆游戏教程:重温童年经典,学习Python游戏开发,附带完整源码
  • Android使用bit.ly的api获取url 短连接
  • 转贴--理解LPCTSTR
  • 什么是UBB
  • 机器学习----决策树分析
  • IDEA官网进不去解决方法
  • 智能终端安全:应用安全技术—移动互联网信息安全解决方案(上)
  • java cloneable 深拷贝_Java中的Cloneable接口与深拷贝、浅拷贝
  • 版本控制系统
  • POSTFIX邮件系统搭建
  • 获取北京标准时间