@marina1532

Где ошибка в реализации метода Зейделя для решения СЛАУ на Python?

Вот код функции. Видимо, где-то образуется вечный цикл. Не пойму, где ошибка.
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
  • Вопрос задан
  • 704 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы