Mercurial > hg > octave-nkf
diff liboctave/array/fMatrix.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/fMatrix.cc +++ b/liboctave/array/fMatrix.cc @@ -1605,6 +1605,22 @@ { const float *tmp_data = fortran_vec (); + retval = b; + float *result = retval.fortran_vec (); + + char uplo = 'U'; + char trans = get_blas_char (transt); + char dia = 'N'; + + F77_XFCN (strtrs, STRTRS, (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'; @@ -1641,24 +1657,6 @@ } } - if (info == 0) - { - retval = b; - float *result = retval.fortran_vec (); - - char uplo = 'U'; - char trans = get_blas_char (transt); - char dia = 'N'; - - F77_XFCN (strtrs, STRTRS, (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 @@ -1704,6 +1702,22 @@ { const float *tmp_data = fortran_vec (); + retval = b; + float *result = retval.fortran_vec (); + + char uplo = 'L'; + char trans = get_blas_char (transt); + char dia = 'N'; + + F77_XFCN (strtrs, STRTRS, (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'; @@ -1739,25 +1753,6 @@ gripe_singular_matrix (rcon); } } - - if (info == 0) - { - retval = b; - float *result = retval.fortran_vec (); - - char uplo = 'L'; - char trans = get_blas_char (transt); - char dia = 'N'; - - F77_XFCN (strtrs, STRTRS, (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