1

我想检查我所做的是否正确。请,任何输入表示赞赏。

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

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

令 $[A|I]$ 是一个增广的 $n$ x $2n$ 矩阵。

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

输出:$A^{-1}$,前提是逆存在

第 1 步:对于 $i=1,\dots,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,\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$ 操作的减法。这听起来对吗?

谢谢你的帮助。

4

1 回答 1

0

给定一个非奇异矩阵 A. 使用高斯消元构造一个算法来找到 $A^{-1}$ 我遇到了同样的问题并在 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
于 2014-09-16T17:00:29.200 回答