Не могу решить СЛАУ методом Гаусса в питоне
Размерности полученной матрицы и вектора подходят, почему выдает такую ошибку: 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)
Что не так и как это исправить?