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

列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 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.mzph.cn/web/66699.shtml

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

相关文章

[0242-06].第06节:SpringBoot对SpringMVC的自动配置

SpringBoot学习大纲 一、基于SpringBoot搭建Web工程&#xff1a; 1.1.编码实现步骤&#xff1a; a.创建SpringBoot项目 b.选中依赖&#xff1a;选中我们所需要的模块 1.2.SSM中的WEB开发配置与SpringBoot中WEB开发自动配置对比&#xff1a; a.SSM中的WEB开发&#xff1a; 1…

【21】Word:德国旅游业务❗

目录 题目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 题目 NO1.2.3 F12&#xff1a;另存为布局→页面设置→页边距&#xff1a;上下左右选中“德国主要城市”→开始→字体对话框→字体/字号→文本效果&#xff1a;段落对话框→对齐方式/字符间距/段落间距 NO4 布局→表对话框…

什么是软件架构

什么是软件架构 程序员说&#xff0c;软件架构是要决定编写哪些C程序或OO类、使用哪些库和框架 程序经理说&#xff0c;软件架构就是模块的划分和接口的定义 系统分析员说&#xff0c;软件架构就是为业务领域对象的关系建模 配置管理员说&#xff0c;软件架构就是开发出来的…

1/20赛后总结

1/20赛后总结 T1『讨论区管理员』的旅行 - BBC编程训练营 算法&#xff1a;IDA* 分数&#xff1a;0 damn it! Ac_code走丢了~~&#xff08;主要是没有写出来&#xff09;~~ T2华强买瓜 - BBC编程训练营 算法&#xff1a;双向DFS或者DFS剪枝 分数&#xff1a;0 Ac_code…

大数据与AI驱动的商业查询平台:企业市场拓展的变革引擎​

在竞争白热化的商业环境里&#xff0c;企业对准确市场信息的高效获取能力&#xff0c;直接关系到业务拓展的成败。商业查询平台借助大数据和人工智能技术&#xff0c;为企业提供精准客户筛选、市场拓展分析以及风险评估服务&#xff0c;正逐渐成为企业市场开拓的得力助手。本文…

redis 各个模式的安装

一、Redis单机安装 1、安装gcc依赖 Redis是C语言编写的&#xff0c;编译需要GCC。 Redis6.x.x版本支持了多线程&#xff0c;需要gcc的版本大于4.9&#xff0c;但是CentOS7的默认版本是4.8.5。 升级gcc版本&#xff1a; yum -y install centos-release-scl yum -y install d…

TiDB 的优势与劣势

TiDB 的优势与劣势 TiDB 作为一款新兴的分布式数据库&#xff0c;在业界逐渐崭露头角。它兼具传统关系型数据库的特性&#xff0c;又充分利用分布式架构的优势。那么&#xff0c;TiDB 究竟有怎样的优缺点呢&#xff1f;今天我们来聊聊 TiDB 的优势与劣势&#xff0c;帮你全面了…

蓝桥杯算法日常|c\c++常用竞赛函数总结备用

一、字符处理相关函数 大小写判断函数 islower和isupper&#xff1a;是C标准库中的字符分类函数&#xff0c;用于检查一个字符是否为小写字母或大写字母&#xff0c;需包含头文件cctype.h&#xff08;也可用万能头文件包含&#xff09;。返回布尔类型值。例如&#xff1a; #…

微服务知识——4大主流微服务架构方案

文章目录 1、微服务聚合模式2、微服务共享模式3、微服务代理模式4、微服务异步消息模式 微服务是大型架构的必经之路&#xff0c;也是大厂重点考察对象&#xff0c;下面我就重点详解4大主流微服务架构方案。 1、微服务聚合模式 微服务聚合设计模式&#xff0c;解决了如何从多个…

【HTML+CSS】使用HTML与后端技术连接数据库

目录 一、概述 1.1 HTML前端 1.2 后端技术 1.3 数据库 二、HTML表单示例 三、PHP后端示例 3.1 连接数据库 3.2 接收数据并插入数据库 四、安全性 4.1 防止SQL注入 4.2 数据验证与清洗 五、优化 5.1 索引优化 5.2 查询优化 六、现代Web开发中的最佳实践 6.1 使用…

T-SQL语言的数据库编程

T-SQL语言的数据库编程 1. 引言 在信息化迅速发展的今天&#xff0c;数据库已经成为数据管理和使用的重要工具。其中&#xff0c;T-SQL&#xff08;Transact-SQL&#xff09;作为微软SQL Server的扩展SQL语言&#xff0c;不仅用于数据查询和管理&#xff0c;还能够进行复杂的…

通信协议—WebSocket

一、WebSocket编程概念 1.1 什么是WebSocket WebSocket 是一种全双工通信协议&#xff0c;允许在客户端&#xff08;通常是浏览器&#xff09;和服务器之间建立持久连接&#xff0c;以实现实时的双向通信。它是 HTML5 标准的一部分&#xff0c;相比传统的 HTTP 请求&#xff…

cadence笔记--画PMU6050原理图和封装

简介 本文主要介绍使用Cadence自己画一个PMU6050的原理图PCB的实际用例&#xff0c;Cadence使用的是24.1版本。 原理图 首先获取PMU6050引脚参数&#xff0c;使用立创商城查询PMU6050型号&#xff0c;点击数据手册如下图所示&#xff1a; 如下图所示&#xff0c;左边是原理图&…

CSS3 3D 转换介绍

CSS3 中的 3D 转换提供了一种在二维屏幕上呈现三维效果的方式&#xff0c;主要包括translate3d、rotate3d、scale3d等转换函数&#xff0c;下面来详细介绍&#xff1a; 1. 3D 转换的基本概念 坐标系 在 CSS3 的 3D 空间中&#xff0c;使用的是右手坐标系。X 轴是水平方向&…

Text2SQL 智能报表方案介绍

0 背景 Text2SQL智能报表方案旨在通过自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;使用户能够以自然语言的形式提出问题&#xff0c;并自动生成相应的SQL查询&#xff0c;从而获取所需的数据报表&#xff0c;用户可根据得到结果展示分析从而为结论提供支撑&#…

FFmpeg音视频采集

文章目录 音视频采集音频采集获取设备信息录制麦克风录制声卡 视频采集摄像机画面采集 音视频采集 DirectShow&#xff08;简称DShow&#xff09;是一个Windows平台上的流媒体框架&#xff0c;提供了高质量的多媒体流采集和回放功能&#xff0c;它支持多种多样的媒体文件格式&…

【漫话机器学习系列】056.F1值(F1 score)

F1值&#xff08;F1 Score&#xff09; 定义 F1值是机器学习中一种用于评估模型性能的指标&#xff0c;特别适合用于 不平衡数据集 的分类任务。它是 精确率&#xff08;Precision&#xff09; 和 召回率&#xff08;Recall&#xff09; 的调和平均值。通过综合考虑精确率和召…

Mac安装Homebrew

目录 安装修改homeBrew源常用命令安装卸载软件升级软件相关清理相关 安装 官网 https://brew.sh/不推荐官网安装方式&#xff08;很慢很慢或者安装失败联网失败&#xff09; 检测是否安装homebrewbrew -v执行安装命令 苹果电脑 常规安装脚本 &#xff08;推荐 完全体 几分钟就…

在K8S中,如果后端NFS存储的IP发送变化如何解决?

在Kubernetes中&#xff0c;如果后端NFS存储的IP地址发生了变化&#xff0c;您需要更新与之相关的Peristent Volume(PV)或Persistent Volume Claim(PVC)以及StorageClass中关于NFS服务器IP的配置信息&#xff0c;确保K8S集群内的Pod能够正确连接到新的NFS存储位置。解决方案如下…

一文大白话讲清楚webpack基本使用——9——预加载之prefetch和preload以及webpackChunkName的使用

文章目录 一文大白话讲清楚webpack基本使用——9——预加载之prefetch和preload1. 建议按文章顺序从头看&#xff0c;一看到底&#xff0c;豁然开朗2. preload和prefetch的区别2. prefetch的使用3. preload的使用4. webpackChunkName 一文大白话讲清楚webpack基本使用——9——…