Source code for optalg.lin_solver.umfpack

#****************************************************#
# 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 import csc_matrix, triu

[docs]class LinSolverUMFPACK(LinSolver): """ Linear solver based on UMFPACK. """ def __init__(self, prop='unsymmetric'): """ Linear solver based on UMFPACK. """ # Import umfpack from scikits import umfpack self.umfpack = umfpack # Parent LinSolver.__init__(self,prop) # Name self.name = 'umfpack' # 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 = self.umfpack.splu(A) def solve(self, b): """ Solves system Ax=b. Parameters ---------- b : ndarray Returns ------- x : ndarray """ return self.lu.solve(b)