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-m-cm.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-m-cm.h"
28 #include "mx-cm-m.h"
29 #include "mx-nda-cnda.h"
30 #include "mx-cnda-nda.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, matrix, complex_matrix, array, complex_array, +)
47 DEFNDBINOP_OP (sub, matrix, complex_matrix, array, complex_array, -)
48 
49 DEFBINOP_OP (mul, matrix, complex_matrix, *)
50 
51 DEFBINOP (trans_mul, matrix, complex_matrix)
52 {
53  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
55  = dynamic_cast<const octave_complex_matrix&> (a2);
56 
57  Matrix m1 = v1.matrix_value ();
59 
60  return ComplexMatrix (xgemm (m1, real (m2), blas_trans, blas_no_trans),
61  xgemm (m1, imag (m2), blas_trans, blas_no_trans));
62 }
63 
64 DEFBINOP (div, matrix, complex_matrix)
65 {
66  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
68  = dynamic_cast<const octave_complex_matrix&> (a2);
69  MatrixType typ = v2.matrix_type ();
70 
71  ComplexMatrix ret = xdiv (v1.matrix_value (),
72  v2.complex_matrix_value (), typ);
73 
74  v2.matrix_type (typ);
75  return ret;
76 }
77 
78 DEFBINOPX (pow, matrix, complex_matrix)
79 {
80  error ("can't do A ^ B for A and B both matrices");
81 }
82 
83 DEFBINOP (ldiv, matrix, complex_matrix)
84 {
85  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
87  = dynamic_cast<const octave_complex_matrix&> (a2);
88  MatrixType typ = v1.matrix_type ();
89 
90  ComplexMatrix ret = xleftdiv (v1.matrix_value (),
91  v2.complex_matrix_value (), typ);
92 
93  v1.matrix_type (typ);
94  return ret;
95 }
96 
97 DEFBINOP (trans_ldiv, matrix, complex_matrix)
98 {
99  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
101  = dynamic_cast<const octave_complex_matrix&> (a2);
102  MatrixType typ = v1.matrix_type ();
103 
104  ComplexMatrix ret = xleftdiv (v1.matrix_value (),
105  v2.complex_matrix_value (), typ, blas_trans);
106 
107  v1.matrix_type (typ);
108  return ret;
109 }
110 
111 DEFNDCMPLXCMPOP_FN (lt, matrix, complex_matrix, array, complex_array, mx_el_lt)
112 DEFNDCMPLXCMPOP_FN (le, matrix, complex_matrix, array, complex_array, mx_el_le)
113 DEFNDCMPLXCMPOP_FN (eq, matrix, complex_matrix, array, complex_array, mx_el_eq)
114 DEFNDCMPLXCMPOP_FN (ge, matrix, complex_matrix, array, complex_array, mx_el_ge)
115 DEFNDCMPLXCMPOP_FN (gt, matrix, complex_matrix, array, complex_array, mx_el_gt)
116 DEFNDCMPLXCMPOP_FN (ne, matrix, complex_matrix, array, complex_array, mx_el_ne)
117 
118 DEFNDBINOP_FN (el_mul, matrix, complex_matrix, array, complex_array, product)
119 DEFNDBINOP_FN (el_div, matrix, complex_matrix, array, complex_array, quotient)
120 DEFNDBINOP_FN (el_pow, matrix, complex_matrix, array, complex_array, elem_xpow)
121 
122 DEFBINOP (el_ldiv, matrix, complex_matrix)
123 {
124  const octave_matrix& v1 = dynamic_cast<const octave_matrix&> (a1);
126  = dynamic_cast<const octave_complex_matrix&> (a2);
127 
128  return quotient (v2.complex_array_value (), v1.array_value ());
129 }
130 
131 DEFNDBINOP_FN (el_and, matrix, complex_matrix, array, complex_array, mx_el_and)
132 DEFNDBINOP_FN (el_or, matrix, complex_matrix, array, complex_array, mx_el_or)
133 
134 DEFNDCATOP_FN (m_cm, matrix, complex_matrix, array, complex_array, concat)
135 
136 DEFCONV (complex_matrix_conv, matrix, complex_matrix)
137 {
138  const octave_matrix& v = dynamic_cast<const octave_matrix&> (a);
139 
141 }
142 
143 void
145 {
167  trans_ldiv);
169  trans_ldiv);
170 
172 
177 
178  INSTALL_WIDENOP (octave_matrix, octave_complex_matrix, complex_matrix_conv);
179 }
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
NDArray array_value(bool=false) const
Definition: ov-re-mat.h:172
#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
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
ComplexNDArray complex_array_value(bool=false) const
Definition: ov-cx-mat.h:129
Matrix matrix_value(bool=false) const
Definition: ov-re-mat.cc:141
#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
then the function must return scalars which will be concatenated into the return array(s).If code
Definition: cellfun.cc:398
octave_value op_trans_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1545
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
Definition: dMatrix.h:37
void install_m_cm_ops(void)
Definition: op-m-cm.cc:144
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 complex_matrix_value(bool=false) const
Definition: ov-cx-mat.cc:210
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