Не могу решить СЛАУ методом Гаусса в питоне

Размерности полученной матрицы и вектора подходят, почему выдает такую ошибку: Traceback (most recent call last): File "", line 73, in File "job_6.py", line 130, in File "job_6.py", line 119, in gauss_method IndexError: list index out of range Сама программа:

# Чтение данных из файла txt для матрицы A
with open('A.txt', 'r') as file:
    data = file.readlines()
# Преобразование строк в числа с плавающей точкой и разделение на строки
matrixA = [list(map(lambda x: float(x.replace(',', '.')), A.split())) for A in data]
# Чтение данных из файла txt для матрицы Y1
with open('Y1.txt', 'r') as file:
    data = file.readlines()
# Преобразование строк в числа с плавающей точкой и разделение на строки
Y1 = [list(map(lambda x: float(x.replace(',', '.')), line.split())) for line in data]
# Чтение данных из файла txt для матрицы Y2
with open('Y2.txt', 'r') as file:
    data = file.readlines()
# Преобразование строк в числа с плавающей точкой и разделение на строки
Y2 = [list(map(lambda x: float(x.replace(',', '.')), line.split())) for line in data]
# Создание матрицы с комплексными числами
Y = []
for i in range(len(Y1)):
    row = []
    for j in range(len(Y1[i])):
        complex_num = complex(Y1[i][j], Y2[i][j])
        row.append(complex_num)
    Y.append(row)
# Объединение двух версий функции matrix_multiplication
def matrix_multiplication(mat1, mat2):
    complex_matrix = [[0 for _ in range(len(mat2[0]))] for _ in range(len(mat1))]
    for i in range(len(mat1)):
        for j in range(len(mat2[0])):
            for k in range(len(mat2)):
                complex_matrix[i][j] += mat1[i][k] * mat2[k][j]
    return complex_matrix
complex_matrix = matrix_multiplication(matrixA, Y)

# Транспонирование матрицы A и вывод результата на экран
transposed_matrixA = list(zip(*matrixA))
# Определение функции умножения матриц
def matrix_multiplication(mat1, mat2):
    resultB = [[0 for _ in range(len(mat2[0]))] for _ in range(len(mat1))]
    for i in range(len(mat1)):
        for j in range(len(mat2[0])):
            for k in range(len(mat2)):
                resultB [i][j] += mat1[i][k] * mat2[k][j]
    return resultB
# Умножение результирующей матрицы на транспонированную матрицу A
resultB = matrix_multiplication(transposed_matrixA, complex_matrix) 
for row in resultB:
    print(row)
# Умножение каждого элемента матрицы на -1
negative_matrixA = [[-1 * element for element in row] for row in matrixA]
# Чтение данных из файла txt
with open('E.txt', 'r') as file:
    data = file.readlines()
# Преобразование строк в числа с плавающей точкой и разделение на строки
matrix = [list(map(lambda x: float(x.replace(',', '.')), E.split())) for E in data]
# Определение функции умножения матриц
def matrix_multiplication(mat1, mat2):
    complex_matrix1 = [[0 for _ in range(len(mat2[0]))] for _ in range(len(mat1))]
    for i in range(len(mat1)):
        for j in range(len(mat2[0])):
            for k in range(len(mat2)):
                complex_matrix1 [i][j] += mat1[i][k] * mat2[k][j]
    return complex_matrix1 
# Умножение результирующей матрицы на матрицу matrix
complex_matrix1 = matrix_multiplication(matrix, Y)

# Чтение данных из файла txt
with open('J.txt', 'r') as file:
    data = file.readlines()
# Преобразование строк в числа с плавающей точкой и разделение на строки
matrixJ = [list(map(lambda x: float(x.replace(',', '.')), J.split())) for J in data]
# Определение функции умножения матриц
def matrix_addition(mat1, mat2):
    result = [[0 for _ in range(len(mat1[0]))] for _ in range(len(mat1))]
    for i in range(len(mat1)):
        for j in range(len(mat1[0])):
            result [i][j] = mat1[i][j] + mat2[i][j]
    return result
# Сложение результирующей матрицы с матрицей matrix
result = matrix_addition(matrixJ, complex_matrix1)

# Определение функции умножения матриц
def matrix_multiplication(mat1, mat2):
    complex_matrix2 = [[0 for _ in range(len(mat2[0]))] for _ in range(len(mat1))]
    for i in range(len(mat1)):
        for j in range(len(mat2[0])):
            for k in range(len(mat2)):
                complex_matrix2 [i][j] += mat1[i][k] * mat2[k][j]
    return complex_matrix2 
# Умножение результирующей матрицы на матрицу matrix
complex_matrix2 = matrix_multiplication(result, negative_matrixA)
for row in complex_matrix2:
    print(row)
def gauss_method(matrix, vector):
    # Размерность матрицы
    n = len(matrix)
    
    # Проход по каждой строке
    for i in range(n):
        # Поиск максимального элемента в столбце
        max_el = abs(matrix[i][i])
        max_row = i
        for k in range(i + 1, n):
            if abs(matrix[k][i]) > max_el:
                max_el = abs(matrix[k][i])
                max_row = k

        # Перестановка строк для получения максимального элемента на диагонали
        matrix[i], matrix[max_row] = matrix[max_row], matrix[i]
        vector[i], vector[max_row] = vector[max_row], vector[i]

        # Приведение к верхнетреугольному виду
        for k in range(i + 1, n):
            c = -matrix[k][i] / matrix[i][i]
            for j in range(i, n):
                if i == j:
                    matrix[k][j] = 0
                else:
                    matrix[k][j] += c * matrix[i][j]
            vector[k] += c * vector[i]

    # Обратный ход метода Гаусса
    x = [0 for _ in range(n)]
    for i in range(n - 1, -1, -1):
        x[i] = vector[i] / matrix[i][i]
        for k in range(i - 1, -1, -1):
            vector[k] -= matrix[k][i] * x[i]
    return x

# Вызов функции gauss_method и вывод результата
x = gauss_method(resultB, complex_matrix2)
print(x)

Что не так и как это исправить?


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