проверка кода для LU-факторизации матрицы - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь создать код для 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? следует определить его с самого начала как пустую матрицу и реструктурировать код, чтобы сделать много добавлений?

...