Вот код функции. Видимо, где-то образуется вечный цикл. Не пойму, где ошибка.
diag (A) - проверяет, матрица с диагональным преобладанием или нет
transpose(A) - транспонирует матрицу
mmultiply(A, B) - перемножение матриц
vmultiply(A, b) - умножает матрицу на вектор
vnorm(a) - евклидова норма вектора
vsub(a, b) - вычитает вектор b из a
def SeidelSolve(A, b, eps):
if (diag(A) == False):
AT = [[0]*len(A)]*len(A[0])
AT = transpose(A)
A = mmultiply(AT,A)
b = vmultiply(AT,b)
C = [[0]*len(A[0])]*len(A)
d = [0]*len(A)
for i in range(len(A)):
d[i] = b[i]
for j in range(len(A[0])):
C[i][j] = A[i][j]
for i in range(len(C)):
diag1 = C[i][i]
C[i][i] = 0
for j in range(len(C[0])):
if i!=j:
C[i][j] = -C[i][j]/diag1
d[i] = d[i]/diag1
x = [0]*len(A)
for i in range(len(A)):
x[i] = d[i]
while True:
for i in range(len(C)):
xtemp = 0
for j in range(len(C[0])):
xtemp += C[i][j]*x[j]
x[i] = xtemp
x[i] += d[i]
if (vnorm(vsub(vmultiply(A, x), b)) <= eps):
break
return x