PLU-分解

PLU-分解是对LU分解的一种改进,其增加了选主元的操作增加了计算的稳定性,及在第i次循环中将
j=where(max⁡(∣A[i:n,i]∣))j=where(\max(|A[i:n,i]|))j=where(max(∣A[i:n,i]∣)) 行和第i行进行交换来比避免对角元素出现0的情况,计算结果
PA=LUPA=LUPA=LU
P为置换矩阵,L为下三角矩阵,U为上三角矩阵。选主元操作在计算过程中以一个一维数组保存代替n×nn\times nn×n的矩阵,以下为此算法的Fortran代码,a为输入矩阵,l,u,p分别为下三角,上三角,置换矩阵,n为矩阵大小,当erro为0时计算失败,成功则为1

subroutine plu_decompose(a,l,u,p,n,erro)real,intent(inout)::a(n,n)real,intent(out)::l(n,n),u(n,n),p(n,n)integer,intent(in)::ninteger::pi(n)integer,intent(out)::errointeger::i,j,k,maxp,temppreal::maxdo i=1,npi(i)=iend dodo i=1,n-1max=a(i,i)maxp=ido j=i+1,nif (abs(a(j,i))>max) thenmax=abs(a(j,i))maxp=jend ifend doif (max+1.0==1.0) thenerro=0stopend ifif (maxp/=i) thentempp=pi(i)pi(i)=pi(maxp);pi(maxp)=temppa(i:maxp:maxp-i,:)=a(maxp:i:i-maxp,:)end ifdo j=i+1,na(j,i)=a(j,i)/a(i,i)end dodo j=i+1,ndo k=i+1,na(j,k)=a(j,k)-a(j,i)*a(i,k)end doend doend dodo i=1,np(i,i)=0l(i,i)=1u(i,i)=a(i,i)do j=1,i-1p(i,j)=0p(j,i)=0l(i,j)=a(i,j)l(j,i)=0u(j,i)=a(j,i)u(i,j)=0end doend dodo i=1,np(i,pi(i))=1end do
end subroutine

再通过解线性方程组可以得到矩阵 AAA 的逆,代码如下,其中第一次得到的矩阵为一个下三角阵,这样可以节省一半的计算量

subroutine reverse(a,b,n,erro)implicit nonereal,intent(inout)::a(n,n)real,intent(out)::b(n,n)real::l(n,n),u(n,n),p(n,n),c(n,n),tempinteger::n,errointeger::i,j,kcall plu_decompose(a,l,u,p,n,erro)if (erro==0) thenreturnend ifdo i=1,ndo j=1,i-1c(j,i)=0.0end dodo j=i,ntemp=0do k=1,j-1temp=temp+l(j,k)*c(k,i)end doif (i==j)thenc(j,i)=(1.0-temp)/l(j,j)elsec(j,i)=(0.0-temp)/l(j,j)end ifend doend dodo i=1,ndo j=n,1,-1temp=0do k=n,j+1,-1temp=temp+b(k,i)*u(j,k)end dob(j,i)=(c(j,i)-temp)/u(j,j)end doend dob=matmul(b,p)
end subroutine

测试代码如下

program mainimplicit nonereal::a(4,4),a_(4,4)real::l(4,4)real::w(4,4)integer :: i,jinteger:: udata((A(i,j),i=1,4),j=1,4)/ 2,0,2,0.6,3,3,4,-2,5,5,4,2,-1,-2,3.4,-1 /data((a_(i,j),i=1,4),j=1,4)/ 2,0,2,0.6,3,3,4,-2,5,5,4,2,-1,-2,3.4,-1 /a=transpose(a)a_=transpose(a_)do i=1,4print *,a(i,:)end docall reverse(a,l,4,u)w=matmul(a_,l)print *,''do i=1,4print *,w(i,:)end dopause
end program main

PLU-分解以及求逆矩阵相关推荐

  1. Python解决矩阵的PLU分解及求矩阵的逆

    Python解决矩阵的PLU分解及求矩阵的逆 关于PLU的分解基础知识就不叙述了,可以自己去看矩阵分析的书,大体上和高斯消去法差不多. PLU分解被经常用在Ax=bAx=bAx=b的求解上 在这里xx ...

  2. matlab求逆矩阵_MPU6050姿态解算2-欧拉角amp;旋转矩阵

    1 IMU姿态解算 IMU,即惯性测量单元,一般包含三轴陀螺仪与三轴加速度计.之前的文章 码农爱学习:MPU6050姿态解算方式1-DMP​zhuanlan.zhihu.com 已将对MPU6050这 ...

  3. 机器学习常见求逆矩阵的方法

    机器学习的常见求解逆矩阵的方法 高斯消元法 LU分解法 SVD分解法 QR分解法 高斯消元法 高斯消元法是最经典也是最广为人知的一种矩阵求逆方法,但是在现实应用中很少用到高斯消元法来进行矩阵的逆矩阵的 ...

  4. 求逆矩阵计算机方法,求逆矩阵的快速方法(用于编程).pdf

    求逆矩阵的快速方法(用于编程) ? ? 1 2 2 2 Ρ Ρ Ρ Ρ Ρ ? Α Α Α Α Α Α 3 Α Β Β Β 3 Α Β Α Β Α Β Α Β Β Β Β 第 20 卷第 1 期 大 ...

  5. python C++ 求逆矩阵库

    python求逆矩阵库 https://numpy.org/ C++求逆矩阵库 http://eigen.tuxfamily.org/index.php?title=Main_Page

  6. 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)...

    4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 290  Solved: 148 [Submit][Stat ...

  7. 变换例题_用初等变换求逆矩阵的小小解释

    在我们学习逆矩阵的过程中,肯定会遇到这样一种求逆矩阵的方法: 若A是一个n阶可逆矩阵, (虚竖线打不出,凑合着看吧!)这一过程中经历了一系列初等行变换,并且我们下结论说: 中的 就是A的逆矩阵! 按逻 ...

  8. 求逆矩阵计算器_991CN的矩阵运算

    昨天的推文中说了一道二端口的题目,虚线中的大二端口由两个小二端口级联而成,在计算过程中,我们需要使用到矩阵的运算,昨天讲题的时候说会说一下用计算器进行矩阵运算,今天我们就来说一下. 其实在算电路的时候 ...

  9. numpy求逆矩阵_线性代数精华2——逆矩阵的推导过程

    点击上方蓝字,和我一起学技术. 上一讲当中我们复习了行列式的内容,行列式只是开胃小菜,线性代数的大头还是矩阵. 矩阵的定义很简单,就是若干个数按照顺序排列在一起的数表.比如m * n个数,排成一个m ...

  10. 选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵

    选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义 ...

最新文章

  1. android c聊天功能,Android实现简单C/S聊天室应用
  2. HDU6964 I love counting (字典树+莫队)
  3. AngularJS快速入门
  4. 1.10 梯度消失与梯度爆炸-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. jmeter学习笔记(十三)debug调试工具
  6. 计算机丢失qt5sql.ll,电脑中提示丢失Qt5core.dll文件的解决方法
  7. centos7: ifconfig出现command not found解决办法
  8. Cisco网络防火墙配置方法
  9. 前端学习(3211):react中类中方法的this指向三
  10. 微型计算机出版时间,《微型计算机技术》低价购书_陈慈发 主编_计算机与互联网_孔网...
  11. 《复联4》天价票被叫停了?电影局出手了 院线:确实收到口头通知
  12. 电脑配置知识_高品质全铝迷你电脑主机推荐 适合家用/办公/游戏的锐龙APU电脑配置...
  13. C++包含头文件尖括号和双引号的区别
  14. 正定矩阵与半正定矩阵定义性质与理解
  15. 计算机视觉硕士课程南京大学,南京大学计算机系研究生课程文库
  16. 2019JAVA面试题精粹附答案
  17. linux压缩一个tar.xz文件,Linux下解压tar.xz格式压缩文件
  18. SpringSecurity的注解实现方式:@Secured,@PreAuthorize,@PostAuthorize
  19. Unity 3d 中Debug.Log和Print的区别。
  20. AVD安装XPOSED环境

热门文章

  1. 7.MPLS VP恩 后门链路shamlink
  2. 数据库实验报告3-数据库系统设计
  3. 某计算机系学生请假条
  4. 拜登签署数字资产行政令,将研发美国 CBDC 选项置于最紧迫位置
  5. 手机展示mysql实例_mysql 视图示例
  6. Axure PR9左侧页面概要元件母版不见了,在哪开启
  7. python能开发智能家居吗_厉害了!Python竟然可以做智能家居温湿度报警系统
  8. 你不清楚的18个非技术面试题是这些
  9. Qt 5.12--Item详解
  10. h5案例欣赏及分析_如何实现H5可视化编辑器的实时预览和真机扫码预览功能