Background
I'm working on a project involving solving large underdetermined systems of equations.
My current algorithm calculates SVD (numpy.linalg.svd) of a matrix representing the given system, then uses its results to calculate the Moore-Penrose pseudoinverse and the right nullspace of the matrix. I use the nullspace to find all variables with unique solutions, and the pseudo-inverse to find out it's value.
However, the MPP (Moore Penrose pseudo-inverse) is quite dense and is a bit too large for my server to handle.
Problem
I found the following paper which details a sparser pseudoinverse that maintains most of the essential properties of the MPP. This is obviously of much interest to me, but I simply don't have the math background to understand how he's calculating the pseudoinverse. Is it possible to calculate it with SVD? If not, what's the best way to go about it?
Details
These are the lines of the paper which I think are probably relevant but I'm not antiquated enough to understand
-
spinv(A) = arg min ||B|| subject to BA = In where ||B|| denotes the entrywise l1 norm of B
-
This is in general a non-tractable problem, so we use the standard linear relaxation with the l1 norm
-
sspinv(A) = ητ {[spinv(A)]}, with ητ (u) = u1|u|≥τ
Edit
Find my code and more details on the actual implementation here
from Calculating spinv with SVD
No comments:
Post a Comment