Проблема с решением системы линейных алгебраических уравнений методом нижней релаксации

Всем добрый день. Нужна ваша помощь. По заданию нужно решить СЛАУ методом нижней релаксации. Но мой код работает только с матрицами до 3х3, а начиная с 4х4 работает только с очень маленькими значениями. И даже если задать маленькое количество итераций для матрицы 4х4, то в результате выдает значения, которые даже близко не похожи на истинные. Помогите пожалуйста...

import numpy as np

def relax_solver(A, b, omega, initial_guess, convergence_criteria, stop, itera):
    """
    Solve the system of linear equations using the lower relaxation method.
    Inputs:
        A: nxn numpy matrix
        b: n dimensional numpy vector
        omega: relaxation factor
        initial_guess: an initial solution guess for the solver to start with
        stop: maximum number of iterations.
        itera: a flag that determines whether information about each iteration should be printed
    Returns:
        None
    """
    phi = initial_guess[:]
    residual = np.linalg.norm(np.matmul(A, phi) - b) 
    iteration = 0
    while residual > convergence_criteria and stop > iteration:
        for i in range(A.shape[0]):
            sigma = 0
            for j in range(A.shape[1]):
                if j != i:
                    sigma += A[i][j] * phi[j]
            phi[i] = (1 - omega) * phi[i] + (omega / A[i][i]) * (b[i] - sigma)
        residual = np.linalg.norm(np.matmul(A, phi) - b)
        iteration += 1
        if itera == True:
            print(f'Iteration {iteration}, Solution: {", ".join(f"{val:.15f}" for val in phi)}')
            
    print("Solution:", ", ".join(f"{val:.15f}" for val in phi))
    print(f"Number of iterations: {iteration}")

Пробовал с такими входными данными:

A = np.array([[5, 8, -3, 21],
              [-3, 4, 0.5, -8.7],
              [-3.6, 0.34, 3, -76],
              [-5.7, 2.26, -5.6, 9]])

B = np.array([-6, 4, 45, -15], dtype=float)

Ответы (0 шт):