Source code for optalg.lin_solver.superlu
#****************************************************#
# This file is part of OPTALG. #
# #
# Copyright (c) 2015, Tomas Tinoco De Rubira. #
# #
# OPTALG is released under the BSD 2-clause license. #
#****************************************************#
from .lin_solver import LinSolver
from scipy.sparse.linalg import splu
from scipy.sparse import csc_matrix,triu
[docs]class LinSolverSUPERLU(LinSolver):
"""
Linear solver based on SuperLU.
"""
def __init__(self,prop='unsymmetric'):
"""
Linear solver based on SuperLU.
"""
# Parent
LinSolver.__init__(self,prop)
# Name
self.name = 'superlu'
# Factorization
self.lu = None
def factorize(self,A):
"""
Factorizes A.
Parameters
----------
A : matrix
For symmetric systems, should contain only lower diagonal part.
"""
A = csc_matrix(A)
if self.prop == self.SYMMETRIC:
A = (A + A.T) - triu(A)
self.lu = splu(A)
def solve(self,b):
"""
Solves system Ax=b.
Parameters
----------
b : ndarray
Returns
-------
x : ndarray
"""
return self.lu.solve(b)