Mercurial > octave-nkf
diff src/DLD-FUNCTIONS/chol.cc @ 7559:07522d7dcdf8
fixes to QR and Cholesky updating code
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 05 Mar 2008 14:23:26 -0500 |
parents | 40574114c514 |
children | eb7bdde776f2 |
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/chol.cc Wed Mar 05 04:44:49 2008 -0500 +++ b/src/DLD-FUNCTIONS/chol.cc Wed Mar 05 14:23:26 2008 -0500 @@ -471,31 +471,35 @@ @seealso{chol, qrupdate}\n\ @end deftypefn") { - int nargin = args.length (); + octave_idx_type nargin = args.length (); octave_value_list retval; - octave_value argR,argu,argop; + if (nargin > 3 || nargin < 2) + { + print_usage (); + return retval; + } - if ((nargin == 3 || nargin == 2) - && (argR = args(0), argR.is_matrix_type ()) - && (argu = args(1), argu.is_matrix_type ()) - && (nargin < 3 || (argop = args(2), argop.is_string ()))) - { - octave_idx_type n = argR.rows (); + octave_value argr = args(0); + octave_value argu = args(1); - std::string op = (nargin < 3) ? "+" : argop.string_value(); + if (argr.is_matrix_type () && argu.is_matrix_type () + && (nargin < 3 || args(2).is_string ())) + { + octave_idx_type n = argr.rows (); - bool down = false; + std::string op = (nargin < 3) ? "+" : args(2).string_value (); - if (nargin < 3 || (op == "+") || (down = op == "-")) - if (argR.columns () == n - && argu.rows () == n && argu.columns () == 1) + bool down = op == "-"; + + if (down || op == "+") + if (argr.columns () == n && argu.rows () == n && argu.columns () == 1) { - if (argR.is_real_matrix () && argu.is_real_matrix ()) + if (argr.is_real_matrix () && argu.is_real_matrix ()) { // real case - Matrix R = argR.matrix_value (); + Matrix R = argr.matrix_value (); Matrix u = argu.matrix_value (); CHOL fact; @@ -517,7 +521,7 @@ else { // complex case - ComplexMatrix R = argR.complex_matrix_value (); + ComplexMatrix R = argr.complex_matrix_value (); ComplexMatrix u = argu.complex_matrix_value (); ComplexCHOL fact;