Python 中的高斯约当消元法

问题描述 投票:0回答:1

我正在编写用Python进行高斯-乔丹消除的代码。我的方向如下:

def gauss_jordan(A):
for each row k do
   i* <- argmax_{k<i<n} |A_{ik}|
   if A_{i*k} = 0 then
     Matrix is not invertible
   end if
   Swap rows k and i*
   for each row j below k (i.e. j = k + 1,...,n) do
     f = A_{jk}/A_{kk}
     Aj = Aj - fA_{k}
   end for
end for
for each row k = n,..., 1 (i.e. in reverse) do
   A_{k} = A_{k}=A_{kk}
   for each row j above k (i.e. j = k -1,..., 1) do
     f = A_{jk}/A_{kk}  
     Aj = A_{j}-fA_{k}
   end for
end for

到目前为止我已经:

def gauss_jordan(A):
(h, w) = (len(A), len(A[0]))
for y in range(0,h):          
    for pivot in range(y, h):   
        if A[pivot][y].value % 2 != 0: 
            break 
    else: 
        return None

这是正确的开始吗?我感觉很迷失下一步该去哪里。输入将是一个 Numpy 数组。任何想法都非常感激!

python python-3.x numpy matrix linear-algebra
1个回答
0
投票

您应该做的第一件事是创建增广矩阵。从块角度来看,它看起来像 [A,identity(A.shape[0])],然后按照算法进行求解。你的最终答案将是矩阵的右半部分。我相信你的 for 循环是正确的,但检查不正确。您需要找到 k 列中的最大值。因此,当 k 为 1 时,您将遍历第一列并找到该列中绝对值的最大值并返回其索引。

max_v=-10
index_m=-10
for t in range(k, A.shape[0]):
    if abs(A[t, k]) > max_v:
        max_v = abs(A[t, k])
        index_m = t

请注意,k 是我最外层的循环,它遍历增广 A 矩阵的所有行。希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.