SuperLU#
- класс scipy.sparse.linalg.SuperLU#
LU-факторизация разреженной матрицы.
Факторизация представлена как:
Pr @ A @ Pc = L @ U
Для построения этих
SuperLUобъекты, вызовитеspluиspiluфункций.- Атрибуты:
shapeФорма исходной матрицы в виде кортежа целых чисел.
nnzКоличество ненулевых элементов в матрице.
perm_cПерестановка Pc представлена в виде массива индексов.
perm_rПерестановка Pr представлена в виде массива индексов.
LНижний треугольный множитель с единичной диагональю как
scipy.sparse.csc_array.UВерхний треугольный множитель как
scipy.sparse.csc_array.
Методы
solve(rhs[, trans])Решает систему линейных уравнений с одной или несколькими правыми частями.
Примечания
Добавлено в версии 0.14.0.
Примеры
LU-разложение можно использовать для решения матричных уравнений. Рассмотрим:
>>> import numpy as np >>> from scipy.sparse import csc_array >>> from scipy.sparse.linalg import splu >>> A = csc_array([[1,2,0,4], [1,0,0,1], [1,0,2,1], [2,2,1,0.]])
Это можно решить для заданной правой части:
>>> lu = splu(A) >>> b = np.array([1, 2, 3, 4]) >>> x = lu.solve(b) >>> A.dot(x) array([ 1., 2., 3., 4.])
The
luобъект также содержит явное представление разложения. Перестановки представлены как отображения индексов:>>> lu.perm_r array([2, 1, 3, 0], dtype=int32) # may vary >>> lu.perm_c array([0, 1, 3, 2], dtype=int32) # may vary
Факторы L и U являются разреженными матрицами в формате CSC:
>>> lu.L.toarray() array([[ 1. , 0. , 0. , 0. ], # may vary [ 0.5, 1. , 0. , 0. ], [ 0.5, -1. , 1. , 0. ], [ 0.5, 1. , 0. , 1. ]]) >>> lu.U.toarray() array([[ 2. , 2. , 0. , 1. ], # may vary [ 0. , -1. , 1. , -0.5], [ 0. , 0. , 5. , -1. ], [ 0. , 0. , 0. , 2. ]])
Матрицы перестановок могут быть построены:
>>> Pr = csc_array((np.ones(4), (lu.perm_r, np.arange(4)))) >>> Pc = csc_array((np.ones(4), (np.arange(4), lu.perm_c)))
Мы можем восстановить исходную матрицу:
>>> (Pr.T @ (lu.L @ lu.U) @ Pc.T).toarray() array([[ 1., 2., 0., 4.], [ 1., 0., 0., 1.], [ 1., 0., 2., 1.], [ 2., 2., 1., 0.]])