基于LU分解的矩阵求逆

本文介绍了通过LU分解实现矩阵求逆的方法,包括方阵的LU分解、求逆及上、下三角阵求逆。程序避免了for循环,利用numpy进行矩阵计算,提高了效率。并强调在做初等行变换时应将E矩阵置于U之前,同时指出之前尝试的A=LU到A=PDQ的转换在原理上的错误。
摘要由CSDN通过智能技术生成


import numpy as np
import sys


def LU_deco_inverse(m):
	dim = m.shape[0]
	E = np.mat(np.eye(dim))
	L = np.mat(np.eye(dim))
	U = m.copy()
	for i in range(dim):
		if abs(m[i,i]) < 1e-8:
			print("zero pivot encoUnted")
			sys.exit()
		# 上面L=m.copy()时用这个,然后我们将其改进先使其初始为单位阵
		# L[:i,i] = 0
		# L[i:dim,i] = U[i:dim,i] / U[i,i]
		L[i+1:,i] = U[i+1:,i] / U[i,i]

		# E[i+1:dim,i+1:dim] = E[i+1:dim,i+1:dim] - L[i+1:dim,i]*E[i,i+1:dim]
		# 行变换应该是整个一行的变,而不是上面写的变部分,另E的变换一定要在U之前。
		# 这里还将dim去掉因为意思就是从j+1到最后一个元素,可省略dim看起来没那么晕。
		E[i+1:,:] = E[i+1:,:] - L[i+1:,i]*E[i,:]
		U[i+1:,:] = U[i+1:,:] - L[i+1:,i]*U[i,:]
		# U[i+1:dim,:i+1] = 0
		# U[i+1:dim,i+1:dim] = U[i+1:dim,i+1:dim] - L[i+1:dim,i]*U[i,i+1:dim]
		# 上
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值