Mercurial > hg > octave-nkf
changeset 19605:a0c7001cf1a8
consistent messages and IDs for singular matrix warnings
* lo-array-gripes.cc, lo-array-gripes.h (gripe_singular_matrix,
warning_id_nearly_singular_matrix, warning_id_singular_matrix):
New warning function and ID strings.
* inv.cc, sparse-xdiv.cc, xdiv.cc, CMatrix.cc, CSparse.cc, dMatrix.cc,
dSparse.cc, fCMatrix.cc, fMatrix.cc: Use gripe_singular_matrix instead
of individual calls to warning.
* warning_ids.m: Update list of IDs.
* NEWS note change.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 17 Dec 2014 21:56:17 -0500 |
parents | 86e69f51328d |
children | cfe56baccb0c |
files | NEWS libinterp/corefcn/inv.cc libinterp/corefcn/sparse-xdiv.cc libinterp/corefcn/xdiv.cc liboctave/array/CMatrix.cc liboctave/array/CSparse.cc liboctave/array/dMatrix.cc liboctave/array/dSparse.cc liboctave/array/fCMatrix.cc liboctave/array/fMatrix.cc liboctave/util/lo-array-gripes.cc liboctave/util/lo-array-gripes.h scripts/miscellaneous/warning_ids.m |
diffstat | 13 files changed, 136 insertions(+), 285 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS +++ b/NEWS @@ -194,6 +194,9 @@ been removed from Octave 4.2. Replacement classes are <octave_map> (struct array) or <octave_scalar_map> for a single structure. + ** The warning ID Octave:singular-matrix-div has been replaced by + Octave:nearly-singular-matrix and Octave:singular-matrix. + Summary of important user-visible changes for version 4.0: ---------------------------------------------------------
--- a/libinterp/corefcn/inv.cc +++ b/libinterp/corefcn/inv.cc @@ -227,8 +227,7 @@ } if (nargout < 2 && (info == -1 || rcond_plus_one_eq_one)) - warning ("inverse: matrix singular to machine precision, rcond = %g", - (isfloat ? frcond : rcond)); + gripe_singular_matrix (isfloat ? frcond : rcond); } return retval;
--- a/libinterp/corefcn/sparse-xdiv.cc +++ b/libinterp/corefcn/sparse-xdiv.cc @@ -28,6 +28,7 @@ #include <cassert> #include "Array-util.h" +#include "lo-array-gripes.h" #include "oct-cmplx.h" #include "quit.h" #include "error.h" @@ -43,7 +44,7 @@ static void solve_singularity_warning (double rcond) { - warning ("matrix singular to machine precision, rcond = %g", rcond); + gripe_singular_matrix (rcond); warning ("attempting to find minimum norm solution"); }
--- a/libinterp/corefcn/xdiv.cc +++ b/libinterp/corefcn/xdiv.cc @@ -42,6 +42,7 @@ #include "fDiagMatrix.h" #include "CDiagMatrix.h" #include "fCDiagMatrix.h" +#include "lo-array-gripes.h" #include "quit.h" #include "error.h" @@ -58,8 +59,8 @@ static void solve_singularity_warning (double rcond) { - warning_with_id ("Octave:singular-matrix-div", - "matrix singular to machine precision, rcond = %g", rcond); + gripe_singular_matrix (rcond); + warning ("attempting to find minimum norm solution"); } template <class T1, class T2> @@ -405,7 +406,7 @@ static void solve_singularity_warning (float rcond) { - warning ("matrix singular to machine precision, rcond = %g", rcond); + gripe_singular_matrix (rcond); warning ("attempting to find minimum norm solution"); }
--- a/liboctave/array/CMatrix.cc +++ b/liboctave/array/CMatrix.cc @@ -1986,9 +1986,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -2087,9 +2085,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -2193,9 +2189,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -2250,8 +2244,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); mattype.mark_as_rectangular (); } @@ -2279,9 +2272,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } }
--- a/liboctave/array/CSparse.cc +++ b/liboctave/array/CSparse.cc @@ -1804,9 +1804,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -1821,9 +1819,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2092,9 +2088,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2109,9 +2103,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2327,9 +2319,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2344,9 +2334,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2615,9 +2603,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2632,9 +2618,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2871,9 +2855,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2888,9 +2870,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3179,9 +3159,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -3196,9 +3174,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3439,9 +3415,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -3456,9 +3430,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3746,9 +3718,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -3763,9 +3733,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3912,8 +3880,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } else @@ -4010,9 +3977,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -4214,8 +4179,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } } else if (typ != MatrixType::Tridiagonal_Hermitian) @@ -4310,8 +4274,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } else { @@ -4480,9 +4443,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4567,8 +4528,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } else { @@ -4601,9 +4561,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4727,9 +4685,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4847,9 +4803,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -4882,9 +4836,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5047,9 +4999,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5132,8 +5082,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } else { @@ -5166,9 +5115,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5294,9 +5241,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5419,9 +5364,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -5454,9 +5397,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5609,10 +5550,7 @@ if (sing_handler) sing_handler (rcond); else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); - + gripe_singular_matrix (rcond); } else if (status < 0) { @@ -5760,9 +5698,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6013,9 +5949,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6294,9 +6228,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6526,9 +6458,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6657,10 +6587,7 @@ if (sing_handler) sing_handler (rcond); else - (*current_liboctave_error_handler) - ("SparseComplexMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); - + gripe_singular_matrix (rcond); } UMFPACK_ZNAME (report_info) (control, info);
--- a/liboctave/array/dMatrix.cc +++ b/liboctave/array/dMatrix.cc @@ -1625,9 +1625,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -1725,9 +1723,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -1829,9 +1825,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -1884,8 +1878,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); mattype.mark_as_rectangular (); } @@ -1913,9 +1906,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } }
--- a/liboctave/array/dSparse.cc +++ b/liboctave/array/dSparse.cc @@ -1886,9 +1886,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -1903,9 +1901,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2174,9 +2170,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2191,9 +2185,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2411,9 +2403,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2428,9 +2418,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2701,9 +2689,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2718,9 +2704,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -2961,9 +2945,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -2978,9 +2960,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3268,9 +3248,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -3285,9 +3263,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3529,9 +3505,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -3546,9 +3520,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -3838,9 +3810,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } volatile double rcond_plus_one = rcond + 1.0; @@ -3855,9 +3825,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4004,9 +3972,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else rcond = 1.; @@ -4102,9 +4068,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -4306,8 +4270,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } } else if (typ != MatrixType::Tridiagonal_Hermitian) @@ -4401,8 +4364,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); } else { @@ -4592,9 +4554,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4679,9 +4639,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -4714,9 +4672,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4840,9 +4796,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -4960,9 +4914,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -4995,9 +4947,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5160,9 +5110,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5276,9 +5224,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -5311,9 +5257,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5460,9 +5404,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5606,9 +5548,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); - + gripe_singular_matrix (); } else { @@ -5641,9 +5581,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); } } else @@ -5805,10 +5743,7 @@ if (sing_handler) sing_handler (rcond); else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); - + gripe_singular_matrix (rcond); } else if (status < 0) { @@ -5958,9 +5893,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6184,9 +6117,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6436,9 +6367,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; } @@ -6680,9 +6609,7 @@ mattype.mark_as_rectangular (); } else - (*current_liboctave_error_handler) - ("SparseMatrix::solve matrix singular to machine precision, rcond = %g", - rcond); + gripe_singular_matrix (rcond); return retval; }
--- a/liboctave/array/fCMatrix.cc +++ b/liboctave/array/fCMatrix.cc @@ -1990,9 +1990,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -2091,9 +2089,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -2197,9 +2193,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -2254,8 +2248,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); mattype.mark_as_rectangular (); } @@ -2283,9 +2276,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } }
--- a/liboctave/array/fMatrix.cc +++ b/liboctave/array/fMatrix.cc @@ -1637,9 +1637,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -1738,9 +1736,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -1843,9 +1839,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } } @@ -1898,8 +1892,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision"); + gripe_singular_matrix (); mattype.mark_as_rectangular (); } @@ -1927,9 +1920,7 @@ if (sing_handler) sing_handler (rcon); else - (*current_liboctave_error_handler) - ("matrix singular to machine precision, rcond = %g", - rcon); + gripe_singular_matrix (rcon); } }
--- a/liboctave/util/lo-array-gripes.cc +++ b/liboctave/util/lo-array-gripes.cc @@ -34,6 +34,10 @@ const char *error_id_invalid_index = "Octave:invalid-index"; +const char *warning_id_nearly_singular_matrix = "Octave:nearly-singular-matrix"; + +const char *warning_id_singular_matrix = "Octave:singular-matrix"; + void gripe_nan_to_logical_conversion (void) { @@ -166,3 +170,19 @@ ("A(I,J,...) = X: dimensions mismatch"); } +void +gripe_singular_matrix (double rcond) +{ + if (rcond == 0.0) + { + (*current_liboctave_warning_with_id_handler) + (warning_id_singular_matrix, + "matrix singular to machine precision"); + } + else + { + (*current_liboctave_warning_with_id_handler) + (warning_id_nearly_singular_matrix, + "matrix singular to machine precision, rcond = %g", rcond); + } +}
--- a/liboctave/util/lo-array-gripes.h +++ b/liboctave/util/lo-array-gripes.h @@ -31,6 +31,10 @@ extern OCTAVE_API const char *error_id_invalid_index; +extern OCTAVE_API const char *warning_id_nearly_singular_matrix; + +extern OCTAVE_API const char *warning_id_singular_matrix; + extern void OCTAVE_API gripe_nan_to_logical_conversion (void); @@ -71,4 +75,7 @@ extern void OCTAVE_API gripe_assignment_dimension_mismatch (void); +extern void OCTAVE_API +gripe_singular_matrix (double rcond = 0.0); + #endif
--- a/scripts/miscellaneous/warning_ids.m +++ b/scripts/miscellaneous/warning_ids.m @@ -299,8 +299,10 @@ ## string constant. ## By default, the @code{Octave:single-quote-string} warning is disabled. ## -## @item Octave:singular-matrix-div -## By default, the @code{Octave:singular-matrix-div} warning is enabled. +## @item Octave:nearly-singular-matrix +## @itemx Octave:singular-matrix +## By default, the @code{Octave:nearly-singular-matrix} and +## @code{Octave:singular-matrix} warnings are enabled. ## ## @item Octave:sqrtm:SingularMatrix ## By default, the @code{Octave:sqrtm:SingularMatrix} warning is enabled.