Given tall matrix $B \in \mathbf{R}^{n \times r}$, where $n \gg r$, let
$$ A := B B^T $$ and the columns of $B$ are in general not orthogonal to each other.
I would like to get the eigenvectors and values of $A$ efficiently. I think the number of eigenvalues $\lambda_n > 0$ and the rank of $A$ is at a maximum $n$.
I think one solution could be power iteration, which can be done in an efficient calculation order $$x_{k+1} = \frac{Ax_k}{\|Ax_k\|} \\= \frac{ B (B^Tx_k)}{\| B (B^T x_k)\|} $$ and extended for the second to nth eigenvalue by concatenating the previous found eigenvectors $v_i$ and the square root of the eigenvalue $\lambda_i$ to $B$
$\hat{B}_{i+1}=[\hat{B}_i \hspace{8pt} -\sqrt{\lambda_i}v_i]$ and $\hat{B}_1=B$.
However, I assume that there could be another solution, as I would like to have all eigenvectors, that should be as far as i understand in the subspace of B.
Is there any other solution not depending on power iteration and e.g. doing full PCA in the subspace of $B$ and converting it back afterward?