GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
op-fm-fcm.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2017 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if defined (HAVE_CONFIG_H)
24 # include "config.h"
25 #endif
26 
27 #include "mx-fm-fcm.h"
28 #include "mx-fcm-fm.h"
29 #include "mx-fnda-fcnda.h"
30 #include "mx-fcnda-fnda.h"
31 
32 #include "errwarn.h"
33 #include "ovl.h"
34 #include "ov.h"
35 #include "ov-re-mat.h"
36 #include "ov-flt-re-mat.h"
37 #include "ov-cx-mat.h"
38 #include "ov-flt-cx-mat.h"
39 #include "ov-typeinfo.h"
40 #include "ops.h"
41 #include "xdiv.h"
42 #include "xpow.h"
43 
44 // matrix by complex matrix ops.
45 
46 DEFNDBINOP_OP (add, float_matrix, float_complex_matrix, float_array,
47  float_complex_array, +)
48 DEFNDBINOP_OP (sub, float_matrix, float_complex_matrix, float_array,
49  float_complex_array, -)
50 
51 DEFBINOP_OP (mul, float_matrix, float_complex_matrix, *)
52 
53 DEFBINOP (trans_mul, float_matrix, float_complex_matrix)
54 {
55  const octave_float_matrix& v1
56  = dynamic_cast<const octave_float_matrix&> (a1);
58  = dynamic_cast<const octave_float_complex_matrix&> (a2);
59 
62 
64  xgemm (m1, imag (m2), blas_trans, blas_no_trans));
65 }
66 
67 DEFBINOP (div, float_matrix, float_complex_matrix)
68 {
69  const octave_float_matrix& v1
70  = dynamic_cast<const octave_float_matrix&> (a1);
72  = dynamic_cast<const octave_float_complex_matrix&> (a2);
73  MatrixType typ = v2.matrix_type ();
74 
76  v2.float_complex_matrix_value (), typ);
77 
78  v2.matrix_type (typ);
79  return ret;
80 }
81 
82 DEFBINOPX (pow, float_matrix, float_complex_matrix)
83 {
84  error ("can't do A ^ B for A and B both matrices");
85 }
86 
87 DEFBINOP (ldiv, float_matrix, float_complex_matrix)
88 {
89  const octave_float_matrix& v1
90  = dynamic_cast<const octave_float_matrix&> (a1);
92  = dynamic_cast<const octave_float_complex_matrix&> (a2);
93  MatrixType typ = v1.matrix_type ();
94 
96  v2.float_complex_matrix_value (), typ);
97 
98  v1.matrix_type (typ);
99  return ret;
100 }
101 
102 DEFBINOP (trans_ldiv, float_matrix, float_complex_matrix)
103 {
104  const octave_float_matrix& v1
105  = dynamic_cast<const octave_float_matrix&> (a1);
107  = dynamic_cast<const octave_float_complex_matrix&> (a2);
108  MatrixType typ = v1.matrix_type ();
109 
112  typ, blas_trans);
113 
114  v1.matrix_type (typ);
115  return ret;
116 }
117 
118 DEFNDCMPLXCMPOP_FN (lt, float_matrix, float_complex_matrix, float_array,
119  float_complex_array, mx_el_lt)
120 DEFNDCMPLXCMPOP_FN (le, float_matrix, float_complex_matrix, float_array,
121  float_complex_array, mx_el_le)
122 DEFNDCMPLXCMPOP_FN (eq, float_matrix, float_complex_matrix, float_array,
123  float_complex_array, mx_el_eq)
124 DEFNDCMPLXCMPOP_FN (ge, float_matrix, float_complex_matrix, float_array,
125  float_complex_array, mx_el_ge)
126 DEFNDCMPLXCMPOP_FN (gt, float_matrix, float_complex_matrix, float_array,
127  float_complex_array, mx_el_gt)
128 DEFNDCMPLXCMPOP_FN (ne, float_matrix, float_complex_matrix, float_array,
129  float_complex_array, mx_el_ne)
130 
131 DEFNDBINOP_FN (el_mul, float_matrix, float_complex_matrix, float_array,
132  float_complex_array, product)
133 DEFNDBINOP_FN (el_div, float_matrix, float_complex_matrix, float_array,
134  float_complex_array, quotient)
135 DEFNDBINOP_FN (el_pow, float_matrix, float_complex_matrix, float_array,
136  float_complex_array, elem_xpow)
137 
138 DEFBINOP (el_ldiv, float_matrix, float_complex_matrix)
139 {
140  const octave_float_matrix& v1
141  = dynamic_cast<const octave_float_matrix&> (a1);
143  = dynamic_cast<const octave_float_complex_matrix&> (a2);
144 
146 }
147 
148 DEFNDBINOP_FN (el_and, float_matrix, float_complex_matrix, float_array,
149  float_complex_array, mx_el_and)
150 DEFNDBINOP_FN (el_or, float_matrix, float_complex_matrix, float_array,
151  float_complex_array, mx_el_or)
152 
153 DEFNDCATOP_FN (fm_fcm, float_matrix, float_complex_matrix, float_array,
154  float_complex_array, concat)
155 
156 DEFNDCATOP_FN (m_fcm, matrix, float_complex_matrix, float_array,
157  float_complex_array, concat)
158 
159 DEFNDCATOP_FN (fm_cm, float_matrix, complex_matrix, float_array,
160  float_complex_array, concat)
161 
162 DEFCONV (float_complex_matrix_conv, float_matrix, float_complex_matrix)
163 {
164  const octave_float_matrix& v = dynamic_cast<const octave_float_matrix&> (a);
165 
167  (v.float_array_value ()));
168 }
169 
170 void
172 {
193  octave_float_complex_matrix, el_ldiv);
202  INSTALL_BINOP (op_trans_ldiv, octave_float_matrix,
203  octave_float_complex_matrix, trans_ldiv);
204  INSTALL_BINOP (op_herm_ldiv, octave_float_matrix,
205  octave_float_complex_matrix, trans_ldiv);
206 
210 
215 
217  float_complex_matrix_conv);
218 }
ComplexColumnVector product(const ComplexColumnVector &x, const ComplexColumnVector &y)
Definition: CColVector.h:151
#define DEFBINOP(name, t1, t2)
Definition: ops.h:223
octave_value op_el_pow(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1531
#define DEFBINOPX(name, t1, t2)
Definition: ops.h:218
octave_value op_eq(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1524
void install_fm_fcm_ops(void)
Definition: op-fm-fcm.cc:171
octave_value op_el_ldiv(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1532
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the then the first element defines the pivoting tolerance for the unsymmetric the values defined such that for full matrix
Definition: lu.cc:138
ComplexNDArray concat(NDArray &ra, ComplexNDArray &rb, const Array< octave_idx_type > &ra_idx)
Definition: CNDArray.cc:655
boolMatrix mx_el_le(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
void error(const char *fmt,...)
Definition: error.cc:570
#define INSTALL_WIDENOP(t1, t2, f)
Definition: ops.h:70
octave_value op_pow(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1519
FloatMatrix float_matrix_value(bool=false) const
#define DEFNDBINOP_FN(name, t1, t2, e1, e2, f)
Definition: ops.h:294
MatrixType matrix_type(void) const
Definition: ov-base-mat.h:129
#define DEFBINOP_OP(name, t1, t2, op)
Definition: ops.h:228
const octave_base_value & a2
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
Definition: cellfun.cc:398
octave_value op_div(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1517
octave_value op_el_or(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1534
ComplexColumnVector quotient(const ComplexColumnVector &x, const ComplexColumnVector &y)
Definition: CColVector.h:151
#define INSTALL_BINOP(op, t1, t2, f)
Definition: ops.h:48
boolMatrix mx_el_ge(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
boolMatrix mx_el_gt(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
octave_value op_trans_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1545
FloatComplexNDArray float_complex_array_value(bool=false) const
FloatComplexMatrix float_complex_matrix_value(bool=false) const
octave_value elem_xpow(double a, const SparseMatrix &b)
Definition: sparse-xpow.cc:247
octave_value op_el_and(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1533
octave_int< T > pow(const octave_int< T > &a, const octave_int< T > &b)
Matrix xleftdiv(const SparseMatrix &a, const Matrix &b, MatrixType &typ)
Definition: sparse-xdiv.cc:464
boolMatrix mx_el_ne(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
FloatNDArray float_array_value(bool=false) const
octave_value op_le(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1523
octave_value op_lt(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1522
#define INSTALL_CATOP(t1, t2, f)
Definition: ops.h:53
octave_value op_el_div(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1530
ComplexMatrix xgemm(const ComplexMatrix &a, const ComplexMatrix &b, blas_trans_type transa, blas_trans_type transb)
Definition: CMatrix.cc:3396
const octave_char_matrix & v2
boolMatrix mx_el_or(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:87
Matrix xdiv(const Matrix &a, const SparseMatrix &b, MatrixType &typ)
Definition: sparse-xdiv.cc:133
octave_value op_ne(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1527
ComplexMatrix trans_mul(const SparseComplexMatrix &m, const ComplexMatrix &a)
Definition: CSparse.cc:7403
boolMatrix mx_el_and(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:87
octave_value op_add(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1514
octave_value op_ldiv(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1520
ColumnVector imag(const ComplexColumnVector &a)
Definition: dColVector.cc:142
#define DEFNDCMPLXCMPOP_FN(name, t1, t2, e1, e2, f)
Definition: ops.h:305
octave_value op_sub(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1515
#define DEFCONV(name, a_dummy, b_dummy)
Definition: ops.h:165
boolMatrix mx_el_lt(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
octave_value op_el_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1529
octave_value op_herm_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1547
ColumnVector real(const ComplexColumnVector &a)
Definition: dColVector.cc:136
#define INSTALL_ASSIGNCONV(t1, t2, tr)
Definition: ops.h:66
octave_value op_ge(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1525
#define DEFNDBINOP_OP(name, t1, t2, e1, e2, op)
Definition: ops.h:269
#define DEFNDCATOP_FN(name, t1, t2, e1, e2, f)
Definition: ops.h:341
boolMatrix mx_el_eq(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
octave_value op_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1516
octave_value op_gt(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1526