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

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.T

print("列最简形式:")
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]])

http://www.kler.cn/news/307641.html

相关文章:

  • SpringBoot2:web开发常用功能实现及原理解析-上传与下载
  • Python学习笔记--面向对象、类、属性、继承、正则表达式、错误和异常
  • 基于python+django+vue的个性化餐饮管理系统
  • 数据结构——原来二叉树可以这么学?(4.链式二叉树)
  • 使用HTML和CSS制作网页的全面指南
  • Wordpress右下角表单弹出插件
  • 【Gateway】网关服务快速上手
  • 形而上学(Metaphysics)
  • 北京通州自闭症学校推荐:打造和谐学习氛围,助力孩子成长
  • Big Data 流处理框架 Flink
  • Ubuntu 24.04 上安装 Conda
  • Docker与虚拟机的差异?
  • 如何用MATLAB搭建ResNet网络(复现论文)
  • 【Python】高效图像处理库:pyvips
  • 存储器与寄存器
  • Centos中dnf和yum区别对比
  • 使用 IntelliJ IDEA 导入已有的 Spring Maven 项目并运行
  • Elment-plus组件失效(没有样式)(0916)
  • 宏任务和微任务+超全面试真题(持续更新ing
  • 【Elasticsearch系列六】系统命令API
  • Android DPC模式多开 APP
  • 安全区域边界等保测评
  • 安全隔离上网的有效途径:沙盒
  • QT开发:深入详解QtCore模块事件处理,一文学懂QT 事件循环与处理机制
  • SQL使用IN进行分组统计时如何将不存在的字段显示为0
  • CISP-PTE CMS sqlgun靶场渗透测试
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.16)
  • 神经网络_使用tensorflow对fashion mnist衣服数据集分类
  • uniapp js修改数组某个下标以外的所有值
  • 2024.09.08 校招 实习 内推 面经