I am working on a generalized eigenvalue problem of the form
$$ \boldsymbol{A}\cdot\boldsymbol{x}=\lambda\boldsymbol{B}\cdot\boldsymbol{x} $$
where $\boldsymbol{B}$ is not symmetric positive. Therefore I recast the problem to $$ \boldsymbol{B}^{-1}\cdot(\boldsymbol{A}\cdot\boldsymbol{x})=\lambda\boldsymbol{x}\ . $$ I am lucky: the matrix $\boldsymbol{B}$ is block diagonal. Therefore I can compute the inverse by an LU-factorization of the diagonal blocks.
This eigenvalue problem is then solved with the ARPACK solver. ARPACK is used because of its feature to extract specific parts of the spectrum like eigenvalues with the largest real part. The method works well for small problems.
However, if I increase the problem size, the performance of the ARPACK algorithmen in terms of iterations required increases. The condition number of $\boldsymbol{B}^{-1}\cdot\boldsymbol{A}$ increases heavily up to the order $10^6$.
Is there a way of preconditioning the ARPACK algorithmen to accelerate the convergence?
ncv
at all. But I will try. I am using arpack throughscipy
. My call looks like this `l, v = scipy.sparse.linalg(LinOp, k = 12, which = "SM", tol = 1e-12, maxiter = 200) $\endgroup$