【线性代数】列主元法求矩阵的逆
列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤:
[精确算法] 列主元高斯消元法
步骤 1:初始化
构造增广矩阵 [ A ∣ I ] [A | I] [A∣I],其中 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∣=i≥kmax∣ai,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,…,n−1),进行以下操作:
- 归一化第 k k k 行的列主元:
a k , k ← 1 a k , k a_{k,k} \leftarrow \frac{1}{a_{k,k}} ak,k←ak,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,j←ak,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,j←ai,j−mi,k⋅ak,j对于所有 j
步骤 4:回代求解
当矩阵 A A A 被转换为上三角矩阵后,从最后一行开始回代:
对于每一行 k k k( k = n , n − 1 , … , 1 k = n, n-1, \ldots, 1 k=n,n−1,…,1),进行以下操作: - 归一化第 k k k 行的最后一个非零元素(即对角线元素):
a k , k ← 1 a k , k a_{k,k} \leftarrow \frac{1}{a_{k,k}} ak,k←ak,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,j←ak,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,j←ai,j−mi,k⋅ak,j对于所有 j
步骤 5:结果提取
经过上述步骤后,增广矩阵的左侧变为单位矩阵,而右侧则变为了 A A A 的逆矩阵 A − 1 A^{-1} A−1。提取右侧的矩阵即为所求的逆矩阵。
需要注意的是,上述公式中的 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} A−1 所取代。
此外,如果在任何步骤中发现对角线上的元素 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)
结果
相关文章:

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

大写——蓝桥杯
1.题目描述 给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。 输入描述 输入一行包含一个字符串。 输出描述 输出转换成大写后的字符串。 输入输出样例 示例 输入 LanQiao输出 LANQIAO评测用例规模与约定 对…...

HTML `<head>` 元素详解
在 HTML 文档中,<head> 元素是一个非常重要的部分,它包含了文档的元数据(metadata)和其他与文档相关的信息。虽然 <head> 中的内容不会直接显示在网页上,但它对网页的行为、样式和搜索引擎优化(…...

一文速通stack和queue的理解与使用
CSTL之stack和queue 1.stack1.1.stack的基本概念1.2.stack的接口 2.queue2.1.queue的基本概念2.2.queue的接口 3.priority_queue3.1.priority_queue的基本概念3.2.priority_queue的接口3.3.仿函数 4.容器适配器5.deque5.1.deque的简单了解5.2.deque的优缺点 🌟&…...

Antd React Form使用Radio嵌套多个Select和Input的处理
使用Antd React Form使用Radio会遇到嵌套多个Select和Input的处理,需要多层嵌套和处理默认事件和冒泡,具体实现过程直接上代码。 实现效果布局如下图 代码 <Formname"basic"form{form}labelWrap{...formItemLayoutSpan(5, 19)}onFinish{on…...

Vue - toRefs() 和 toRef() 的使用
一、toRefs() 在 Vue 3 中,toRefs()可以将响应式对象的属性转换为可响应的 refs。主要用于在解构响应式对象时,保持属性的响应性。 1. 导入 toRefs 函数 import { toRefs } from vue;2. 将响应式对象的属性转换为 ref const state reactive({count: 0,message:…...

Python3 OS模块中的文件/目录方法说明九
一. 简介 前面文章简单学习了 Python3 中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS 模块中文件、目录的操作方法:os.pipe() 方法、os.popen() 方法。 二. Python3 OS模块中的文件/目录方法 1. os.pipe() 方法 os.pipe() 方法用于创建一个管道, 返回…...

OpenCV文字绘制支持中文显示
OpenCV版本:4.4 IDE:VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示,网上很多方法推荐的都是使用FreeType来支持,FreeType是什么呢?FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…...

opengrok_windows_多工程环境搭建
目录 多工程的目录 工程代码下载和log配置 工程的索引 工程部署 工程测试 参考列表 多工程的目录 工程代码下载和log配置 工程代码下载 在每个工程的src目录下,下载工程代码,以下载pulseaudio的代码为例。 git clone gitgithub.com…...

基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】
安装环境 安装pgvector,先设置docker镜像源: vim /etc/docker/daemon.json {"registry-mirrors": ["https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com","https://mirror.ccs.tencentyun.com",&…...

Elasticsearch 和arkime 安装
安装一定要注意版本号,不然使用不了 这里Ubuntu使用ubuntu-20.04.6-desktop-amd64.iso elasticsearch这里使用Elasticsearch 7.17.5 | Elastic arkime这里使用wget https://s3.amazonaws.com/files.molo.ch/builds/ubuntu-20.04/arkime_3.4.2-1_amd64.deb 大家想…...

git回退
git回退 1、未使用 git add 缓存代码时 git checkout –- filepathname 放弃单个文件的修改 git checkout . 放弃所有的文件修改 此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不…...

pytest+playwright落地实战大纲
前言 很久没有更新博客,是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结,开个帖子介绍下这门课程(硬广, o(〃^▽^〃)o) 课程放在CSDN学习频道, 欢迎关注~ PyTestPl…...

01-硬件入门学习/嵌入式教程-CH340C使用教程
前言 CH340C广泛应用于DIY项目和嵌入式开发中,用于USB数据转换和串口通信。本文将详细介绍CH340C的基本功能、引脚接线及使用方法。 CH340C简介 CH340C是一款USB转TTL电平转换器,可以将电脑的USB数据转换成串口数据,方便与单片机ÿ…...

小试牛刀调整Prompt,优化Token消耗
在上一篇文章 荒腔走板Mac电脑本地部署 LLM 中介绍过本地部署大模型之后,可以通过定制 prompt 来实现 domain 提取等各种各样的需求。 但是实际上,部署本地大模型 这种方式对于个人开发者来说实在是不太友好。一方面需要投入大量资金确保设备的算力足够支…...

snippets router pinia axios mock
文章目录 补充VS Code 代码片段注册自定义组件vue routerpinia删除vite创建项目时默认的文件axiosmock3.0.x版本的 viteMockServe 补充 为文章做补充:https://blog.csdn.net/yavlgloss/article/details/140063387 VS Code 代码片段 为当前项目创建 Snippets {&quo…...

Visual Studio2019调试DLL
1、编写好DLL代码之后,对DLL项目的属性进行设置,选择待注入的DLL,如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后,按F5启动调试。弹出选择注入的exe的界面之后,使用代码注入器注入步骤2中生成的dll࿰…...

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?
目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…...

vue项目中打包后的地址加载不出图片【五种解决方案】
在 Vue 项目中打包后,加载图片路径可能会出现问题,主要是因为打包后的路径与开发时的路径不同。为了确保图片可以正确加载,你可以考虑以下几种方法: 1. 使用 require 或 import 动态加载图片 如果你在 Vue 的模板或者脚本中引用…...

讯飞星火大模型将超越chatgpt?
讯飞星火大模型真的能超越ChatGPT吗? 在人工智能的世界里,新技术层出不穷,而科大讯飞最近发布的讯飞星火大模型3.0引发了不少讨论。有些人甚至大胆猜测:这个模型是否能够在某些方面超越如今广受欢迎的ChatGPT?今天,我们就来深入探讨一下这个话题,分析讯飞星火大模型3.0…...

3D Vision--计算点到平面的距离
写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…...

《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》
在当今科技飞速发展的时代,鸿蒙Next系统作为一款具有创新性和前瞻性的操作系统,为人工智能技术的发展提供了广阔的舞台。而开源和合作则是推动鸿蒙Next系统中人工智能技术创新和发展的两大关键引擎。 开源:创新的源泉 代码共享与知识传播&am…...

Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架
前言 在过 2 个月即将进入 3 月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的 java 开发朋友跳槽面试,无论一面还是二面,都开始考验一个 Java 程序员的技术功底…...

【机器学习】嘿马机器学习(科学计算库)第11篇:Pandas,学习目标【附代码文档】
本教程的知识点为:机器学习(常用科学计算库的使用)基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原…...

WordPress Fancy Product Designer插件Sql注入漏洞复现(CVE-2024-51818)(附脚本)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...

StarRocks强大的实时数据分析
代码仓库:https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始:StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化…...

Linux(Centos 7.6)命令详解:iconv
1.命令作用 将给定文件的编码从一种编码转换为另一种编码(Convert encoding of given files from one encoding to another) 2.命令语法 Usage: iconv [OPTION...] [FILE...] 3.参数详解 OPTION: 输入/输出格式规范: -f, --from-codeNAME,原始文本编码-t, --t…...

SpringBoot读取配置优先级顺序是什么?
Spring Boot外部化配置详解 目录 引言Spring Boot外部化配置概述配置加载优先级配置加载顺序详解实际案例总结 引言 Spring Boot因其“开箱即用”的特性,极大地简化了Java应用的开发和部署过程。它通过外部化配置机制,允许开发者根据不同的环境&#x…...

VScode连接远程Linux服务器环境配置
一、安装vscode 下载链接:Visual Studio Code - Code Editing. Redefined,点击下载安装即可 安装: 双击安装 选择安装位置,一直点击下一步即可 二、环境配置 1.中文汉化包 2.安装remote-ssh,用于远程连接 2.1安装 2…...

梯度下降法 (Gradient Descent) 算法详解及案例分析
梯度下降法 (Gradient Descent) 算法详解及案例分析 目录 梯度下降法 (Gradient Descent) 算法详解及案例分析1. 引言2. 梯度下降法 (Gradient Descent) 算法原理2.1 基本概念2.2 算法步骤2.3 梯度下降法的变种3. 梯度下降法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案…...