# LAPACK DGGEVX: BALANC option

I'm using DGGEVX routine from LAPACKE with BALANC option as shown below, but to my surprise changing BALANC option from 'N' to 'P' or 'S' or 'B' has no effect on the output Eigen values & vectors. Does anybody know why?

info=LAPACKE_dggevx(LAPACK_COL_MAJOR,'B','V','V','N',n,a,n,b,n,alphar,alphai,beta,vl,n,vr,n,&ilo,&ihi,lscale,rscale,&abnrm,&bbnrm,rconde,rcondv);


• Are the outputs exactly the same or approximately the same? According to dggevx.f, you should be able to examine L/RSCALE to see what permutations and scaling were applied. – Kirill Dec 3 '14 at 22:05
• @Kirill When BALANC is set to 'N' all elements of lscale and rscale are equal to 1.0. When BALANC is set to 'P' or 'B' the elements of lscale and rscale are 1.0, 2.0, 3.0, ..., 156.0 (array dimension is 156). When BALANC is set to 'S', most of the elements of lscale and rscale are 1.0 and some of them are 10.0 or 100.0 or 10000.0 or 1000000.0 or 10000000.0 (multiples of 10.0). – user3853917 Dec 4 '14 at 14:28
• @Kirill After double-checking, realized that for example when BALANC is set to 'S', most of the Eigen vectors are exactly the same but some of them are different. – user3853917 Dec 4 '14 at 14:46

In dggevx.f, there is the following paragraph:

*  Optionally also, it computes a balancing transformation to improve
*  the conditioning of the eigenvalues and eigenvectors (ILO, IHI,
*  LSCALE, RSCALE, ABNRM, and BBNRM), reciprocal condition numbers for
*  the eigenvalues (RCONDE), and reciprocal condition numbers for the
*  right eigenvectors (RCONDV).


Such balancing transformations are aimed at improving the conditioning of the computation. If successful, this makes the results more accurate (not completely accurate, though).

In your case, since you see that some but not all of the outputs are different, and that balancing is actually performed, the most likely interpretation is that the results without balancing were already pretty accurate, so improving the conditioning of the system did not make them much more accurate than that. The outputs that did change are more accurate now than they used to be.

To check whether this interpretation is right, you'd need to say more about your matrices, their condition numbers, etc. Many of such special options are aimed at calculations involving poorly conditioned matrices, for which they can make a difference. If your matrices have small condition numbers, this won't have much of an effect.

• My matrices are 156x156 and are stiffness and mass matrices of an unstable structure. Due to instability, among 156 Eigen values, I have 6 Eigen values which are very close to zero. Those 6 small Eigen values are corresponding to rigid-body mode shapes of the unstable structure, i.e. 3 translational and 3 rotational rigid-body modes. When BALANC is set to 'S', looks like the lscale and rscale elements corresponding to those 6 rigid-body modes are very large like 100.0, 10000.0, 10000000.0, .... Other than those 6, the rest of scales are usually 1.0 or sometimes 10.0. – user3853917 Dec 5 '14 at 13:56