38 const octave_idx_type&,
double*,
double*,
39 double*,
const octave_idx_type&,
double*,
40 const octave_idx_type&,
double*,
41 const octave_idx_type&, octave_idx_type&
48 const octave_idx_type&,
Complex*,
49 const octave_idx_type&, Complex*,
50 Complex*,
const octave_idx_type&, Complex*,
51 const octave_idx_type&, Complex*,
52 const octave_idx_type&,
double*, octave_idx_type&
59 const octave_idx_type&,
double*,
60 const octave_idx_type&,
double*,
double*,
61 const octave_idx_type&, octave_idx_type&
68 const octave_idx_type&, Complex*,
69 const octave_idx_type&,
double*,
70 Complex*,
const octave_idx_type&,
double*,
77 const octave_idx_type&,
double*,
78 const octave_idx_type&, octave_idx_type&
84 const octave_idx_type&,
85 Complex*,
const octave_idx_type&,
93 const octave_idx_type&,
94 double*,
const octave_idx_type&,
95 double*,
const octave_idx_type&,
96 double*,
double*,
double *,
double*,
97 const octave_idx_type&,
double*,
98 const octave_idx_type&,
double*,
99 const octave_idx_type&, octave_idx_type&
104 F77_FUNC (dsygv, DSYGV) (
const octave_idx_type&,
107 const octave_idx_type&,
double*,
108 const octave_idx_type&,
double*,
109 const octave_idx_type&,
double*,
double*,
110 const octave_idx_type&, octave_idx_type&
117 const octave_idx_type&,
118 Complex*,
const octave_idx_type&,
119 Complex*,
const octave_idx_type&,
120 Complex*, Complex*, Complex*,
121 const octave_idx_type&, Complex*,
122 const octave_idx_type&, Complex*,
123 const octave_idx_type&,
double*, octave_idx_type&
128 F77_FUNC (zhegv, ZHEGV) (
const octave_idx_type&,
131 const octave_idx_type&, Complex*,
132 const octave_idx_type&, Complex*,
133 const octave_idx_type&,
double*, Complex*,
134 const octave_idx_type&,
double*, octave_idx_type&
144 (*current_liboctave_error_handler)
145 (
"EIG: matrix contains Inf or NaN values");
156 (*current_liboctave_error_handler) (
"EIG requires square matrix");
183 n, tmp_data, n, pwr, pwi, dummy,
184 idummy, pvr, n, &dummy_work, lwork, info
196 n, tmp_data, n, pwr, pwi, dummy,
197 idummy, pvr, n, pwork, lwork, info
203 (*current_liboctave_error_handler) (
"unrecoverable error in dgeev");
209 (*current_liboctave_error_handler) (
"dgeev failed to converge");
219 if (wi.
elem (j) == 0.0)
229 (*current_liboctave_error_handler) (
"EIG: internal error");
238 double real_part = vr.
elem (i, j);
239 double imag_part = vr.
elem (i, j+1);
260 (*current_liboctave_error_handler) (
"EIG requires square matrix");
277 n, tmp_data, n, pwr, &dummy_work, lwork, info
289 n, tmp_data, n, pwr, pwork, lwork, info
295 (*current_liboctave_error_handler) (
"unrecoverable error in dsyev");
301 (*current_liboctave_error_handler) (
"dsyev failed to converge");
319 (*current_liboctave_error_handler)
320 (
"EIG: matrix contains Inf or NaN values");
331 (*current_liboctave_error_handler) (
"EIG requires square matrix");
359 n, tmp_data, n, pw, dummy, idummy,
360 pv, n, &dummy_work, lwork, prwork, info
372 n, tmp_data, n, pw, dummy, idummy,
373 pv, n, pwork, lwork, prwork, info
379 (*current_liboctave_error_handler) (
"unrecoverable error in zgeev");
385 (*current_liboctave_error_handler) (
"zgeev failed to converge");
405 (*current_liboctave_error_handler) (
"EIG requires square matrix");
426 n, tmp_data, n, pwr, &dummy_work, lwork,
439 n, tmp_data, n, pwr, pwork, lwork, prwork, info
445 (*current_liboctave_error_handler) (
"unrecoverable error in zheev");
451 (*current_liboctave_error_handler) (
"zheev failed to converge");
469 (*current_liboctave_error_handler)
470 (
"EIG: matrix contains Inf or NaN values");
477 if (n != a.
cols () || nb != b.
cols ())
479 (*current_liboctave_error_handler) (
"EIG requires square matrix");
485 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
530 n, atmp_data, n, btmp_data, n,
532 dummy, idummy, pvr, n,
533 &dummy_work, lwork, info
545 n, atmp_data, n, btmp_data, n,
547 dummy, idummy, pvr, n,
554 (*current_liboctave_error_handler) (
"unrecoverable error in dggev");
560 (*current_liboctave_error_handler) (
"dggev failed to converge");
570 if (ai.
elem (j) == 0.0)
580 (*current_liboctave_error_handler) (
"EIG: internal error");
591 double real_part = vr.
elem (i, j);
592 double imag_part = vr.
elem (i, j+1);
612 if (n != a.
cols () || nb != b.
cols ())
614 (*current_liboctave_error_handler) (
"EIG requires square matrix");
620 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
642 pwr, &dummy_work, lwork, info
656 pwr, pwork, lwork, info
662 (*current_liboctave_error_handler) (
"unrecoverable error in dsygv");
668 (*current_liboctave_error_handler) (
"dsygv failed to converge");
686 (*current_liboctave_error_handler)
687 (
"EIG: matrix contains Inf or NaN values");
694 if (n != a.
cols () || nb != b.
cols ())
696 (*current_liboctave_error_handler) (
"EIG requires square matrix");
702 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
748 n, atmp_data, n, btmp_data, n,
749 palpha, pbeta, dummy, idummy,
750 pv, n, &dummy_work, lwork, prwork, info
762 n, atmp_data, n, btmp_data, n,
763 palpha, pbeta, dummy, idummy,
764 pv, n, pwork, lwork, prwork, info
770 (*current_liboctave_error_handler) (
"unrecoverable error in zggev");
776 (*current_liboctave_error_handler) (
"zggev failed to converge");
800 if (n != a.
cols () || nb != b.
cols ())
802 (*current_liboctave_error_handler) (
"EIG requires square matrix");
808 (*current_liboctave_error_handler) (
"EIG requires same size matrices");
834 pwr, &dummy_work, lwork,
849 pwr, pwork, lwork, prwork, info
855 (*current_liboctave_error_handler) (
"unrecoverable error in zhegv");
861 (*current_liboctave_error_handler) (
"zhegv failed to converge");
bool is_symmetric(void) const
#define F77_CHAR_ARG_LEN(l)
void resize(octave_idx_type n, const Complex &rfv=Complex(0))
F77_RET_T const octave_idx_type double const octave_idx_type double double double const octave_idx_type double const octave_idx_type double const octave_idx_type octave_idx_type &F77_CHAR_ARG_LEN_DECL F77_CHAR_ARG_LEN_DECL
F77_RET_T F77_FUNC(dgeev, DGEEV)(F77_CONST_CHAR_ARG_DECL
F77_RET_T F77_CONST_CHAR_ARG_DECL
T & elem(octave_idx_type n)
#define F77_XFCN(f, F, args)
octave_idx_type rows(void) const
#define F77_CONST_CHAR_ARG2(x, l)
octave_idx_type init(const Matrix &a, bool calc_eigenvectors)
liboctave_error_handler current_liboctave_error_handler
bool is_hermitian(void) const
std::complex< double > w(std::complex< double > z, double relerr=0)
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))
bool any_element_is_inf_or_nan(void) const
octave_idx_type hermitian_init(const ComplexMatrix &a, bool calc_eigenvectors)
std::complex< double > Complex
const T * fortran_vec(void) const
octave_idx_type cols(void) const
octave_idx_type symmetric_init(const Matrix &a, bool calc_eigenvectors)