Dear numerical algebra experts,
I am trying to find $\alpha$ for which $A(\alpha)x=0$ has a non-trivial solution ($x\neq0$), i.e. I am looking for $\alpha_0$ for which the null space of $A(\alpha_0)$ is not empty. A (square, NxN, real) is the coefficient matrix of a physics problem (constructed from boundary conditions and an Ansatz that solves the corresponding diff. equations of interest). My general strategy (performed in Numpy/Scipy but would certainly work analogously in different environments) is
- search for the root $\alpha_0$ in the determinant of $A(\alpha)$
- Perform a SVD of $A(\alpha_0)$: $A(\alpha_0) = UsV$ and compile the null space from $V$ (the row vector that corresponds to the smallest singular value $\sigma$ in $s$).
This strategy works well for certain parameter spaces of $\alpha$: the final result is what I expect (physics-wise) and all numerical parameters behave well.
However, for other parameter spaces of $\alpha$, I observe that I can still find $\alpha_0$ (the root of the determinant) but the final result (the "null space" given by the last row vector of V) does not behave well anymore (discontinuities). After thoroughly checking the behavior of the relevant numerical figure of merits, I figured out that this problem seems to be related to $A(\alpha_0)$ becoming rank-deficient (in a numerical sense): using a common threshold definition of max($\sigma)\times N \times$ (machine epsilon), the described problem starts to occur once the second (or even third) smallest $\sigma$ exceeds this threshold by a certain value (cannot exactly nail it).
In conclusion, it seems there are issues with the floating-point precision during the SVD. Since working on a machine with better precision is not really on option, I am somehow stuck at this point. Is there any strategy (or hint) on how to proceed?
Any feedback is highly appreciated!
Update:
I followed the nice idea proposed by Ben Grossmann. However, it did not work out completely since the scaling of $A(\alpha)$ being ill-conditioned seems to be highly unfortunate. Nevertheless, I figured out that some elements of $A$ scaled (in magnitude) signifianctly worse than the others (which might explain why a global rescaling/preconditioning did not fully work). So I did a manual rescaling (preconditioning) of only these elements for an $\alpha$ in the center of the parameter space of interest. This worked out quite nicely and allowed me to solve the issue. Thanks @ Ben.