Matrix 矩阵复杂度的精确反演(高斯消去法)

Matrix 矩阵复杂度的精确反演(高斯消去法),matrix,Matrix,我想检查一下我所做的是否正确。请,任何意见都将不胜感激 问题陈述:< /强>考虑非奇异矩阵$A{nxn}$。构造一个使用高斯消去法来查找$A^{-1}$的算法。提供此算法的操作计数 我尝试的算法和操作计数: 设$[A | I]$为扩充的$n$x$2n$矩阵 输入:未知数和方程数n,扩充矩阵 输出:$A^{-1}$,前提是存在相反的值 步骤1:对于$i=1,n-1$执行步骤2-4 第2步:让$p$是带有$i\leq p\leq n$的最小整数,这样$a{pi}\neq 0$。如果不存在整数$p$

我想检查一下我所做的是否正确。请,任何意见都将不胜感激

<强>问题陈述:< /强>考虑非奇异矩阵$A{nxn}$。构造一个使用高斯消去法来查找$A^{-1}$的算法。提供此算法的操作计数

我尝试的算法和操作计数:

设$[A | I]$为扩充的$n$x$2n$矩阵

输入:未知数和方程数n,扩充矩阵

输出:$A^{-1}$,前提是存在相反的值

步骤1:对于$i=1,n-1$执行步骤2-4

第2步:让$p$是带有$i\leq p\leq n$的最小整数,这样$a{pi}\neq 0$。如果不存在整数$p$,则输出('不存在唯一的解决方案');停止

步骤3:如果$p\neq i$,则执行$E_p\leftrightarrow E_i$

步骤4:对于$j=i+1,n$执行步骤5-6

步骤5:设置$m{ji}=a{ji}/a{ii}$

步骤6:执行$(E_j-m_{ji}E_i)\rightarrow(E_j)$

步骤7:如果$a{nn}=0$,则输出不存在唯一的解决方案并停止

步骤8:对于$i=n-1,n-2,点,1$,
对于$j=i+1,i,1$执行步骤9和10

步骤9:设置$m{ij}=a{ij}/a{jj}$

步骤10:执行$(E_i-m_{ij}E_j)\rightarrow(E_i)$

步骤11:对于$i=1,\ldots,n$,执行$E_i/a_{ii}\right箭头E_i$

步骤12:输出$A^{-1}$并停止

我得到的运算计数如下:总计$(2n^3+9n^2+n)/3$乘法和除法,总计$(2n^3+6n^2-8n)/3$加法和减法,总计$4n^3/3+5n^2-7n/3$运算这听起来对吗?


感谢您的帮助。

给定一个非奇异矩阵a。使用高斯消去法构造一个算法来查找$a^{-1}$ 我在python中遇到了同样的问题:

#辅助函数:
def检查零点(A、I、row、col=0):
"""
递归返回下一个非零矩阵行A[i]
"""
如果是[行,列]!=0:
返回行
其他:
如果行+1==len(A):
返回“行列式为零”
返回检查零(A、I、行+1、列)
def交换_行(M、I、行、索引):
"""
交换矩阵中的两行
"""
swap=M[row].copy()
M[row],M[index]=M[index],交换
swap=I[row].copy()
I[行],I[索引]=I[索引],交换
#你的矩阵M
M=np.数组([[0,1,5,2],[0,4,9,23],[5,4,3,5],[2,3,1,5],[2,3,1,5]),dtype=float)
I=np.恒等式(len(M))
M_copy=M.copy()
行=长度(M)
对于范围内的i(行):
索引=检查零(M,I,I,I)
当索引>i时:
交换行(M、I、I、索引)
打印“swaped”
索引=检查零(M,I,I,I)
I[I]=I[I]/M[I,I]
M[i]=M[i]/M[i,i]
对于范围内的j(行):
如果j=一:
I[j]=I[j]-I[I]*M[j,I]
M[j]=M[j]-M[i]*M[j,i]
打印M
打印I#逆矩阵