Я пытаюсь создать код для LU-разложения любой матрицы, и мой тестовый пример - матрица Гильберта 12x12. Это моя попытка кода до сих пор:
import numpy as np
import scipy.linalg as sla
def LU_factorization_onesonL(A):
if type(A) != np.array:
a = np.array(A)
else:
a = A
if a.shape[0] != a.shape[1]:
result = 'factorización imposible.'
n = a.shape[0]
L = np.zeros(n)
U = np.zeros(n)
L[0][0] = 1
U[0][0] = a[0][0]
if L[0][0]*U[0][0] == 0:
result = 'factorización imposible.'
else:
for j in range(1, n+1):
U[0][j] = a[0][j]/L[0][0]
L[j][0] = a[j][0]/U[0][0]
for i in range(1, n):
L[i][i] = 1
U[i][i] = a[i][i]-sum([L[i][k]*U[i][k] for k in range(0, i)])
if L[i][i]*U[i][i] == 0:
result = 'factorización imposible.'
else:
for j in range(i+1, n+1):
U[i][j] = (a[i][j]-sum([L[i][k]*U[k][j] for k in range(0, i)]))/L[i][i]
L[j][i] = (a[j][i]-sum([L[j][k]*U[k][i] for k in range(0, i)]))/L[i][i]
L[n][n] = 1
U[n][n] = a[n][n]-sum([L[n][k]*U[k][n] for k in range(0, n)])
return L, U
print(LU_factorization_onesonL(sla.hilbert(12)))
, но когда я делаю тестовый пример, я получаю код ошибки
Traceback (most recent call last):
File "C:/Users/Armando Rosas/PycharmProjects/untitled/LU_fact.py", line 37, in <module>
print(LU_factorization_onesonL(sla.hilbert(12)))
File "C:/Users/Armando Rosas/PycharmProjects/untitled/LU_fact.py", line 15, in LU_factorization_onesonL
L[0][0] = 1
TypeError: 'numpy.float64' object does not support item assignment
Process finished with exit code 1
как мне избежать вызова numpy. float64 на матрице L? следует определить его с самого начала как пустую матрицу и реструктурировать код, чтобы сделать много добавлений?