Mercurial > hg > octave-nkf
diff liboctave/array/CMatrix.cc @ 19643:0b4915fcd2eb
don't skip solution of singular upper/lower triangular systems
* CMatrix.cc (ComplexMatrix::ltsolve, ComplexMatrix::utsolve):
Always compute solution.
* dMatrix.cc (Matrix::ltsolve, Matrix::utsolve): Likewise.
* fCMatrix.cc (FloatComplexMatrix::ltsolve,
FloatComplexMatrix::utsolve): Likewise.
* fMatrix.cc (FloatMatrix::ltsolve, FloatMatrix::utsolve): Likewise.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 30 Dec 2014 16:17:21 -0500 |
parents | aee5fea8a03e |
children | cb35d695713c |
line wrap: on
line diff
--- a/liboctave/array/CMatrix.cc +++ b/liboctave/array/CMatrix.cc @@ -1954,6 +1954,22 @@ { const Complex *tmp_data = fortran_vec (); + retval = b; + Complex *result = retval.fortran_vec (); + + char uplo = 'U'; + char trans = get_blas_char (transt); + char dia = 'N'; + + F77_XFCN (ztrtrs, ZTRTRS, (F77_CONST_CHAR_ARG2 (&uplo, 1), + F77_CONST_CHAR_ARG2 (&trans, 1), + F77_CONST_CHAR_ARG2 (&dia, 1), + nr, b_nc, tmp_data, nr, + result, nr, info + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1))); + if (calc_cond) { char norm = '1'; @@ -1989,25 +2005,6 @@ gripe_singular_matrix (rcon); } } - - if (info == 0) - { - retval = b; - Complex *result = retval.fortran_vec (); - - char uplo = 'U'; - char trans = get_blas_char (transt); - char dia = 'N'; - - F77_XFCN (ztrtrs, ZTRTRS, (F77_CONST_CHAR_ARG2 (&uplo, 1), - F77_CONST_CHAR_ARG2 (&trans, 1), - F77_CONST_CHAR_ARG2 (&dia, 1), - nr, b_nc, tmp_data, nr, - result, nr, info - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1))); - } } } else @@ -2053,6 +2050,22 @@ { const Complex *tmp_data = fortran_vec (); + retval = b; + Complex *result = retval.fortran_vec (); + + char uplo = 'L'; + char trans = get_blas_char (transt); + char dia = 'N'; + + F77_XFCN (ztrtrs, ZTRTRS, (F77_CONST_CHAR_ARG2 (&uplo, 1), + F77_CONST_CHAR_ARG2 (&trans, 1), + F77_CONST_CHAR_ARG2 (&dia, 1), + nr, b_nc, tmp_data, nr, + result, nr, info + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1))); + if (calc_cond) { char norm = '1'; @@ -2088,25 +2101,6 @@ gripe_singular_matrix (rcon); } } - - if (info == 0) - { - retval = b; - Complex *result = retval.fortran_vec (); - - char uplo = 'L'; - char trans = get_blas_char (transt); - char dia = 'N'; - - F77_XFCN (ztrtrs, ZTRTRS, (F77_CONST_CHAR_ARG2 (&uplo, 1), - F77_CONST_CHAR_ARG2 (&trans, 1), - F77_CONST_CHAR_ARG2 (&dia, 1), - nr, b_nc, tmp_data, nr, - result, nr, info - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1))); - } } } else