Mercurial > octave-nkf
comparison 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 |
comparison
equal
deleted
inserted
replaced
7558:690c91f741b8 | 7559:07522d7dcdf8 |
---|---|
469 \n\ | 469 \n\ |
470 If @var{info} is not present, an error message is printed in cases 1 and 2.\n\ | 470 If @var{info} is not present, an error message is printed in cases 1 and 2.\n\ |
471 @seealso{chol, qrupdate}\n\ | 471 @seealso{chol, qrupdate}\n\ |
472 @end deftypefn") | 472 @end deftypefn") |
473 { | 473 { |
474 int nargin = args.length (); | 474 octave_idx_type nargin = args.length (); |
475 | 475 |
476 octave_value_list retval; | 476 octave_value_list retval; |
477 | 477 |
478 octave_value argR,argu,argop; | 478 if (nargin > 3 || nargin < 2) |
479 | |
480 if ((nargin == 3 || nargin == 2) | |
481 && (argR = args(0), argR.is_matrix_type ()) | |
482 && (argu = args(1), argu.is_matrix_type ()) | |
483 && (nargin < 3 || (argop = args(2), argop.is_string ()))) | |
484 { | 479 { |
485 octave_idx_type n = argR.rows (); | 480 print_usage (); |
486 | 481 return retval; |
487 std::string op = (nargin < 3) ? "+" : argop.string_value(); | 482 } |
488 | 483 |
489 bool down = false; | 484 octave_value argr = args(0); |
490 | 485 octave_value argu = args(1); |
491 if (nargin < 3 || (op == "+") || (down = op == "-")) | 486 |
492 if (argR.columns () == n | 487 if (argr.is_matrix_type () && argu.is_matrix_type () |
493 && argu.rows () == n && argu.columns () == 1) | 488 && (nargin < 3 || args(2).is_string ())) |
489 { | |
490 octave_idx_type n = argr.rows (); | |
491 | |
492 std::string op = (nargin < 3) ? "+" : args(2).string_value (); | |
493 | |
494 bool down = op == "-"; | |
495 | |
496 if (down || op == "+") | |
497 if (argr.columns () == n && argu.rows () == n && argu.columns () == 1) | |
494 { | 498 { |
495 if (argR.is_real_matrix () && argu.is_real_matrix ()) | 499 if (argr.is_real_matrix () && argu.is_real_matrix ()) |
496 { | 500 { |
497 // real case | 501 // real case |
498 Matrix R = argR.matrix_value (); | 502 Matrix R = argr.matrix_value (); |
499 Matrix u = argu.matrix_value (); | 503 Matrix u = argu.matrix_value (); |
500 | 504 |
501 CHOL fact; | 505 CHOL fact; |
502 fact.set (R); | 506 fact.set (R); |
503 int err = 0; | 507 int err = 0; |
515 retval(0) = fact.chol_matrix (); | 519 retval(0) = fact.chol_matrix (); |
516 } | 520 } |
517 else | 521 else |
518 { | 522 { |
519 // complex case | 523 // complex case |
520 ComplexMatrix R = argR.complex_matrix_value (); | 524 ComplexMatrix R = argr.complex_matrix_value (); |
521 ComplexMatrix u = argu.complex_matrix_value (); | 525 ComplexMatrix u = argu.complex_matrix_value (); |
522 | 526 |
523 ComplexCHOL fact; | 527 ComplexCHOL fact; |
524 fact.set (R); | 528 fact.set (R); |
525 int err = 0; | 529 int err = 0; |