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

Python 将矩阵转换为行最简形式 (Row Echelon Form, REF)和列最简形式 (Column Echelon Form, CEF)

Python 将矩阵转换为行最简形式 (Row Echelon Form, REF)和列最简形式 (Column Echelon Form, CEF)

flyfish

通俗理解矩阵的秩
通俗理解低秩分解
一个矩阵的行数和列数可能不同,为什么它的行秩和列秩始终相同

主元 (Pivot Element)
主元 (pivot) 是行最简形式或列最简形式中的每一行(或列)的第一个非零元素。在行最简形式中,主元是每一行从左到右遇到的第一个非零数;在列最简形式中,主元是每一列从上到下遇到的第一个非零数。

主元的作用:
在行最简形式 (REF) 中,主元用来确定矩阵的阶梯形排列,并且主元所在的列是用来消去其他行的关键元素。
在列最简形式 (CEF) 中,主元同样用来确定列的阶梯形排列。

主元归一化为 1 之后,后续的行变换(例如消去主元所在列的其他元素)会变得更简单。
归一化后的矩阵会显得更加整洁,并且在数学计算(如求解线性方程组)时,得到的结果更直观。RREF 是唯一的形式(与 REF 不同,REF 不是唯一的),这意味着一个矩阵的 RREF 形式是唯一的,可以用来判断线性系统的唯一性和解的形式。

当要求主元为 1 时,矩阵的行最简形式 (Row Echelon Form, REF) 和列最简形式 (Column Echelon Form, CEF) 会遵循更加严格的规范。主元为 1 的情况实际上是简化的行阶梯形矩阵 (Reduced Row Echelon Form, RREF)和简化的列阶梯形矩阵 (Reduced Column Echelon Form, RCEF)。

行最简形式 (Row Echelon Form, REF) 且主元为 1

行最简形式是通过初等行变换将矩阵转换为一种阶梯形。要求主元为 1 使得它接近于简化行阶梯形矩阵 (RREF),但在 REF 中,我们不要求主元所在列的其他元素都为 0。具体要求如下:

每一行的第一个非零元素是 1(即主元为 1)。
每一行的主元比上一行的主元在更靠右的位置。
如果矩阵中有零行(全为 0 的行),这些零行必须在矩阵的最下方。

举例:

考虑矩阵 A = [ 2 4 6 1 3 5 0 1 2 ] A = \begin{bmatrix} 2 & 4 & 6 \\ 1 & 3 & 5 \\ 0 & 1 & 2 \end{bmatrix} A= 210431652 ,通过初等行变换,我们可以将其转化为行最简形式,且主元为 1: A → 初等行变换 [ 1 0 − 1 0 1 2 0 0 0 ] A \xrightarrow{\text{初等行变换}} \begin{bmatrix} 1 & 0 & -1 \\ 0 & 1 & 2 \\ 0 & 0 & 0 \end{bmatrix} A初等行变换 100010120

这是一个行最简形式矩阵,且每一行的主元都为 1。

特点:

第一行的主元是 1,位于第一列。
第二行的主元是 1,位于第二列。
第三行是零行。

列最简形式 (Column Echelon Form, CEF) 且主元为 1

列最简形式是通过初等列变换将矩阵转换为一种阶梯形,要求主元为 1。列最简形式的特点类似于行最简形式,只是它针对列进行操作。具体要求如下:
每一列的第一个非零元素是 1(即主元为 1)。
每一列的主元比上一列的主元在更靠下的位置。
如果矩阵中有零列(全为 0 的列),这些零列必须在矩阵的最右侧。

举例:

考虑矩阵 A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} A= 135246 ,我们可以通过初等列变换将其转化为列最简形式,且主元为 1:

  1. 交换第一列和第二列,使得主元出现在第一列的第一行中:
    A = [ 2 1 4 3 6 5 ] A = \begin{bmatrix} 2 & 1 \\ 4 & 3 \\ 6 & 5 \end{bmatrix} A= 246135

  2. 将第一列的第一个元素 2 变为 1,即: R 1 = 1 2 R 1 = [ 1 0.5 4 3 6 5 ] R_1 = \frac{1}{2} R_1 = \begin{bmatrix} 1 & 0.5 \\ 4 & 3 \\ 6 & 5 \end{bmatrix} R1=21R1= 1460.535

  3. 使用主元消去第一列其他行的元素:
    R 2 = R 2 − 4 × R 1 = [ 0 1 1 0 − 1 2 ] R_2 = R_2 - 4 \times R_1 = \begin{bmatrix} 0 & 1 \\ 1 & 0 \\ -1 & 2 \end{bmatrix} R2=R24×R1= 011102

最终的列最简形式为:
[ 1 0 0 1 − 1 2 ] \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ -1 & 2 \end{bmatrix} 101012

特点:

第一列的主元是 1,位于第一行。
第二列的主元是 1,位于第二行。
第三行的元素依然存在,但不影响列最简形式。

import sympy as sp# 定义矩阵
A = sp.Matrix([[1, 2], [3,4], [5,6]])# 计算行最简形式
rref_matrix, pivot_columns = A.rref()print("行最简形式:")
print(rref_matrix)
print("主元列:")
print(pivot_columns)# 转置矩阵,计算行最简形式,再转置回来
cef_matrix, pivot_columns = A.T.rref()
cef_matrix = cef_matrix.Tprint("列最简形式:")
print(cef_matrix)

输出

行最简形式:
Matrix([[1, 0], [0, 1], [0, 0]])
主元列:
(0, 1)
列最简形式:
Matrix([[1, 0], [0, 1], [-1, 2]]

如果换下矩阵

A = sp.Matrix([[2, 4,6], [1,3,5], [0,1,2]])

结果是

行最简形式:
Matrix([[1, 0, -1], [0, 1, 2], [0, 0, 0]])
主元列:
(0, 1)
列最简形式:
Matrix([[1, 0, 0], [0, 1, 0], [-1/2, 1, 0]])

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DB-GPT部署和试用
  • Linux 之父 Linus Torvalds:低调的神话创造者
  • 研究生招生宣传(2024秋)
  • 一步迅速了解Linux
  • 经典sql题(一)求连续登录不少于三天用户
  • 通过JNI创建java对象和访问java属性
  • PostgreSQL配置主从同步
  • 从底层原理上理解ClickHouse 中的稀疏索引
  • python解析ip范围,判断ip是否在ip范围内
  • Codeforces Round 889 (Div. 2) B. Longest Divisors Interval
  • Charles mac电脑配置
  • 区块链之变:揭秘Web3对互联网的改变
  • lvs-nat模式实验详解
  • 服务器数据恢复—Linux操作系统环境下网站数据的恢复案例
  • 【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • java8 Stream Pipelines 浅析
  • KMP算法及优化
  • Laravel5.4 Queues队列学习
  • Linux CTF 逆向入门
  • PHP的类修饰符与访问修饰符
  • python3 使用 asyncio 代替线程
  • ReactNativeweexDeviceOne对比
  • Solarized Scheme
  • ViewService——一种保证客户端与服务端同步的方法
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 基于遗传算法的优化问题求解
  • 数组大概知多少
  • 原生 js 实现移动端 Touch 滑动反弹
  • Java数据解析之JSON
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ‌JavaScript 数据类型转换
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (分布式缓存)Redis分片集群
  • (四)opengl函数加载和错误处理
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)3D模板阴影原理
  • (转)c++ std::pair 与 std::make
  • .net Application的目录
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Framework 3.5安装教程
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET简谈设计模式之(单件模式)
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • []指针
  • [android] 练习PopupWindow实现对话框
  • [Android]How to use FFmpeg to decode Android f...
  • [BZOJ5250][九省联考2018]秘密袭击(DP)