【线性代数】列主元法求矩阵的逆

列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤:

[精确算法] 列主元高斯消元法

步骤 1:初始化
构造增广矩阵 [ A ∣ I ] [A | I] [AI],其中 I I I n n n 阶单位矩阵。
步骤 2:列主元选择
对于第 k k k 列( k = 1 , 2 , … , n k = 1, 2, \ldots, n k=1,2,,n),找到列主元,即找到 i k i_k ik 使得:
∣ a i k , k ∣ = max ⁡ i ≥ k ∣ a i , k ∣ |a_{i_k,k}| = \max_{i \geq k} |a_{i,k}| aik,k=ikmaxai,k
如果 i k ≠ k i_k \neq k ik=k,则交换第 k k k 行和第 i k i_k ik 行。
步骤 3:高斯消元
对于每一列 k k k k = 1 , 2 , … , n − 1 k = 1, 2, \ldots, n-1 k=1,2,,n1),进行以下操作:

  • 归一化第 k k k 行的列主元:
    a k , k ← 1 a k , k a_{k,k} \leftarrow \frac{1}{a_{k,k}} ak,kak,k1
  • 更新第 k k k 行的其他元素:
    a k , j ← a k , j a k , k 对于所有  j ≠ k a_{k,j} \leftarrow \frac{a_{k,j}}{a_{k,k}} \quad \text{对于所有 } j \neq k ak,jak,kak,j对于所有 j=k
  • 消去下方所有行的第 k k k 列元素:
    对于所有 i > k i > k i>k,计算:
    m i , k = a i , k m_{i,k} = a_{i,k} mi,k=ai,k
    然后更新第 i i i 行:
    a i , j ← a i , j − m i , k ⋅ a k , j 对于所有  j a_{i,j} \leftarrow a_{i,j} - m_{i,k} \cdot a_{k,j} \quad \text{对于所有 } j ai,jai,jmi,kak,j对于所有 j
    步骤 4:回代求解
    当矩阵 A A A 被转换为上三角矩阵后,从最后一行开始回代:
    对于每一行 k k k k = n , n − 1 , … , 1 k = n, n-1, \ldots, 1 k=n,n1,,1),进行以下操作:
  • 归一化第 k k k 行的最后一个非零元素(即对角线元素):
    a k , k ← 1 a k , k a_{k,k} \leftarrow \frac{1}{a_{k,k}} ak,kak,k1
  • 更新第 k k k 行的其他元素:
    a k , j ← a k , j a k , k 对于所有  j ≠ k a_{k,j} \leftarrow \frac{a_{k,j}}{a_{k,k}} \quad \text{对于所有 } j \neq k ak,jak,kak,j对于所有 j=k
  • 消去上方所有行的第 k k k 列元素:
    对于所有 i < k i < k i<k,计算:
    m i , k = a i , k m_{i,k} = a_{i,k} mi,k=ai,k
    然后更新第 i i i 行:
    a i , j ← a i , j − m i , k ⋅ a k , j 对于所有  j a_{i,j} \leftarrow a_{i,j} - m_{i,k} \cdot a_{k,j} \quad \text{对于所有 } j ai,jai,jmi,kak,j对于所有 j
    步骤 5:结果提取
    经过上述步骤后,增广矩阵的左侧变为单位矩阵,而右侧则变为了 A A A 的逆矩阵 A − 1 A^{-1} A1。提取右侧的矩阵即为所求的逆矩阵。
    需要注意的是,上述公式中的 a i , j a_{i,j} ai,j 表示增广矩阵中的元素,包括原矩阵 A A A 和单位矩阵 I I I 的部分。在实际计算中,这些操作会同时应用于 A A A I I I,最终 I I I 的位置会被 A − 1 A^{-1} A1 所取代。
    此外,如果在任何步骤中发现对角线上的元素 a k , k a_{k,k} ak,k 为零或非常接近零,那么矩阵 A A A 可能是奇异矩阵,无法求逆。在这种情况下,算法应该停止并报错。

Julia 代码

美化数据格式

using DataFrames
function pm(A,b)m,n=size(A); z=[]for i=1:n  st=iz=[z; "a:$st"]endfor i=1:nst=iz=[z;"b:$st"]endprintln(DataFrame([A b],z))
end             
function luInv(A,par=false)n=size(A,1);T=typeof(A[1,1])A=copy(A); E = zeros(T,n,n); for i=1:n  E[i,i]=1//1  endif par pm(A, E) endif par println("化为上三角")  endfor i=1:n-1id=argmax(abs.(A[i:n,i])) # 寻找列主元 id=id-1A[i,i:n], A[i+id,i:n]= A[i+id,i:n],A[i,i:n]E[i,:], E[i+id,:] =E[i+id,:], E[i,:]for j=i+1:nc=A[j,i]/A[i,i]E[j,:]=E[j,:]-E[i,:]*cA[j,i:n]=A[j,i:n]-A[i,i:n]*cendif par pm(A, E) endendif par println("化为对角") endfor i=n:-1:2for j=1:i-1c=A[j,i]/A[i,i]E[j,:]=E[j,:]-E[i,:]*cA[j,1:i]=A[j,1:i]-A[i,1:i]*cendif par pm(A, E) endendIA=copy(E);for j=1:nIA[j,:] = E[j,:]/A[j,j]; A[j,j]=A[j,j]/A[j,j]endif par pm(A, IA) endreturn(IA)
end

举例

n=3;
A=zeros(Rational,n,n)
for i=1:n-1A[i,i]=0;A[i,i+1]=11//1;A[i+1,i]=7//1; 
end
A[n,n]=3//1;
IA=luInv(A,true)

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5756.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OGG 19C 集成模式启用DDL复制

接Oracle19C PDB 环境下 OGG 搭建&#xff08;PDB to PDB&#xff09;_cdb架构 配置ogg-CSDN博客&#xff0c;给 pdb 环境 ogg 配置 DDL 功能。 一个报错 SYShfdb1> ddl_setup.sqlOracle GoldenGate DDL Replication setup scriptVerifying that current user has privile…

基于微信小程序的健身管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

澎峰科技计算软件栈与沐曦GPU完成适配和互认证

近期&#xff0c;澎峰科技与沐曦完成了对PerfXLM&#xff08;推理引擎&#xff09;、PerfXCloud&#xff08;大模型服务平台&#xff09;与沐曦的曦云系列通用计算GPU的联合测试&#xff0c;测试结果表明PerfXLM、PerfXCloud软件与沐曦GPU产品实现了全面兼容。 PerfXLM高性能大…

Tensor 基本操作1 unsqueeze, squeeze, softmax | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginn…

计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

C++17 新特性深入解析:constexpr 扩展、if constexpr 和 constexpr lambda

C17 不仅增强了现有特性&#xff0c;还引入了一些全新的编程工具&#xff0c;极大地提升了代码的效率和表达力。在这篇文章中&#xff0c;我们将深入探讨 C17 中与 constexpr 相关的三个重要特性&#xff1a;constexpr 的扩展用法、if constexpr 和 constexpr lambda。这些特性…

AI 编程工具—Cursor进阶使用 Rules for AI

AI 编程工具—Cursor进阶使用 Rules for AI 这里配置是给所有的会话和内嵌模式的,你可以理解为是一个全局的配置 下面的代码是之前Cursor 给我们生成的,下面我们开始配置Rules ,来让Cursor生成的代码更加符合我们的编程习惯 def quick_sort(arr):"""使用快…

Games104——渲染中光和材质的数学魔法

原文链接 渲染方程及挑战 挑战 对于任一给定方向如何获得radiance–阴影 对于光源和表面shading的积分运算&#xff08;蒙特卡洛积分&#xff09; 对于反射光多Bounce的无限递归计算 基础光照解决方案 Blinn-Phong模型&#xff1a; 简化阴影 最常见的处理方式就是Shadow M…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面&#xff0c;感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究

一 . 只能被一个client 链接 socket例子 此例子用于socket 例子&#xff0c; 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子&#xff0c; 该例子只能用于一个客户端连接server。…

2D 超声心动图视频到 3D 心脏形状重建的临床应用| 文献速递-医学影像人工智能进展

Title 题目 2D echocardiography video to 3D heart shape reconstruction for clinicalapplication 2D 超声心动图视频到 3D 心脏形状重建的临床应用 01 文献速递介绍 超声心动图是心血管医学中一种至关重要且广泛应用的影像学技术&#xff0c;利用超声波技术捕捉心脏及其…

再见 Crontab!Linux 定时任务的新选择!

引言 说到 Linux 下定时执行任务&#xff0c;大多数人可能会想到 crontab&#xff1f;没错&#xff0c;它的确是 Linux 下比较通用和方便的方式&#xff0c;但是今天我来介绍一种新的方法来创建定时任务并且支持更多更强大的功能。 Systemd 很多小伙伴应该听说过 Systemd&…

windows下本地部署安装hadoop+scala+spark-【不需要虚拟机】

注意版本依赖【本实验版本如下】 Hadoop 3.1.1 spark 2.3.2 scala 2.11 1.依赖环境 1.1 java 安装java并配置环境变量【如果未安装搜索其他教程】 环境验证如下&#xff1a; C:\Users\wangning>java -version java version "1.8.0_261" Java(TM) SE Runti…

2.5G PoE交换机 TL-SE2109P 简单开箱评测,8个2.5G电口+1个10G光口(SFP+)

TPLINK&#xff08;普联&#xff09;的万兆上联的2.5G网管交换机TL-SE2109P简单开箱测评。8个PoE 2.5G电口&#xff0c;1个万兆SFP上联口。 2.5G交换机 TL-SE2420 简单开箱评测&#xff0c;16个2.5G电口4个10G光口(SFP)&#xff1a;https://blog.zeruns.com/archives/837.html…

simulink入门学习01

文章目录 1.基本学习方法2.图形环境--模块和参数3.激活菜单---添加到模型3.1输入选项3.2添加到模型3.3更改运算3.4验证要求 4.乘以特定值--Gain模块4.1引入gain模块4.2更改增益参数4.3接入系统4.4大胆尝试 1.基本学习方法 今天突然想要学习这个simulink的相关知识&#xff0c;…

等变即插即用图像重建

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 即插即用算法为解决反问题成像问题提供了一个流行的框架&#xff0c;该框架依赖于通过降噪器隐式定义图像先验。这些算法可以利用强大的预训练降噪器来解决各种成像任务&#xff0c;从而避免了在每…

ChatGPT 摘要,以 ESS 作为你的私有数据存储

作者&#xff1a;来自 Elastic Ryan_Earle 本教程介绍如何设置 Elasticsearch 网络爬虫&#xff0c;将网站索引到 Elasticsearch 中&#xff0c;然后利用 ChatGPT 使用我们的私人数据来总结对其提出的问题。 Python 脚本的 Github Repo&#xff1a;https://github.com/Gunner…

java开发,IDEA转战VSCODE配置(mac)

一、基本java开发环境配置 前提&#xff1a;已经安装了jdk、maven、vscode&#xff0c;且配置了环境变量 1、安装java相关的插件 2、安装spring相关的插件 3、vscode配置maven环境 打开 VsCode -> 首选项 -> 设置&#xff0c;也可以在setting.json文件中直接编辑&…

Autosar CP中SWC收发LIN消息的函数调用流程原理解析

Part 1&#xff1a;SWC发送 在AUTOSAR架构中&#xff0c;软件组件&#xff08;SWC&#xff0c;Software Component&#xff09;要发送LIN消息时&#xff0c;通常通过COM模块的接口来发起请求。这是因为COM模块是AUTOSAR架构中负责信号和数据传输的核心模块&#xff0c;它为SWC提…

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游数据如何落…