bool symmetricevd(ap::real_2d_array a, int n, int zneeded, bool isupper, ap::real_1d_array& d, ap::real_2d_array& z) { bool result; ap::real_1d_array tau; ap::real_1d_array e; ap::ap_error::make_assertion(zneeded==0||zneeded==1, "SymmetricEVD: incorrect ZNeeded"); totridiagonal(a, n, isupper, tau, d, e); if( zneeded==1 ) { unpackqfromtridiagonal(a, n, isupper, tau, z); } result = tridiagonalevd(d, e, n, zneeded, z); return result; }
/************************************************************************* Obsolete 1-based subroutine *************************************************************************/ bool symmetriceigenvaluesandvectorsbyindexes(ap::real_2d_array a, int n, int zneeded, bool isupper, int i1, int i2, ap::real_1d_array& w, ap::real_2d_array& z) { bool result; ap::real_1d_array tau; ap::real_1d_array e; ap::ap_error::make_assertion(zneeded==0||zneeded==1, "SymmetricEigenValuesAndVectorsInInterval: incorrect ZNeeded"); totridiagonal(a, n, isupper, tau, w, e); if( zneeded==1 ) { unpackqfromtridiagonal(a, n, isupper, tau, z); } result = tridiagonaleigenvaluesandvectorsbyindexes(w, e, n, zneeded, i1, i2, z); return result; }