Mercurial > hg > octave-nkf
diff liboctave/EIG.cc @ 3585:d9803711e047
[project @ 2000-02-08 04:35:39 by jwe]
author | jwe |
---|---|
date | Tue, 08 Feb 2000 04:35:47 +0000 |
parents | 09a3064a3a17 |
children | 7da18459c08b |
line wrap: on
line diff
--- a/liboctave/EIG.cc +++ b/liboctave/EIG.cc @@ -160,7 +160,7 @@ Matrix atmp = a; double *tmp_data = atmp.fortran_vec (); - Array<double> wr (n); + ColumnVector wr (n); double *pwr = wr.fortran_vec (); // XXX FIXME XXX -- it might be possible to choose a better value of @@ -175,19 +175,12 @@ if (f77_exception_encountered || info < 0) (*current_liboctave_error_handler) ("unrecoverable error in dsyev"); + else if (info > 0) + (*current_liboctave_error_handler) ("dsyev failed to converge"); else { - if (info > 0) - (*current_liboctave_error_handler) ("dsyev failed to converge"); - else - { - lambda.resize (n); - - for (int j = 0; j < n; j++) - lambda.elem (j) = Complex (wr.elem (j)); - - v = atmp; - } + lambda = ComplexColumnVector (wr); + v = ComplexMatrix (atmp); } return info; @@ -264,8 +257,8 @@ ComplexMatrix atmp = a; Complex *tmp_data = atmp.fortran_vec (); - ColumnVector w (n); - double *pw = w.fortran_vec (); + ColumnVector wr (n); + double *pwr = wr.fortran_vec (); // XXX FIXME XXX -- it might be possible to choose a better value of // lwork that would result in more efficient computations. @@ -278,7 +271,7 @@ Array<double> rwork (lrwork); double *prwork = rwork.fortran_vec (); - F77_XFCN (zheev, ZHEEV, ("V", "U", n, tmp_data, n, pw, pwork, + F77_XFCN (zheev, ZHEEV, ("V", "U", n, tmp_data, n, pwr, pwork, lwork, prwork, info, 1L, 1L)); if (f77_exception_encountered || info < 0) @@ -287,8 +280,8 @@ (*current_liboctave_error_handler) ("zheev failed to converge"); else { - lambda = w; - v = atmp; + lambda = ComplexColumnVector (wr); + v = ComplexMatrix (atmp); } return info;