java 矩阵求秩_线性代数精华3——矩阵的初等变换与矩阵的秩

article/2025/8/5 1:52:59

74a370e0ebea03f665ccfaa245e7eaf3.png

矩阵的初等变换这个概念可能在很多人听来有些陌生,但其实我们早在初中的解多元方程组的时候就用过它。只不过在课本当中,这种方法叫做消元法。我们先来看一个课本里的例子:

d31d907b96f8969efd57db5deaf8ae4e.png

假设我们要解这个方程,怎么做呢?

首先,我们把(1)式加到(2)式,把(4)式加到(3)式,把(1)式乘6加到(4)式可以得到:

72f88647f6676758981a1655805b8f4f.png

我们再把(4)式减去(2)式乘5,可以解出x4=−3:

937e74e3b36807a3eb12c7aa4733ce15.png

我们把x4=−3带入,可以解出

43fa105c8f50e5766facae364ee5b9a9.png

ef4d5348f240ef9e5081a3ed4976c1d2.png

因为消元之后,方程组的数量少于变量的数量,我们无法解出所有的变量。其中的可以取任何值。

上面这个计算的方法我们都非常熟悉,如果我们用一个矩阵来表示所有的次数,那么这个矩阵D可以写成:

那么,我们刚才消元的过程,其实就是对这个矩阵做初等变换。我们把这个过程总结一下,矩阵的初等变换操作包含以下三种:

对调两行

以数k,k≠0乘上某行的所有元素

以数k,k≠0乘上某行所有元素并加到另一行

以上的三种都是针对行为单位的,因此上面的三种变换也称为“行变换”。同样我们也可以对列做如上的三种操作,称为“列变换”。行变换和列变换结合就是矩阵的初等变换。

同样,我们可以对D这个矩阵使用刚才我们上述的初等变换操作,将它变成如下这个结果:

它就对应方程组:

4abbd4d245a12632a9af4ba547b36954.png

Dt矩阵是经过初等行变换的结果,我们还可以再对它进行列变换,将它变得更简单,我们只要交换第三和第三列,之后就可以通过初等列变换把第五列消除,之后它就变成了下面这个样子:

8bab22b3450c7b4490c57ea015be2f36.png

我们用数据归纳法可以很容易证明,所有的m*n的矩阵经过一系列初等变换,都可以变成如下的形式:

937926649c406f884cc18bfa40fe3879.png

r就是最简矩阵当中非零行的行数,它也被称为矩阵的秩。我们把A矩阵的秩记作: R(A)

之前我们在介绍行列式的时候说过,行列式还存在多种性质。其中之一就是一个矩阵经过初等变换,它的行列式保持不变。我们又知道,如果行列式当中存在某一行或者某一列全部为0,那么它的行列式为0。

所以,我们可以得到,对于n阶矩阵A而言,如果它的秩R(A)

再根据我们前文当中有关可逆矩阵的定义,可以得到,可逆矩阵的秩就等于矩阵的阶数,不可逆矩阵的秩小于矩阵的阶数。所以,可逆矩阵又称为满秩矩阵,不可逆矩阵(奇异矩阵)又称为降秩矩阵。

之前我们在复习行列式以及逆矩阵的时候,总觉得少了些什么,现在有了矩阵的秩的概念之后,这些知识就能串起来了。

代码计算

同样,numpy当中也继承了计算矩阵秩的工具。我们可以很轻松的用一行代码算出矩阵的秩,这样我们在判断矩阵是否可逆的时候,就不需要通过行列式来判断了。因为矩阵秩的计算要比行列式的计算快得多。

import numpy as npnp.linalg.matrix_rank(a)

有了矩阵秩的概念之后,我们后续的很多内容介绍起来都方便了许多,它也是矩阵领域当中非常重要的概念之一。

线性方程组的解

我们理解了矩阵的秩的概念之后,我们现学现用,看看它在线性方程组上的应用。

我们之前在介绍行列式的时候,曾经介绍过n元n个等式的方程组的解,可以用行列式表示。但是现实当中我们遇见的方程组并不一定是n元n等式的,我们推广到一般的情况来看。假设当下有一个n元m个等式的方程组:

3b295ee0ce9c47db8e596b01c512c01b.png

我们可以将它写成矩阵相乘的形式:

754930ed28dbb8f807c5ae7f885ea91f.png

3fc6a3c4c771c5dd54f26aad5be71d89.png

我们利用系数矩阵A和增广矩阵B=(A,b)的秩,可以和方便地看出线性方程组是否有解。我们先来看结论:

当R(A) < R(B)时无解

当R(A) = R(B) = n时,有唯一解

当R(A) = R(B) < n时,有无数解

证明的过程也很简单,主要就是利用矩阵秩和最简矩阵的定义。

我们假设R(A)=r,并将B矩阵化简成最简形式,假设得到的结果是:

5a472e9430af798f8d34088ab4066a55.png

(1)显然,当R(A) < R(B)时,那么矩阵中的,那么第r + 1行对应的方程0 = 1矛盾,所以方程无解。

(2)如果R(A) = R(B) = r = n,那么矩阵中的,并且都不出现,所以我们可以直接写出方程组的解:

f919eb42814c968f1ebec3f1da7cd0ca.png

此时,方程组有唯一解

(3)如果R(A) = R(B) = r < n,则B中的

dbb58e3388c0d1d4a0211a22e210b3c2.png,我们写出对应的解:

a7ca8a8c4b2ec3cfc96c14fe62941dfb.png

c61683ae33e503a84ef410c6799ff407.png

由于参数

0c59963a0f07e996d39b9ea263f40411.png可以取任意值,所以方程有无数解。上面写出的解的形式即是线性方程组的通解。

齐次线性方程组

如果我们将上面的线性方程组的常数项都置为0,就称为齐次线性方程组,如下:

64ee834facbec5b06c444dc25ec88dfd.png

齐次方程组最大的特点就是当

fc5e9cdf5a259f4e1f8b5a63ed4b2f50.png时一定有解,称为方程组的零解。我们还通过增广矩阵来判断,写出来其实还是刚才一样的形式:

406bbc028b210e2c12fb2bfb6143eae4.png

和非齐次线性方程组不同的是,我们可以断定

dbb58e3388c0d1d4a0211a22e210b3c2.png,如此一来就不存在无解的情况。这个时候我们要判断的就是方程组是否存在非零解,我们一样通过矩阵的秩来判断,判断的条件也很简单,如果R(A) = n,则不存在非零解,如果R(A) < n,则存在无数组非零解。我们先写出R(A) = n的情况,这时候的矩阵Bf为:

0159d23b1f2f2d679313b42f585724d2.png

也就是说:

ace1938fead8097782d6d7f4801bbd89.png

583672a9f0deffd591484a113492c4c0.png

当R(A) < n时方程组和非齐次方程组类似,唯一不同的是可以确定

11709f101ee29f6c364ed45193728975.png,我们直接带入之前的通项公式,可以得到:

d9611db585c74f92a966abff9d72daa0.png

线性方程组的解的公式和计算本身其实并不重要。因为在实际的算法领域,用到的也不多。但是理解线性方程组对于理解后面的向量以及线性空间非常有帮助,文中的公式看着恐怖,但冷静下来真的去试着理解一下,会发现也就那么回事。


http://chatgpt.dhexx.cn/article/B2jBKt3F.shtml

相关文章

矩阵秩的定义和相关结论汇总

秩的定义&#xff1a;对于矩阵&#xff0c;以下陈述为真。&#xff08;如果&#xff0c;则用共轭转置替换下述转置&#xff09; rank(A)矩阵A经过行初等变换&#xff0c;所得行阶梯形矩阵的非零行数rank(A)矩阵A经过行初等变换&#xff0c;所得行阶梯形矩阵的主元数rank(A)矩阵…

秩为1的矩阵的性质总结

网上东拼西凑找到的&#xff0c;只能用手抄下来&#xff0c;方便自己复习看&#x1f440;。有什么不对的还希望大家指出&#xff01;

秩一矩阵的优良性质

前言&#xff1a;仅个人小记 秩一矩阵非常漂亮的五个性质&#xff1a; &#xff08;1&#xff09;秩一矩阵一定能够拆解为两个列向量 a ⃗ \vec{a} a &#xff0c; b ⃗ \vec{b} b 矩阵乘积的形式&#xff0c;具体为 A a ⃗ b ⃗ T A\vec{a}{\vec{b}}^{T} Aa b T这种形式 &…

伴随矩阵秩的证明

伴随矩阵是引出n阶矩阵逆计算的一个重要矩阵工具&#xff0c;课本中关于伴随矩阵的涉及的讲解并不多&#xff0c;本文将从一下方面讲解&#xff1a; 基础重要计算公式&#xff08;引入逆的求解&#xff09;&#xff1b;通过和逆的关系求解伴随矩阵以及证明相关运算律&#xff…

使用 Amazon Amplify快速创建简单的 Android 应用程序

背景&#xff1a; 亚马逊云科技提供了100余种产品免费套餐。其中&#xff0c;计算资源Amazon EC2首年12个月免费&#xff0c;750小时/月&#xff1b;存储资源 Amazon S3 首年12个月免费&#xff0c;5GB标准存储容量。 大家好&#xff0c;我是坚果&#xff0c;由于最近一直疫情…

基于Android的个人时间管理设计与开发

选题依据&#xff08;包括目的、意义、国内外现状和发展趋势&#xff0c;主要参考文献&#xff09;&#xff1a; 课题的意义随着科学技术高速发展&#xff0c;手机普遍率越来越高&#xff0c;大学生甚至小学生几乎人人拥有一台智能手机&#xff0c;移动端应用发展也越来越快&am…

基于Android平台的酒店预订管理系统软件设计的论文

基于Android平台的酒店预订管理系统软件设计 摘要 随着智能手机的快速普及&#xff0c;智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务&#xff0c;一种高效的办法就是将应用系统的功能拓展到手机终端上&#xff0c;让手机能够通过移动网…

Android Studio项目结构详解

Android Studio 是谷歌推出的一个Android集成开发工具&#xff0c;基于IntelliJ IDEA. 类似 Eclipse ADT&#xff0c;Android Studio 提供了集成的 Android 开发工具用于开发和调试。 在IDEA的基础上&#xff0c;Android Studio 提供&#xff1a; 1.基于Gradle的构建支持。2.An…

基于Android公交查询系统的设计与实现(论文+程序设计源码+数据库文件)

【摘 要】随着互联网的技术的不断更新发展&#xff0c;人们生活节奏也在不断的加快&#xff0c;对于网络的依赖也越来越紧密&#xff0c;尤其是在等公交&#xff0c;经常会错过班次&#xff0c;但又不知道&#xff0c;下次班次几点发车&#xff0c;这样会导致乘客花掉大把时间在…

Android应用程序开发习题答案

第一章、Android 简介 1.简述各种手机操作系统的特点。 目前&#xff0c;手机上的操作系统主要包括以下几种&#xff0c;分别是Android、iOS、Windows Mobile、Windows Phone 7、Symbian、黑莓、PalmOS和Linux。 &#xff08;1&#xff09;Android是谷歌发布的基于Linux的开源手…

基于安卓的个人理财记账app(android毕业设计)

个人理财管理系统是基于Android系统开发的一款手机应用程序。它主要是为了满足人们在快节奏的生活中可以随时记下自己的收支情况的需求。个人理财管理系统与传统的记账方式相比&#xff0c;体现了它的便捷性、安全性及可扩展性。系统采用Eclipse Android Developer Tools作为开…

Android Studio实现外卖订餐系统

项目目录 一、项目概述二、使用技术三、开发环境四、详细设计4.1 工程结构4.2 数据库设计4.3 首页4.4 购物车4.5 我的4.6 滑动菜单 五、运行演示六、项目总结七、源码获取 一、项目概述 随着人们生活节奏的加快&#xff0c;生活质量的普遍提高&#xff0c;足不出户享受美食的需…

Android程序的目录结构

Android程序的目录结构 Android的项目的目录结构&#xff0c;在开始设计程序时&#xff0c;可能感觉不到有多大的用处&#xff0c; 但是随着开发的深入&#xff0c;会涉及到各种类型的文件&#xff0c;项目的目录结构就非常重要了&#xff0c; 你不能把文件乱放&#xff0c…

Android App 架构设计

简介 本文是对谷歌原生文档的翻译&#xff0c;仅供学习参照。 原文链接 此文档写给希望学习最优编程实践和架构以开发健壮、高质量APP的开发者。 开发者常遇到的问题 传统的桌面程序大多数使用场景是有一个启动入口&#xff0c;作为一个独立进程运行。Android app结构要复…

Android 程序框架设计

这篇文章主要内容来自于之前我讲的一个PPT文档&#xff0c;现在将其整理如下。欢迎指正。以下的内容都是来自于我自身的经验&#xff0c;欢迎大家多提自己的建议。 1、一些概念 模式的定义&#xff1a; 每个模式都描述了一个在我们的环境中不断出现的问题&#xff0c;然后描述…

3、Android项目结构分析

Android项目结构分析 文章目录 Android项目结构分析一、文件系统结构1、项目配置清单文件夹 manifests2、源程序文件夹Java3、资源程序文件夹res①布局文件夹res/layout②值文件夹res/values③软件设计的国际化④图像文件夹res/drawable⑤声音文件夹res/raw 二、创建多模块三、…

Android | 序列化Serializable/Parcelable 使用总结

本文已同步发表于我的微信公众号&#xff0c;搜索 代码说 即可关注&#xff0c;欢迎与我沟通交流。 文章目录 一、什么是序列化&#xff1f;为什么要序列化&#xff1f;怎么进行序列化&#xff1f;二、Serializable2.1 序列化举例2.2 重写readObject、writeObject、readResolve…

Android应用程序设计——入门配置

第一章:Android简介与项目部署 版权声明: 本文为博主学习整理原创文章,如有不正之处请多多指教。 未经博主允许不得转载。https://mp.csdn.net/postedit/81837814 Android由来Android又称“机器人”,版权归google公司所有。是Google于2007年11月5日宣布的基于Linux平台的…

Android程序设计基础 • 【第1章 Android程序入门】

全部章节 >>>> 本章目录 1.1 Android 平台介绍 1.1.1 Android 简介 1.1.2 Android 平台的发展 1.1.3 Android 平台架构 1.2 搭建 Android 开发环境 1.2.1 下载和配置 Android Studio 1.2.2 初始化配置 Android Studio 1.2.3 配置和使用 Genymotion 模拟器…

Android自动化的一般方法

1 背景 https://mp.weixin.qq.com/s/B7o3JSkYI_9c4RivatsZKQ Android自动化包含自动化测试和第三方App的自动化运行&#xff0c;这里的自动化测试主要指的是纯粹的黑盒测试&#xff0c;即在完全不了解代码逻辑的情况下编写的测试用例&#xff0c;可以代替人工完成重复性的工…