Mercurial > octave
changeset 20863:e81276e8f481
2015 Code Sprint: chol.cc: use ovl().
author | Rik <rik@octave.org> |
---|---|
date | Sat, 12 Dec 2015 09:17:56 -0800 |
parents | ac1f8c640d8f |
children | 4c9df9f444db |
files | libinterp/dldfcn/chol.cc |
diffstat | 1 files changed, 146 insertions(+), 164 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/dldfcn/chol.cc Sat Dec 12 08:46:24 2015 -0800 +++ b/libinterp/dldfcn/chol.cc Sat Dec 12 09:17:56 2015 -0800 @@ -254,10 +254,7 @@ fact = FloatCHOL (m, info, LLt != true); if (nargout == 2 || info == 0) - { - retval(1) = info; - retval(0) = get_chol (fact); - } + retval = ovl (get_chol (fact), info); else error ("chol: input matrix must be positive definite"); } @@ -271,10 +268,7 @@ fact = FloatComplexCHOL (m, info, LLt != true); if (nargout == 2 || info == 0) - { - retval(1) = info; - retval(0) = get_chol (fact); - } + retval = ovl (get_chol (fact), info); else error ("chol: input matrix must be positive definite"); } @@ -293,10 +287,7 @@ fact = CHOL (m, info, LLt != true); if (nargout == 2 || info == 0) - { - retval(1) = info; - retval(0) = get_chol (fact); - } + retval = ovl (get_chol (fact), info); else error ("chol: input matrix must be positive definite"); } @@ -310,10 +301,7 @@ fact = ComplexCHOL (m, info, LLt != true); if (nargout == 2 || info == 0) - { - retval(1) = info; - retval(0) = get_chol (fact); - } + retval = ovl (get_chol (fact), info); else error ("chol: input matrix must be positive definite"); } @@ -582,8 +570,6 @@ { int nargin = args.length (); - octave_value_list retval; - if (nargin > 3 || nargin < 2) print_usage (); @@ -594,99 +580,99 @@ || (nargin > 2 && ! args(2).is_string ())) print_usage (); + octave_value_list retval (nargout == 2 ? 2 : 1); + octave_idx_type n = argr.rows (); std::string op = (nargin < 3) ? "+" : args(2).string_value (); - bool down = op == "-"; + bool down = (op == "-"); + + if (! down && op != "+") + error ("cholupdate: OP must be \"+\" or \"-\""); + + if (argr.columns () != n || argu.rows () != n || argu.columns () != 1) + error ("cholupdate: dimension mismatch between R and U"); - if (down || op == "+") - if (argr.columns () == n && argu.rows () == n && argu.columns () == 1) - { - int err = 0; - if (argr.is_single_type () || argu.is_single_type ()) - { - if (argr.is_real_type () && argu.is_real_type ()) - { - // real case - FloatMatrix R = argr.float_matrix_value (); - FloatColumnVector u = argu.float_column_vector_value (); + int err = 0; + if (argr.is_single_type () || argu.is_single_type ()) + { + if (argr.is_real_type () && argu.is_real_type ()) + { + // real case + FloatMatrix R = argr.float_matrix_value (); + FloatColumnVector u = argu.float_column_vector_value (); - FloatCHOL fact; - fact.set (R); + FloatCHOL fact; + fact.set (R); - if (down) - err = fact.downdate (u); - else - fact.update (u); + if (down) + err = fact.downdate (u); + else + fact.update (u); - retval(0) = get_chol_r (fact); - } - else - { - // complex case - FloatComplexMatrix R = argr.float_complex_matrix_value (); - FloatComplexColumnVector u = - argu.float_complex_column_vector_value (); + retval(0) = get_chol_r (fact); + } + else + { + // complex case + FloatComplexMatrix R = argr.float_complex_matrix_value (); + FloatComplexColumnVector u = + argu.float_complex_column_vector_value (); - FloatComplexCHOL fact; - fact.set (R); + FloatComplexCHOL fact; + fact.set (R); - if (down) - err = fact.downdate (u); - else - fact.update (u); + if (down) + err = fact.downdate (u); + else + fact.update (u); - retval(0) = get_chol_r (fact); - } - } - else - { - if (argr.is_real_type () && argu.is_real_type ()) - { - // real case - Matrix R = argr.matrix_value (); - ColumnVector u = argu.column_vector_value (); + retval(0) = get_chol_r (fact); + } + } + else + { + if (argr.is_real_type () && argu.is_real_type ()) + { + // real case + Matrix R = argr.matrix_value (); + ColumnVector u = argu.column_vector_value (); - CHOL fact; - fact.set (R); + CHOL fact; + fact.set (R); - if (down) - err = fact.downdate (u); - else - fact.update (u); + if (down) + err = fact.downdate (u); + else + fact.update (u); - retval(0) = get_chol_r (fact); - } - else - { - // complex case - ComplexMatrix R = argr.complex_matrix_value (); - ComplexColumnVector u = argu.complex_column_vector_value (); + retval(0) = get_chol_r (fact); + } + else + { + // complex case + ComplexMatrix R = argr.complex_matrix_value (); + ComplexColumnVector u = argu.complex_column_vector_value (); - ComplexCHOL fact; - fact.set (R); - - if (down) - err = fact.downdate (u); - else - fact.update (u); + ComplexCHOL fact; + fact.set (R); - retval(0) = get_chol_r (fact); - } - } + if (down) + err = fact.downdate (u); + else + fact.update (u); - if (nargout > 1) - retval(1) = err; - else if (err == 1) - error ("cholupdate: downdate violates positiveness"); - else if (err == 2) - error ("cholupdate: singular matrix"); - } - else - error ("cholupdate: dimension mismatch between R and U"); - else - error ("cholupdate: OP must be \"+\" or \"-\""); + retval(0) = get_chol_r (fact); + } + } + + if (nargout > 1) + retval(1) = err; + else if (err == 1) + error ("cholupdate: downdate violates positiveness"); + else if (err == 2) + error ("cholupdate: singular matrix"); return retval; } @@ -777,8 +763,6 @@ @seealso{chol, cholupdate, choldelete, cholshift}\n\ @end deftypefn") { - octave_value_list retval; - if (args.length () != 3) print_usage (); @@ -790,85 +774,83 @@ || ! argj.is_real_scalar ()) print_usage (); + octave_value_list retval (nargout == 2 ? 2 : 1); + octave_idx_type n = argr.rows (); octave_idx_type j = argj.scalar_value (); - if (argr.columns () == n && argu.rows () == n+1 && argu.columns () == 1) - { - if (j > 0 && j <= n+1) - { - int err = 0; - if (argr.is_single_type () || argu.is_single_type ()) - { - if (argr.is_real_type () && argu.is_real_type ()) - { - // real case - FloatMatrix R = argr.float_matrix_value (); - FloatColumnVector u = argu.float_column_vector_value (); + if (argr.columns () != n || argu.rows () != n+1 || argu.columns () != 1) + error ("cholinsert: dimension mismatch between R and U"); - FloatCHOL fact; - fact.set (R); - err = fact.insert_sym (u, j-1); - - retval(0) = get_chol_r (fact); - } - else - { - // complex case - FloatComplexMatrix R = argr.float_complex_matrix_value (); - FloatComplexColumnVector u = - argu.float_complex_column_vector_value (); - - FloatComplexCHOL fact; - fact.set (R); - err = fact.insert_sym (u, j-1); + if (j < 1 || j > n+1) + error ("cholinsert: index J out of range"); - retval(0) = get_chol_r (fact); - } - } - else - { - if (argr.is_real_type () && argu.is_real_type ()) - { - // real case - Matrix R = argr.matrix_value (); - ColumnVector u = argu.column_vector_value (); - - CHOL fact; - fact.set (R); - err = fact.insert_sym (u, j-1); + int err = 0; + if (argr.is_single_type () || argu.is_single_type ()) + { + if (argr.is_real_type () && argu.is_real_type ()) + { + // real case + FloatMatrix R = argr.float_matrix_value (); + FloatColumnVector u = argu.float_column_vector_value (); - retval(0) = get_chol_r (fact); - } - else - { - // complex case - ComplexMatrix R = argr.complex_matrix_value (); - ComplexColumnVector u = - argu.complex_column_vector_value (); - - ComplexCHOL fact; - fact.set (R); - err = fact.insert_sym (u, j-1); + FloatCHOL fact; + fact.set (R); + err = fact.insert_sym (u, j-1); - retval(0) = get_chol_r (fact); - } - } - - if (nargout > 1) - retval(1) = err; - else if (err == 1) - error ("cholinsert: insertion violates positiveness"); - else if (err == 2) - error ("cholinsert: singular matrix"); - else if (err == 3) - error ("cholinsert: diagonal element must be real"); + retval(0) = get_chol_r (fact); } else - error ("cholinsert: index J out of range"); + { + // complex case + FloatComplexMatrix R = argr.float_complex_matrix_value (); + FloatComplexColumnVector u = + argu.float_complex_column_vector_value (); + + FloatComplexCHOL fact; + fact.set (R); + err = fact.insert_sym (u, j-1); + + retval(0) = get_chol_r (fact); + } } else - error ("cholinsert: dimension mismatch between R and U"); + { + if (argr.is_real_type () && argu.is_real_type ()) + { + // real case + Matrix R = argr.matrix_value (); + ColumnVector u = argu.column_vector_value (); + + CHOL fact; + fact.set (R); + err = fact.insert_sym (u, j-1); + + retval(0) = get_chol_r (fact); + } + else + { + // complex case + ComplexMatrix R = argr.complex_matrix_value (); + ComplexColumnVector u = + argu.complex_column_vector_value (); + + ComplexCHOL fact; + fact.set (R); + err = fact.insert_sym (u, j-1); + + retval(0) = get_chol_r (fact); + } + } + + if (nargout > 1) + retval(1) = err; + else if (err == 1) + error ("cholinsert: insertion violates positiveness"); + else if (err == 2) + error ("cholinsert: singular matrix"); + else if (err == 3) + error ("cholinsert: diagonal element must be real"); return retval; }