Exemple #1
0
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;
}