84 lines
2.1 KiB
Python
84 lines
2.1 KiB
Python
"""Backward compatible with LinearAlgebra from Numeric
|
|
"""
|
|
# This module is a lite version of the linalg.py module in SciPy which contains
|
|
# high-level Python interface to the LAPACK library. The lite version
|
|
# only accesses the following LAPACK functions: dgesv, zgesv, dgeev,
|
|
# zgeev, dgesdd, zgesdd, dgelsd, zgelsd, dsyevd, zheevd, dgetrf, dpotrf.
|
|
|
|
|
|
__all__ = ['LinAlgError', 'solve_linear_equations',
|
|
'inverse', 'cholesky_decomposition', 'eigenvalues',
|
|
'Heigenvalues', 'generalized_inverse',
|
|
'determinant', 'singular_value_decomposition',
|
|
'eigenvectors', 'Heigenvectors',
|
|
'linear_least_squares'
|
|
]
|
|
|
|
from numpy.core import transpose
|
|
import numpy.linalg as linalg
|
|
|
|
# Linear equations
|
|
|
|
LinAlgError = linalg.LinAlgError
|
|
|
|
def solve_linear_equations(a, b):
|
|
return linalg.solve(a,b)
|
|
|
|
# Matrix inversion
|
|
|
|
def inverse(a):
|
|
return linalg.inv(a)
|
|
|
|
# Cholesky decomposition
|
|
|
|
def cholesky_decomposition(a):
|
|
return linalg.cholesky(a)
|
|
|
|
# Eigenvalues
|
|
|
|
def eigenvalues(a):
|
|
return linalg.eigvals(a)
|
|
|
|
def Heigenvalues(a, UPLO='L'):
|
|
return linalg.eigvalsh(a,UPLO)
|
|
|
|
# Eigenvectors
|
|
|
|
def eigenvectors(A):
|
|
w, v = linalg.eig(A)
|
|
return w, transpose(v)
|
|
|
|
def Heigenvectors(A):
|
|
w, v = linalg.eigh(A)
|
|
return w, transpose(v)
|
|
|
|
# Generalized inverse
|
|
|
|
def generalized_inverse(a, rcond = 1.e-10):
|
|
return linalg.pinv(a, rcond)
|
|
|
|
# Determinant
|
|
|
|
def determinant(a):
|
|
return linalg.det(a)
|
|
|
|
# Linear Least Squares
|
|
|
|
def linear_least_squares(a, b, rcond=1.e-10):
|
|
"""returns x,resids,rank,s
|
|
where x minimizes 2-norm(|b - Ax|)
|
|
resids is the sum square residuals
|
|
rank is the rank of A
|
|
s is the rank of the singular values of A in descending order
|
|
|
|
If b is a matrix then x is also a matrix with corresponding columns.
|
|
If the rank of A is less than the number of columns of A or greater than
|
|
the number of rows, then residuals will be returned as an empty array
|
|
otherwise resids = sum((b-dot(A,x)**2).
|
|
Singular values less than s[0]*rcond are treated as zero.
|
|
"""
|
|
return linalg.lstsq(a,b,rcond)
|
|
|
|
def singular_value_decomposition(A, full_matrices=0):
|
|
return linalg.svd(A, full_matrices)
|