24 #if defined (HAVE_CONFIG_H)
38 (
"EIG: matrix contains Inf or NaN values");
86 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ?
"B" :
"N", 1),
87 F77_CONST_CHAR_ARG2 (calc_lev ?
"V" :
"N", 1),
88 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
89 F77_CONST_CHAR_ARG2 (
"N", 1),
90 n, tmp_data, n, pwr, pwi, pvl,
91 n, pvr, n, ilo, ihi, pscale,
92 abnrm, prconde, prcondv, &dummy_work,
93 lwork, &dummy_iwork, info
97 F77_CHAR_ARG_LEN (1)));
100 (*current_liboctave_error_handler) (
"dgeevx workspace query failed");
106 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ?
"B" :
"N", 1),
107 F77_CONST_CHAR_ARG2 (calc_lev ?
"V" :
"N", 1),
108 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
109 F77_CONST_CHAR_ARG2 (
"N", 1),
110 n, tmp_data, n, pwr, pwi, pvl,
111 n, pvr, n, ilo, ihi, pscale,
112 abnrm, prconde, prcondv, pwork,
113 lwork, &dummy_iwork, info
117 F77_CHAR_ARG_LEN (1)));
120 (*current_liboctave_error_handler) (
"unrecoverable error in dgeevx");
123 (*current_liboctave_error_handler) (
"dgeevx failed to converge");
133 if (wi.
elem (j) == 0.0)
145 (*current_liboctave_error_handler) (
"EIG: internal error");
152 double real_part = vr.
elem (
i, j);
153 double imag_part = vr.
elem (
i, j+1);
160 double real_part = vl.
elem (
i, j);
161 double imag_part = vl.
elem (
i, j+1);
191 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
192 F77_CONST_CHAR_ARG2 (
"U", 1),
193 n, tmp_data, n, pwr, &dummy_work, lwork, info
195 F77_CHAR_ARG_LEN (1)));
198 (*current_liboctave_error_handler) (
"dsyev workspace query failed");
204 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
205 F77_CONST_CHAR_ARG2 (
"U", 1),
206 n, tmp_data, n, pwr, pwork, lwork, info
208 F77_CHAR_ARG_LEN (1)));
211 (*current_liboctave_error_handler) (
"unrecoverable error in dsyev");
214 (*current_liboctave_error_handler) (
"dsyev failed to converge");
228 (
"EIG: matrix contains Inf or NaN values");
275 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ?
"B" :
"N", 1),
276 F77_CONST_CHAR_ARG2 (calc_lev ?
"V" :
"N", 1),
277 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
278 F77_CONST_CHAR_ARG2 (
"N", 1),
287 F77_CHAR_ARG_LEN (1)));
290 (*current_liboctave_error_handler) (
"zgeevx workspace query failed");
296 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ?
"B" :
"N", 1),
297 F77_CONST_CHAR_ARG2 (calc_lev ?
"V" :
"N", 1),
298 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
299 F77_CONST_CHAR_ARG2 (
"N", 1),
308 F77_CHAR_ARG_LEN (1)));
311 (*current_liboctave_error_handler) (
"unrecoverable error in zgeevx");
314 (*current_liboctave_error_handler) (
"zgeevx failed to converge");
346 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
347 F77_CONST_CHAR_ARG2 (
"U", 1),
352 F77_CHAR_ARG_LEN (1)));
355 (*current_liboctave_error_handler) (
"zheev workspace query failed");
361 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
362 F77_CONST_CHAR_ARG2 (
"U", 1),
366 F77_CHAR_ARG_LEN (1)));
369 (*current_liboctave_error_handler) (
"unrecoverable error in zheev");
372 (*current_liboctave_error_handler) (
"zheev failed to converge");
387 (
"EIG: matrix contains Inf or NaN values");
392 if (n != a.
cols () || nb != b.
cols ())
396 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
405 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 (
"L", 1),
408 F77_CHAR_ARG_LEN (1)));
440 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ?
"V" :
"N", 1),
441 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
442 n, atmp_data, n, btmp_data, n,
445 &dummy_work, lwork, info
447 F77_CHAR_ARG_LEN (1)));
450 (*current_liboctave_error_handler) (
"dggev workspace query failed");
456 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ?
"V" :
"N", 1),
457 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
458 n, atmp_data, n, btmp_data, n,
463 F77_CHAR_ARG_LEN (1)));
466 (*current_liboctave_error_handler) (
"unrecoverable error in dggev");
469 (*current_liboctave_error_handler) (
"dggev failed to converge");
480 if (ai.
elem (j) == 0.0)
491 (*current_liboctave_error_handler) (
"EIG: internal error");
500 double real_part = vr.
elem (
i, j);
501 double imag_part = vr.
elem (
i, j+1);
507 double real_part = vl.
elem (
i, j);
508 double imag_part = vl.
elem (
i, j+1);
526 if (n != a.
cols () || nb != b.
cols ())
530 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
546 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
547 F77_CONST_CHAR_ARG2 (
"U", 1),
550 pwr, &dummy_work, lwork, info
552 F77_CHAR_ARG_LEN (1)));
555 (*current_liboctave_error_handler) (
"dsygv workspace query failed");
561 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
562 F77_CONST_CHAR_ARG2 (
"U", 1),
565 pwr, pwork, lwork, info
567 F77_CHAR_ARG_LEN (1)));
570 (*current_liboctave_error_handler) (
"unrecoverable error in dsygv");
573 (*current_liboctave_error_handler) (
"dsygv failed to converge");
584 bool calc_lev,
bool force_qz)
588 (
"EIG: matrix contains Inf or NaN values");
593 if (n != a.
cols () || nb != b.
cols ())
597 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
606 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 (
"L", 1),
609 F77_CHAR_ARG_LEN (1)));
642 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (
"N", 1),
643 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
652 F77_CHAR_ARG_LEN (1)));
655 (*current_liboctave_error_handler) (
"zggev workspace query failed");
661 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (
"N", 1),
662 F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
671 F77_CHAR_ARG_LEN (1)));
674 (*current_liboctave_error_handler) (
"unrecoverable error in zggev");
677 (*current_liboctave_error_handler) (
"zggev failed to converge");
692 bool calc_rev,
bool calc_lev)
697 if (n != a.
cols () || nb != b.
cols ())
701 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
721 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
722 F77_CONST_CHAR_ARG2 (
"U", 1),
728 F77_CHAR_ARG_LEN (1)));
731 (*current_liboctave_error_handler) (
"zhegv workspace query failed");
737 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ?
"V" :
"N", 1),
738 F77_CONST_CHAR_ARG2 (
"U", 1),
743 F77_CHAR_ARG_LEN (1)));
746 (*current_liboctave_error_handler) (
"unrecoverable error in zhegv");
749 (*current_liboctave_error_handler) (
"zhegv failed to converge");
bool is_symmetric(void) const
void resize(octave_idx_type n, const Complex &rfv=Complex(0))
OCTAVE_NORETURN liboctave_error_handler current_liboctave_error_handler
#define F77_DBLE_CMPLX_ARG(x)
T & elem(octave_idx_type n)
#define F77_XFCN(f, F, args)
octave_idx_type symmetric_init(const Matrix &a, bool calc_rev, bool calc_lev)
octave_idx_type rows(void) const
calling an anonymous function involves an overhead quite comparable to the overhead of an m file function Passing a handle to a built in function is because the interpreter is not involved in the internal loop For a
octave_idx_type hermitian_init(const ComplexMatrix &a, bool calc_rev, bool calc_lev)
bool is_hermitian(void) const
octave_idx_type init(const Matrix &a, bool calc_rev, bool calc_lev, bool balance)
bool any_element_is_inf_or_nan(void) const
ComplexColumnVector lambda
friend class ComplexMatrix
void resize(octave_idx_type nr, octave_idx_type nc, const Complex &rfv=Complex(0))
=val(i)}if ode{val(i)}occurs in table i
void scale(Matrix &m, double x, double y, double z)
bool any_element_is_inf_or_nan(void) const
std::complex< double > Complex
const T * fortran_vec(void) const
octave_idx_type cols(void) const
Vector representing the dimensions (size) of an Array.