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

列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 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=i
        z=[z; "a:$st"]
    end
    for i=1:n
        st=i
        z=[z;"b:$st"]
    end
    println(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  end
    if par pm(A, E) end
    if par println("化为上三角")  end
    for i=1:n-1
        id=argmax(abs.(A[i:n,i])) # 寻找列主元 
        id=id-1
        A[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:n
            c=A[j,i]/A[i,i]
            E[j,:]=E[j,:]-E[i,:]*c
            A[j,i:n]=A[j,i:n]-A[i,i:n]*c
        end
        if par pm(A, E) end
    end
    if par println("化为对角") end
    for i=n:-1:2
        for j=1:i-1
            c=A[j,i]/A[i,i]
            E[j,:]=E[j,:]-E[i,:]*c
            A[j,1:i]=A[j,1:i]-A[i,1:i]*c
        end
        if par pm(A, E) end
    end
    IA=copy(E);
    for j=1:n
        IA[j,:] = E[j,:]/A[j,j]; A[j,j]=A[j,j]/A[j,j]
    end
    if par pm(A, IA) end
    return(IA)
end

举例

n=3;
A=zeros(Rational,n,n)
for i=1:n-1
    A[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/957636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始:Spring Boot核心概念与架构解析

引言 在当今的Java开发领域&#xff0c;Spring Boot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点&#xff0c;极大地简化了Spring应用的开发过程。本文将从Spring Boot的核心概念入手&#xff0c;深入解析其架构设计和运行原理&#xff0c;帮助读…

后端面试题分享第一弹(状态码、进程线程、TCPUDP)

后端面试题分享第一弹 1. 如何查看状态码&#xff0c;状态码含义 在Web开发和调试过程中&#xff0c;HTTP状态码是了解请求处理情况的重要工具。 查看状态码的步骤 打开开发者工具&#xff1a; 在大多数浏览器中&#xff0c;您可以通过按下 F12 键或右键单击页面并选择“检查…

7、数组知识点汇总

一、 数组基本概念 程序算法数据结构 算法&#xff1a;解决程序的流程步骤数据结构&#xff1a;将数据按照某种特定的结构来存储设计良好的数据结构会导致良好的算法。ArrayList、LinkedList 数组是最简单的数据结构。 1、数组&#xff1a; 数组&#xff1a;存放同一种类型…

计算机网络 (48)P2P应用

前言 计算机网络中的P2P&#xff08;Peer to Peer&#xff0c;点对点&#xff09;应用是一种去中心化的网络通信模式&#xff0c;它允许设备&#xff08;或节点&#xff09;直接连接并共享资源&#xff0c;而无需传统的客户端-服务器模型。 一、P2P技术原理 去中心化架构&#…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库&#xff08;Monorepo&#xff09;搭建指南&#xff1a;从零开始 单体仓库&#xff08;Monorepo&#xff09;是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置&#xff0c;并简化依赖管理。本文将通过实际代码示例&#xff0…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…

重学SpringBoot3-WebClient配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备 2.1 依赖配置 3. WebClient配置 3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例 4.1 基本请求操…

持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签

增加复制按钮后的界面是这样的 代码如下&#xff1a; <template><view><x-header></x-header><view class"" v-if"article_info"><view class"kuai bgf"><view class"ac fs26"><img sr…

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…

启动虚拟机中客户机后导致电脑蓝屏的解决办法

不考虑重新安装虚拟机的解决办法有两种&#xff1a; vmx文件破损时使用 1&#xff09;删除CentOS 64-bit.vmx文件 2&#xff09;打开vmware-0.log文件&#xff0c;找到CONFIGURATION 和 USER DEFAULTS 并把这两个之间的内容拷贝出来 删除框出来的部分&#xff0c;复制框出来的…

Word2Vec中的CBOW模型训练原理详细解析

Word2Vec中的CBOW模型训练原理详细解析 1. CBOW模型概述 CBOW模型的训练目标是利用一个单词周围的上下文单词来预测该单词本身。具体来说&#xff0c;给定当前单词的上下文单词&#xff0c;通过训练神经网络来最大化当前单词出现在这些上下文单词中的概率。 2. 模型结构 CB…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

MySql字段的值是以逗号隔开的另一个表的主键关联查询

查询sql SELECT s.student_id, s.name, c.name as course_name FROM student s INNER JOIN course c ON FIND_IN_SET(c.course_id, s.course_id) > 0 WHERE 1 1;相似sql -- 翻译&#xff08;需要带条件&#xff0c;可用于字典翻译&#xff0c;但条件需要注意唯一性&#…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

QD Laser携“Lantana”激光器参展SPIE光子学西部展2025,聚焦紧凑型设计

据悉&#xff0c;QD Laser公司将在2025年SPIE光子学西部展览会上展出其最新产品——世界最小一体化紧凑型可见光激光器“Lantana”。该展会将于1月28日至30日在旧金山的Moscone中心举行。 在展会期间&#xff0c;QD Laser公司将现场展示这款超小型、轻便设备—— “Lantana”。…

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…

Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验&#xff08;微机原理与接口技术题解及实验指导&#xff0c;吴宁版本13章&#xff09;&#xff0c;中间出了挺多问题&#xff0c;解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出&#xff0c;只好把子电路拿…

外部flash烧写算法学习笔记(一)

一&#xff0c;STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二&#xff0c;QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了&#xff0c;含MDK下载算法制作和STM32CubeProg下载算法制作 …

在centos上编译安装opensips【初级-默认安装】

环境&#xff1a;centos9 last opensips3.2 dnf update -y dnf install -y gcc make git automake libtool pcre-devel libxml2-devel \libcurl-devel postgresql-devel \bzip2-devel zlib-devel ncurses-devel libuuid-devel \libpcap-devel # 有报错的直接删除cd /usr/lo…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…