44 double*,
const octave_idx_type&,
double*,
45 double*,
const octave_idx_type&,
49 F77_FUNC (dorgqr, DORGQR) (
const octave_idx_type&,
const octave_idx_type&,
50 const octave_idx_type&,
double*,
51 const octave_idx_type&,
double*,
double*,
52 const octave_idx_type&, octave_idx_type&);
57 F77_FUNC (dqr1up, DQR1UP) (
const octave_idx_type&,
const octave_idx_type&,
58 const octave_idx_type&,
double*,
59 const octave_idx_type&,
double*,
60 const octave_idx_type&,
double*,
double*,
double*);
63 F77_FUNC (dqrinc, DQRINC) (
const octave_idx_type&,
const octave_idx_type&,
64 const octave_idx_type&,
double*,
65 const octave_idx_type&,
double*,
66 const octave_idx_type&,
const octave_idx_type&,
67 const double*,
double*);
70 F77_FUNC (dqrdec, DQRDEC) (
const octave_idx_type&,
const octave_idx_type&,
71 const octave_idx_type&,
double*,
72 const octave_idx_type&,
double*,
73 const octave_idx_type&,
const octave_idx_type&,
77 F77_FUNC (dqrinr, DQRINR) (
const octave_idx_type&,
const octave_idx_type&,
78 double*,
const octave_idx_type&,
double*,
79 const octave_idx_type&,
const octave_idx_type&,
80 const double*,
double*);
83 F77_FUNC (dqrder, DQRDER) (
const octave_idx_type&,
const octave_idx_type&,
84 double*,
const octave_idx_type&,
double*,
85 const octave_idx_type&,
const octave_idx_type&,
89 F77_FUNC (dqrshc, DQRSHC) (
const octave_idx_type&,
const octave_idx_type&,
90 const octave_idx_type&,
double*,
91 const octave_idx_type&,
double*,
92 const octave_idx_type&,
const octave_idx_type&,
93 const octave_idx_type&,
double*);
129 lwork =
std::max (lwork, static_cast<octave_idx_type> (1));
135 form (n, afact, tau, qr_type);
150 afact.
elem (i, j) *= tau[j];
182 afact.
xelem (i, j) = 0;
198 lwork =
std::max (lwork, static_cast<octave_idx_type> (1));
259 else if (j < 0 || j > n)
260 (*current_liboctave_error_handler) (
"qrinsert: index out of range");
293 dups = dups && js(i) == js(i+1);
296 (*current_liboctave_error_handler) (
"qrinsert: duplicate index detected");
299 else if (nj > 0 && (js(0) < 0 || js(nj-1) > n))
300 (*current_liboctave_error_handler) (
"qrinsert: index out of range");
334 if (j < 0 || j > n-1)
335 (*current_liboctave_error_handler) (
"qrdelete: index out of range");
366 dups = dups && js(i) == js(i+1);
369 (*current_liboctave_error_handler) (
"qrinsert: duplicate index detected");
370 else if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0))
378 F77_XFCN (dqrdec, DQRDEC, (m, n - ii, k == m ? k : k - ii,
405 else if (j < 0 || j > m)
406 (*current_liboctave_error_handler) (
"qrinsert: index out of range");
428 else if (j < 0 || j > m-1)
429 (*current_liboctave_error_handler) (
"qrdelete: index out of range");
449 if (i < 0 || i > n-1 || j < 0 || j > n-1)
450 (*current_liboctave_error_handler) (
"qrshift: index out of range");
468 warn_qrupdate_once ();
484 warn_qrupdate_once ();
563 warn_qrupdate_once ();
570 else if (j < 0 || j > n)
571 (*current_liboctave_error_handler) (
"qrinsert: index out of range");
581 warn_qrupdate_once ();
591 dups = dups && js(i) == js(i+1);
594 (*current_liboctave_error_handler) (
"qrinsert: duplicate index detected");
597 else if (nj > 0 && (js(0) < 0 || js(nj-1) > n))
598 (*current_liboctave_error_handler) (
"qrinsert: index out of range");
611 warn_qrupdate_once ();
616 if (j < 0 || j > n-1)
617 (*current_liboctave_error_handler) (
"qrdelete: index out of range");
627 warn_qrupdate_once ();
637 dups = dups && js(i) == js(i+1);
640 (*current_liboctave_error_handler) (
"qrinsert: duplicate index detected");
641 else if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0))
655 warn_qrupdate_once ();
662 else if (j < 0 || j > m)
663 (*current_liboctave_error_handler) (
"qrinsert: index out of range");
678 else if (j < 0 || j > m-1)
679 (*current_liboctave_error_handler) (
"qrdelete: index out of range");
689 warn_qrupdate_once ();
694 if (i < 0 || i > n-1 || j < 0 || j > n-1)
695 (*current_liboctave_error_handler) (
"qrshift: index out of range");
702 void warn_qrupdate_once (
void)
704 static bool warned =
false;
707 (*current_liboctave_warning_handler)
708 (
"In this version of Octave, QR & Cholesky updating routines\n"
709 "simply update the matrix and recalculate factorizations.\n"
710 "To use fast algorithms, link Octave with the qrupdate library.\n"
711 "See <http://sourceforge.net/projects/qrupdate>.\n");