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…

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标签…

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

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

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;并且能像单独对象一…

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;需要启用…

Jmeter03:直连数据库

1 Jmete组件&#xff1a;直连数据库 1.1 是什么&#xff1f; 让Jmeter直接和数据库交互 1.2 为什么&#xff1f; 之前是通过接口操作数据库&#xff0c;可能出现的问题&#xff1a;比如查询可能有漏查误查的情况&#xff0c;解决方案是人工对不&#xff0c;效率低且有安全隐患…

Spring核心容器总结

2.2 核心容器总结 2.2.1 容器相关 BeanFactory是IoC容器的顶层接口&#xff0c;初始化BeanFactory对象时&#xff0c;加载的bean延迟加载 ApplicationContext接口是Spring容器的核心接口&#xff0c;初始化时bean立即加载 ApplicationContext接口提供基础的bean操作相关方法…

了解 Unity AI:从初学者到高级的综合指南

游戏中的AI是什么? 游戏中的人工智能是指利用人工智能技术使视频游戏中的非玩家角色和实体智能地行动、做出决策、对游戏环境做出反应,并提供引人入胜的动态游戏体验。什么是NPC? NPC 代表“非玩家角色”。NPC 是视频游戏、角色扮演游戏中不受人类玩家控制的角色。它们是计算…

Springboot+Vue项目-基于Java+MySQL的蜗牛兼职网系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

Pytest精通指南(01)介绍与基本使用

文章目录 Pytest 简介Pytest 官网Pytest 核心Pytest 原理Pytest 用途Pytest 特点Pytest 安装Pytest 编写测试用例规则Pytest 编写第一条测试用例用例代码示例可执行测试执行一条测试执行多条测试 Pytest 运行方式run模式pytest模式run模式扩展命令行模式 Pytest.main()常用命令…

【Golang】并发编程之三大问题:原子性、有序性、可见性

目录 一、前言二、概念理解2.1 有序性2.2 原子性后果1&#xff1a;其它线程会读到中间态结果&#xff1a;后果2&#xff1a;修改结果被覆盖 2.3 可见性1&#xff09;store buffer(FIFO)引起的类似store-load乱序现象2&#xff09;store buffer(非FIFO)引起的类似store-store乱序…

太阳能智能语音卡口:环保与智能的完美结合/恒峰智慧科技

随着科技的飞速发展&#xff0c;我们的生活正在经历前所未有的变革。在这场变革中&#xff0c;太阳能智能语音卡口以其独特的魅力&#xff0c;成为环保与智能的完美结合&#xff0c;为我们的生活带来了更多的便捷和环保。 太阳能智能语音卡口&#xff0c;顾名思义&#xff0c;是…