82 if (args.length () != 3)
85 const Array<octave_idx_type> sel_arg = args(2).xoctave_idx_type_vector_value (
"ordschur: SELECT must be an array of integers");
93 error (
"ordschur: SELECT must have same length as the sides of U and S");
94 else if (sel_n != dimU(0) || sel_n != dimS(0) || sel_n != dimU(1)
96 error (
"ordschur: U and S must be square and of equal sizes");
100 const bool double_type = args(0).is_double_type () || args(1).is_double_type ();
101 const bool complex_type = args(0).iscomplex () || args(1).iscomplex ();
103#define PREPARE_ARGS(TYPE, TYPE_M, TYPE_COND) \
104 TYPE ## Matrix U = args(0).x ## TYPE_M ## _value \
105 ("ordschur: U and S must be real or complex floating point matrices"); \
106 TYPE ## Matrix S = args(1).x ## TYPE_M ## _value \
107 ("ordschur: U and S must be real or complex floating point matrices"); \
108 TYPE ## Matrix w (dim_vector (n, 1)); \
109 TYPE ## Matrix work (dim_vector (n, 1)); \
112 TYPE_COND cond1, cond2;
114#define PREPARE_OUTPUT() \
116 error ("ordschur: trsen failed"); \
120 F77_INT n = to_f77_int (sel_n);
122 for (
F77_INT i = 0; i < n; i++)
123 sel.
xelem (i) = to_f77_int (sel_arg.
xelem (i));
132 (F77_CONST_CHAR_ARG (
"N"), F77_CONST_CHAR_ARG (
"V"),
148 (F77_CONST_CHAR_ARG (
"N"), F77_CONST_CHAR_ARG (
"V"),
149 sel.
data (), n, S.rwdata (), n, U.rwdata (), n,
150 w.rwdata (), wi.
rwdata (), m, cond1, cond2,
151 work.rwdata (), n, iwork.
rwdata (), n, info));
163 (F77_CONST_CHAR_ARG (
"N"), F77_CONST_CHAR_ARG (
"V"),
179 (F77_CONST_CHAR_ARG (
"N"), F77_CONST_CHAR_ARG (
"V"),
180 sel.
data (), n, S.rwdata (), n, U.rwdata (), n,
181 w.rwdata (), wi.
rwdata (), m, cond1, cond2,
182 work.rwdata (), n, iwork.
rwdata (), n, info));
#define DEFUN(name, args_name, nargout_name, doc)
Macro to define a builtin function.