I'm writing some code on a distributed platform, using some programming language like Hadoop, and now I need to calculate the K smallest eigenvalues for a Large Matrix.
K is a small constant at most 100. The Matrix is real symmetric and positive semi-definite, but it's large such as 50000 * 50000 matrix. And it ensures all the eigenvalues are non-negative.
I know there are many methods to solve the question, e.g. QR algorithm (based on writing the matrix as a product of an orthogonal matrix and an upper triangular matrix)
But due to the restriction of the platform, it only supports the matrix computation as below:
- the sum, difference or product of two matrix
- Matrix can be multiplied or divides by a real number
- dot product of two vector
- the trace or transpose of a Matrix
- restricted SVD(Singular Value Decomposition) of a Matrix. Since the matrix $A$ is real symmetric, we get $A^*=A$. I multiply $A$ by itself and have $B=A^*A=A^2$, so the singular value of $B$ is the square of the eigenvalue of $A$, that's the method what I tried before .But the SVD on the platform can only show the 1024 largest singular values of the Matrix(what I need is K smallest), that's why I call it "restricted"
There are also some other methods I write it by myself, such as getting any row or column of the Matrix, but it's not efficient and the cost time is O(n^2),where n is the matrix row size.So if possible, I hope your advice would use the methods not too much, thanks a lot
I have tried to solve the question for 2 weeks, but it seems too hard for me. Any information useful for my question is fine , thank you :D