Matlab求矩阵的逆,3种常用方法总结

几种求逆矩阵的方法总结,以Matlab语言为例

  • *0* 引言
  • *1* 简单描述+函数实现
  • *2* 方法调用计算对比


0 引言

  最近在使用函数库求解逆矩阵的时候发现同一个矩阵使用不同的语言、不同的求解方法会产生不同精度的结果,特别是阶数很高的方阵,一些库中的算法为了使计算速度提升,用了非常规方法。这里整理了3种常用的矩阵求逆方法,伴随矩阵法、LU分解法和高斯消元法,并用Matlab进行了实现,一些过程参考了NET博文:

1 简单描述+函数实现

伴随矩阵法
  对于一个矩阵A,如果它的伴随矩阵存在,并且A的行列式不为零,那么A的逆矩阵等于它的伴随矩阵除以A的行列式。

  设A是一个n阶矩阵,其伴随矩阵为A*。那么A的逆矩阵为 A − 1 A^{-1} A1,根据公式:

A − 1 = A ∗ / ∣ A ∣ A^{-1} = A* / |A| A1=A/∣A

  其中,|A|表示A的行列式。

  因此,如果你已经求得了矩阵A的伴随矩阵A*,并且知道A的行列式|A|不为零,那么你可以通过上述公式来求得A的逆矩阵A^(-1)。

% 伴随矩阵法求逆矩阵
function value = inv_Adjoint(matrixA,tol)As = size(matrixA);N = As(1);if(nargin < 2)tol = 1e-15;endif( abs(det(matrixA)) < tol )msg ='the matrix is not full rank';error(msg);endbb = adjoint(matrixA); % 伴随矩阵法d = det(matrixA); % 矩阵的行列式子value = bb/d;
end

LU分解法;
  LU分解是一种将矩阵分解为一个下三角矩阵和一个上三角矩阵的方法。这种分解方法可以有效地将矩阵求逆的计算量减少一半。具体步骤如下:

  1. 将原矩阵表示为A = LU,其中L是一个下三角矩阵,U是一个上三角矩阵。
  2. 解下三角矩阵方程LY = I,其中Y是一个列向量,I是单位矩阵。
  3. 解上三角矩阵方程UX = Y,其中X是一个列向量。
  4. 求解出的X就是原矩阵A的逆矩阵。

  这种方法的好处是可以避免直接使用矩阵求逆的方法,提高计算精度。由于LU分解方法是通过矩阵的分解来求逆,因此可以在一定程度上避免了矩阵求逆时可能出现的数值不稳定性。

  然而,需要注意的是,当原矩阵的行列式为0时,即矩阵不可逆时,LU分解方法无法计算逆矩阵。在这种情况下,我们需要采用其他方法来求解。

  总结起来,对于矩阵求逆,LU分解是一种精度较高的方法。它通过将矩阵分解为下三角矩阵和上三角矩阵来进行计算,从而提高了计算精度,并且避免了一些数值不稳定性的问题。

% LU分解求逆
function value = inv_lu(matrixA,tol)As = size(matrixA);N = As(1);value = zeros(N,N);if(nargin < 2)tol = 1e-15;endif( abs(det(matrixA)) < tol )msg ='the matrix is not full rank';error(msg);endMatrixB=eye(N); Y = value;array1 =1:N;for i=1:N-1[~, j]=max(abs(matrixA(i:N,i)));num1 = matrixA(i,:);matrixA(i,:) = matrixA(j+i-1,:);matrixA(j+i-1,:) = num1;num1 = array1(i);array1(i) = array1(j+i-1);array1(j+i-1) = num1;if (matrixA(i,i)==0)breakendfor j=i+1:Nnum1=matrixA(j,i)/matrixA(i,i);matrixA(j,i) = num1;matrixA(j,i+1:N)=matrixA(j,i+1:N)-num1*matrixA(i,i+1:N);endendfor i=1:NY(1,i) = MatrixB(array1(1),i);for j=2:NY(j,i)= MatrixB(array1(j),i)-matrixA(j,1:j-1)*Y(1:j-1,i);endvalue(N,i)=Y(N,i)/matrixA(N,N);for j=N-1:-1:1value(j,i)=(Y(j,i)-matrixA(j,j+1:N)*value(j+1:N,i))/matrixA(j,j);endend
end 

高斯消元法;
  要用高斯消元法求一个n*n矩阵的逆矩阵,可以按以下步骤进行:

  1. 将原矩阵和单位矩阵合并成一个增广矩阵,形成一个4*8的矩阵。
  2. 利用高斯消元法将矩阵的左半部分化为上三角矩阵。
  3. 利用高斯消元法将矩阵的右半部分也化为上三角矩阵。
  4. 将得到的上三角矩阵进行回代,将其化为单位矩阵。
  5. 得到的矩阵的右半部分即为所求的逆矩阵。
% 高斯消元法求逆矩阵
function value = inv_gaosi(matrixA,tol)rc = size(matrixA);N = rc(1);value = zeros(N,N);if(nargin < 2)tol = 1e-15;endif( abs(det(matrixA)) < tol )msg ='the matrix is not full rank';error(msg);endMeye = eye(N);for i=1:NmaxV = matrixA(i,i);index=i;for j=i+1:Nif(abs(matrixA(j,i))>abs(maxV))maxV = matrixA(j,i);index=j;endendfor j=1:Nnum1 = matrixA(i,j);matrixA(i,j) = matrixA(index,j);matrixA(index,j) = num1;num1=Meye(i,j);Meye(i,j) = Meye(index,j);Meye(index,j) = num1;endfor j=i+1:Nnum1 = matrixA(j,i)/matrixA(i,i);for k=1:NmatrixA(j,k) = matrixA(j,k) - num1*matrixA(i,k);Meye(j,k) = Meye(j,k)-num1*Meye(i,k);endendendfor i=N:-1:1num1 =matrixA(i,i);for j=i:NmatrixA(j,i)=matrixA(j,i)/num1;endfor j=1:NMeye(i,j)=Meye(i,j)/num1;endfor j=i-1:-1:1num1=matrixA(j,i);matrixA(j,i)=0;for k=1:NMeye(j,k)=Meye(j,k)-num1*Meye(i,k);endendendvalue=Meye;
end

2 方法调用计算对比

clc;clear;
format long
a = [0.863926332645926,2.744822685285432E-002,0.358800923218055,7.587357258855056E-002;...0.737486519704736,0.275982186877394,0.928772666000609,0.219795611073554;...0.172452279207503,0.378156212690881,0.506403133293737,1.243293753676099E-002;...0.938238414353813,0.119337792575225,0.952934573404228,0.859760719854225];
aa = inv(a); %
bb =inv_gaosi(a); % 高斯消元法
cc =inv_lu(a);
dd = inv_Adjoint(a);%% .............................................................%% ......... out ............
aa =1.997894526750277  -1.386596126529541   0.814427151532846   0.1663888827860551.987598379664842  -4.975548628572671   5.811811940191023   1.012537147110808-2.163170299120444   4.249207887174017  -2.673735235716419  -0.856735351177312-0.058547952499082  -2.505916255800319   1.268026177518930   1.790575344111539>> bbbb =1.997894526750277  -1.386596126529541   0.814427151532846   0.1663888827860541.987598379664842  -4.975548628572672   5.811811940191024   1.012537147110807-2.163170299120444   4.249207887174018  -2.673735235716419  -0.856735351177311-0.058547952499082  -2.505916255800319   1.268026177518930   1.790575344111538>> cccc =1.997894526750277  -1.386596126529541   0.814427151532846   0.1663888827860541.987598379664842  -4.975548628572672   5.811811940191024   1.012537147110807-2.163170299120444   4.249207887174018  -2.673735235716419  -0.856735351177311-0.058547952499082  -2.505916255800319   1.268026177518930   1.790575344111538>> dddd =1.997894526750279  -1.386596126529543   0.814427151532847   0.1663888827860541.987598379664844  -4.975548628572673   5.811811940191022   1.012537147110807-2.163170299120446   4.249207887174019  -2.673735235716419  -0.856735351177311-0.058547952499082  -2.505916255800320   1.268026177518929   1.790575344111539

  仔细观察不难看出,在小数点后15位左右不同方法间会存在微笑差异,这个差异或者叫误差在一般计算中无所谓,可以被忽略,但对精度要求特高的过程,就需要斟酌一下,使用哪种求逆方法可以最大限度减小计算误差带来的影响。



还有哪些好的方法可以留言交流,希望对你有所帮助!

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

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

相关文章

第14章 大数据与数据科学知识点梳理

第14章 大数据与数据科学知识点梳理&#xff08;附带页码&#xff09; ◼ 原则&#xff1a;组织应仔细管理与大数据源相关的元数据&#xff0c;以便对数据文件及其来源和价值进行准确的清单管理。P386 ◼ 大数据&#xff1a;数据量大&#xff08;Volume&#xff09;、数据更新…

未来计算机的发展趋势是什么?

未来计算机的发展趋势是多方面的,涵盖了硬件、软件、体系结构以及计算范式等多个层面。以下是一些预期的趋势: 1. 量子计算: 随着量子理论的不断成熟和技术的进步,量子计算机将可能解决传统计算机难以处理的问题,比如药物发现、材料科学、复杂系统模拟等领域。量子计算的…

专访《综合品酒师》培训破大世界基尼斯之最纪录,开启行业新篇章

在一个阳光明媚的午后&#xff0c;记者来到了位于城市繁华地段的云仓酒庄。走进云仓酒庄&#xff0c;浓郁的酒香扑鼻而来&#xff0c;配合着柔和的灯光和精致的装饰&#xff0c;记者仿佛置身于一个酒文化的殿堂。在这里&#xff0c;记者有幸采访到了云仓酒庄的负责人&#xff0…

JS如何配合input框实现模糊搜索

在JavaScript中&#xff0c;实现一个模糊搜索的搜索框功能&#xff0c;通常需要以下几个步骤&#xff1a; 创建一个HTML输入框和一个显示搜索结果的元素。监听输入框的input事件&#xff0c;当用户输入时触发搜索。在事件处理函数中&#xff0c;根据用户输入的关键词进行模糊搜…

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰 【中文名称】氨基聚乙二醇硅烷 【英文名称】Silane-PEG-NH2 【结 构】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度】95%以上 【保 存】-20 【规 格】500mg,1g,5g,10g 【产品特性】 生…

Java中的装箱和拆箱

本文先讲述装箱和拆箱最基本的东西&#xff0c;再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 目录&#xff1a; 装箱和拆箱概念 装箱和拆箱是如何实现的 面试中相关的问题 装箱和拆箱概念 Java为每种基本数据类型都提供了对应的包装器类型&#xff0c;至于为…

React-Redux(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;React篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-Redux&#xff08;二&#xff09; 目录 react-redux 模块化 redux-thunk react-redu…

ArcGIS加载的各类地图怎么去除服务署名水印

昨天介绍的&#xff1a; 一套图源搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图-CSDN博客文章浏览阅读373次&#xff0c;点赞7次&#xff0c;收藏11次。一体化集成在一起的各类型图源&#xff0c;比如包括影像、清新的出图底图、地形、地图阴影、道路…

富文本回显 p 标签?去不掉怎么办?如何解决?

使用前端框架富文本控件上传的上传的数据&#xff0c;回显到文本框时显示<p></p>标签&#xff0c;并且数据库里面的数据也为带有p标签的数据&#xff0c;如何去掉 解决办法 使用正则表达式来讲HTML的内容进行替换更改&#xff0c;在vue中定义方法 //移除HTML标签…

Leetcode5--最长回文子串(双指针中心扩散法)

题目 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同…

【应用】Spring-Bean注入-xml+注解

Bean注入 | xml配置文件 Bean配置 别名配置 <!--设置别名&#xff1a;在获取Bean的时候可以使用别名获取&#xff0c;原名依旧可用--> <alias name"userT" alias"userNew"/><!--bean就是java对象,由Spring创建和管理--><!--id 是b…

SQL Server详细使用教程

SQL Server 是 Microsoft 公司开发的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;用于存储和检索数据。以下是 SQL Server 的详细使用教程&#xff1a; 目录 1. 安装 SQL Server 2. 连接到 SQL Server 3. 创建数据库 4. 创建数据表 5. 插入数据 6. 查…

中图分类法的正则表达式参考

文章目录 1. 中图分类法2. 正则表达式3. 使用方法4. 参考 1. 中图分类法 中图分类法&#xff0c;全称为《中国图书馆图书分类法》&#xff0c;简称《中图法》&#xff0c;是中国国内普遍采用的一种图书分类体系&#xff0c;用于组织和管理图书馆藏书&#xff0c;方便读者查找和…

Axure实现导航栏的展开与收缩

Axure实现导航栏的展开与收缩 一、概要介绍二、设计思路三、Axure制作导航栏四、技术细节五、小结 一、概要介绍 使用场景一般是B端后台系统需要以导航栏的展开与收缩实现原型的动态交互&#xff0c;主要使用区域是左边或者顶部的导航栏展开与收缩&#xff0c;同一级导航下的小…

MySQL-09-mysql 存储过程入门介绍

拓展阅读 MySQL 00 View MySQL 01 Ruler mysql 日常开发规范 MySQL 02 truncate table 与 delete 清空表的区别和坑 MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column MySQL 04 EMOJI 表情与 UTF8MB4 的故事 MySQL 05 MySQL入门教程&a…

Android 自定义SwitchPreference

1. 为SwitchPreference 添加背景&#xff1a;custom_preference_background.xml <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item><shape android:s…

03-JAVA设计模式-组合模式

组合模式 什么是组合模式 组合模式&#xff08;Composite Pattern&#xff09;允许你将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构&#xff0c;并且能像单独对象一…

mongodbTemplate 修改JSON [key: ‘1‘, key2: [{id:1, name: ‘name‘}] 中 key2.name属性

问题描述 mongodbTemplate 修改JSON [key: ‘1‘, key2: [{id:1, name: ‘name‘}] 中 key2.name属性 代码 Query query Query.query(Criteria.where("key").is(1) .and("key2.id").is(1) …

python基础——类型注解【变量,函数,Union】

&#x1f4dd;前言&#xff1a; 上一篇文章Python基础——面相对象的三大特征提到&#xff0c;python中的多态&#xff0c;python中&#xff0c;类型是动态的&#xff0c;这意味着我们不需要在声明变量时指定其类型。然而&#xff0c;这可能导致运行时错误&#xff0c;因为我们…

Win10系统VScode远程连接VirtualBox安装的Ubuntu20.04.5

1.打开虚拟机&#xff0c;在中端中输入命令: sudo apt-get install openssh-server 安装ssh 我这里已经安装完成&#xff0c;故显示是这样 2.输入命令&#xff1a;sudo systemctl start ssh 启动远程连接 注意&#xff0c;如果使用VirtualBox安装的虚拟机&#xff0c;需要启用…