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;