Mercurial > hg > octave-nkf
diff liboctave/dMatrix.cc @ 7071:c3b479e753dd
[project @ 2007-10-26 15:14:34 by jwe]
author | jwe |
---|---|
date | Fri, 26 Oct 2007 15:14:35 +0000 |
parents | f0142f2afdc6 |
children | b48d486f641d |
line wrap: on
line diff
--- a/liboctave/dMatrix.cc +++ b/liboctave/dMatrix.cc @@ -117,9 +117,9 @@ F77_CHAR_ARG_LEN_DECL); F77_RET_T - F77_FUNC (dgelsy, DGELSY) (const octave_idx_type&, const octave_idx_type&, const octave_idx_type&, + F77_FUNC (dgelss, DGELSS) (const octave_idx_type&, const octave_idx_type&, const octave_idx_type&, double*, const octave_idx_type&, double*, - const octave_idx_type&, octave_idx_type*, double&, octave_idx_type&, + const octave_idx_type&, double*, double&, octave_idx_type&, double*, const octave_idx_type&, octave_idx_type&); F77_RET_T @@ -2072,35 +2072,36 @@ double *presult = result.fortran_vec (); - Array<octave_idx_type> jpvt (n); - octave_idx_type *pjpvt = jpvt.fortran_vec (); + octave_idx_type len_s = m < n ? m : n; + Array<double> s (len_s); + double *ps = s.fortran_vec (); double rcond = -1.0; - // Ask DGELSY what the dimension of WORK should be. + // Ask DGELSS what the dimension of WORK should be. octave_idx_type lwork = -1; Array<double> work (1); - F77_XFCN (dgelsy, DGELSY, (m, n, nrhs, tmp_data, m, presult, nrr, pjpvt, + F77_XFCN (dgelss, DGELSS, (m, n, nrhs, tmp_data, m, presult, nrr, ps, rcond, rank, work.fortran_vec (), lwork, info)); if (f77_exception_encountered) - (*current_liboctave_error_handler) ("unrecoverable error in dgelsy"); + (*current_liboctave_error_handler) ("unrecoverable error in dgelss"); else { lwork = static_cast<octave_idx_type> (work(0)); work.resize (lwork); - F77_XFCN (dgelsy, DGELSY, (m, n, nrhs, tmp_data, m, presult, - nrr, pjpvt, rcond, rank, + F77_XFCN (dgelss, DGELSS, (m, n, nrhs, tmp_data, m, presult, + nrr, ps, rcond, rank, work.fortran_vec (), lwork, info)); if (f77_exception_encountered) (*current_liboctave_error_handler) - ("unrecoverable error in dgelsy"); + ("unrecoverable error in dgelss"); else { retval.resize (n, nrhs); @@ -2181,35 +2182,36 @@ double *presult = result.fortran_vec (); - Array<octave_idx_type> jpvt (n); - octave_idx_type *pjpvt = jpvt.fortran_vec (); + octave_idx_type len_s = m < n ? m : n; + Array<double> s (len_s); + double *ps = s.fortran_vec (); double rcond = -1.0; - // Ask DGELSY what the dimension of WORK should be. + // Ask DGELSS what the dimension of WORK should be. octave_idx_type lwork = -1; Array<double> work (1); - F77_XFCN (dgelsy, DGELSY, (m, n, nrhs, tmp_data, m, presult, nrr, pjpvt, + F77_XFCN (dgelss, DGELSS, (m, n, nrhs, tmp_data, m, presult, nrr, ps, rcond, rank, work.fortran_vec (), lwork, info)); if (f77_exception_encountered) - (*current_liboctave_error_handler) ("unrecoverable error in dgelsy"); + (*current_liboctave_error_handler) ("unrecoverable error in dgelss"); else { lwork = static_cast<octave_idx_type> (work(0)); work.resize (lwork); - F77_XFCN (dgelsy, DGELSY, (m, n, nrhs, tmp_data, m, presult, - nrr, pjpvt, rcond, rank, + F77_XFCN (dgelss, DGELSS, (m, n, nrhs, tmp_data, m, presult, + nrr, ps, rcond, rank, work.fortran_vec (), lwork, info)); if (f77_exception_encountered) (*current_liboctave_error_handler) - ("unrecoverable error in dgelsy"); + ("unrecoverable error in dgelss"); else { retval.resize (n);