矩阵复杂度的精确反演(通过高斯消元法)

时间:2013-10-29 14:41:35

标签: matrix

我想检查一下我所做的是否正确。请,任何意见都表示赞赏。

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

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

让$ [A | I] $成为增强的$ n $ x $ 2n $矩阵。

INPUT:未知数和方程n,增广矩阵

OUTPUT:$ A ^ { - 1} $,前提是反向存在

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

步骤2:让$ p $为$ i \ leq p \ leq n $的最小整数,使$ a_ {pi} \ neq 0 $。如果不存在整数$ p $则输出('不存在唯一解决方案'); STOP

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

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

第5步:设置$ m_ {ji} = a_ {ji} / a_ {ii} $。

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

步骤7:如果$ a_ {nn} = 0 $,则输出NO UNIQUE SOLUTION EXISTS并停止

步骤8:对于$ i = n-1,n-2,\ dots,1 $,
对于$ j = i + 1,i,\ dots,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} \ rightarrow E_i $

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

我的操作计数如下:总共$(2n ^ 3 + 9n ^ 2 + n)/ 3 $乘法和除法和总计$(2n ^ 3 + 6n ^ 2-8n)/ 3 $增加和减少总计$ 4n ^ 3/3 + 5n ^ 2 - 7n / 3 $操作。 听起来不错吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

给定非奇异矩阵A.构造一个使用高斯消元法找到$ A ^ { - 1} $的算法 我有同样的问题和did it在python:

#Helper functions:
def check_zeros(A,I,row, col=0):
"""
returns recursively the next non zero matrix row A[i]
"""
if A[row, col] != 0:
    return row
else:
    if row+1 == len(A):
        return "The Determinant is Zero"
    return check_zeros(A,I,row+1, col)

def swap_rows(M,I,row,index):
"""
swaps two rows in a matrix
"""
swap = M[row].copy()
M[row], M[index] = M[index], swap
swap = I[row].copy()
I[row], I[index] = I[index], swap

# Your Matrix M
M = np.array([[0,1,5,2],[0,4,9,23],[5,4,3,5],[2,3,1,5]], dtype=float)
I = np.identity(len(M))

M_copy = M.copy()
rows = len(M)

for i in range(rows):
index =check_zeros(M,I,i,i)
while index>i:
    swap_rows(M, I, i, index)
    print "swaped"
    index =check_zeros(M,I,i,i) 

I[i]=I[i]/M[i,i]
M[i]=M[i]/M[i,i]   

for j in range(rows):
    if j !=i:
        I[j] = I[j] - I[i]*M[j,i]
        M[j] = M[j] - M[i]*M[j,i]
print M
print I  #The Inverse Matrix