我正在编写代码来在python中进行Gauss-Jordan消除。我的指示如下:
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数组。任何想法都非常感谢!
答案 0 :(得分: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矩阵的所有行。希望这有帮助。