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-cm-scm.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2004-2017 David Bateman
4 Copyright (C) 1998-2004 Andy Adler
5 
6 This file is part of Octave.
7 
8 Octave is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12 
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, see
20 <http://www.gnu.org/licenses/>.
21 
22 */
23 
24 #if defined (HAVE_CONFIG_H)
25 # include "config.h"
26 #endif
27 
28 #include "errwarn.h"
29 #include "ovl.h"
30 #include "ov.h"
31 #include "ov-typeinfo.h"
32 #include "ov-cx-mat.h"
33 #include "ops.h"
34 #include "xdiv.h"
35 
36 #include "sparse-xpow.h"
37 #include "sparse-xdiv.h"
38 #include "smx-scm-cm.h"
39 #include "smx-cm-scm.h"
40 #include "ov-cx-sparse.h"
41 
42 // complex matrix by sparse complex matrix ops.
43 
44 DEFBINOP_OP (add, complex_matrix, sparse_complex_matrix, +)
45 DEFBINOP_OP (sub, complex_matrix, sparse_complex_matrix, -)
46 
47 DEFBINOP_OP (mul, complex_matrix, sparse_complex_matrix, *)
48 
49 DEFBINOP (div, complex_matrix, sparse_complex_matrix)
50 {
51  const octave_complex_matrix& v1
52  = dynamic_cast<const octave_complex_matrix&> (a1);
54  = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
55 
56  if (v2.rows () == 1 && v2.columns () == 1)
57  {
58  Complex d = v2.complex_value ();
59 
60  if (d == 0.0)
62 
63  return octave_value (v1.complex_array_value () / d);
64  }
65  else
66  {
67  MatrixType typ = v2.matrix_type ();
68 
70  v2.sparse_complex_matrix_value (), typ);
71 
72  v2.matrix_type (typ);
73  return ret;
74  }
75 }
76 
77 DEFBINOPX (pow, complex_matrix, sparse_complex_matrix)
78 {
79  error ("can't do A ^ B for A and B both matrices");
80 }
81 
82 DEFBINOP (ldiv, complex_matrix, sparse_complex_matrix)
83 {
84  const octave_complex_matrix& v1
85  = dynamic_cast<const octave_complex_matrix&> (a1);
87  = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
88  MatrixType typ = v1.matrix_type ();
89 
91  v2.complex_matrix_value (), typ);
92 
93  v1.matrix_type (typ);
94  return ret;
95 }
96 
97 DEFBINOP_FN (mul_trans, complex_matrix, sparse_complex_matrix, mul_trans);
98 DEFBINOP_FN (mul_herm, complex_matrix, sparse_complex_matrix, mul_herm);
99 
100 DEFBINOP_FN (lt, complex_matrix, sparse_complex_matrix, mx_el_lt)
101 DEFBINOP_FN (le, complex_matrix, sparse_complex_matrix, mx_el_le)
102 DEFBINOP_FN (eq, complex_matrix, sparse_complex_matrix, mx_el_eq)
103 DEFBINOP_FN (ge, complex_matrix, sparse_complex_matrix, mx_el_ge)
104 DEFBINOP_FN (gt, complex_matrix, sparse_complex_matrix, mx_el_gt)
105 DEFBINOP_FN (ne, complex_matrix, sparse_complex_matrix, mx_el_ne)
106 
107 DEFBINOP_FN (el_mul, complex_matrix, sparse_complex_matrix, product)
108 DEFBINOP_FN (el_div, complex_matrix, sparse_complex_matrix, quotient)
109 
110 DEFBINOP (el_pow, complex_matrix, sparse_complex_matrix)
111 {
112  const octave_complex_matrix& v1
113  = dynamic_cast<const octave_complex_matrix&> (a1);
115  = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
116 
117  return octave_value
120 }
121 
122 DEFBINOP (el_ldiv, sparse_complex_matrix, matrix)
123 {
124  const octave_complex_matrix& v1
125  = dynamic_cast<const octave_complex_matrix&> (a1);
127  = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
128 
130  v1.complex_matrix_value ()));
131 }
132 
133 DEFBINOP_FN (el_and, complex_matrix, sparse_complex_matrix, mx_el_and)
134 DEFBINOP_FN (el_or, complex_matrix, sparse_complex_matrix, mx_el_or)
135 
136 DEFCATOP (cm_scm, complex_matrix, sparse_complex_matrix)
137 {
138  octave_complex_matrix& v1 = dynamic_cast<octave_complex_matrix&> (a1);
140  = dynamic_cast<const octave_sparse_complex_matrix&> (a2);
143  ra_idx));
144 }
145 
146 DEFCONV (sparse_complex_matrix_conv, complex_matrix,
147  sparse_complex_matrix)
148 {
149  const octave_complex_matrix& v
150  = dynamic_cast<const octave_complex_matrix&> (a);
153 }
154 
155 DEFNDASSIGNOP_FN (assign, complex_matrix, sparse_complex_matrix,
156  complex_array, assign)
157 
158 void
160 {
201 
204 
209 
211  sparse_complex_matrix_conv);
212 }
ComplexColumnVector product(const ComplexColumnVector &x, const ComplexColumnVector &y)
Definition: CColVector.h:151
octave_value op_mul_trans(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1546
void install_cm_scm_ops(void)
Definition: op-cm-scm.cc:159
#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
const octave_base_value const Array< octave_idx_type > & ra_idx
octave_value op_eq(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1524
octave_idx_type columns(void) const
Definition: ov-base.h:319
Complex complex_value(bool=false) const
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
SparseComplexMatrix sparse_complex_matrix_value(bool=false) const
Definition: ov-cx-sparse.h:125
#define INSTALL_ASSIGNOP(op, t1, t2, f)
Definition: ops.h:57
MatrixType matrix_type(void) const
Definition: ov-base-mat.h:129
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
ComplexMatrix mul_trans(const ComplexMatrix &m, const SparseComplexMatrix &a)
Definition: CSparse.cc:7373
#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
ComplexMatrix complex_matrix_value(bool=false) const
#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 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)
double tmp
Definition: data.cc:6300
ComplexMatrix mul_herm(const ComplexMatrix &m, const SparseComplexMatrix &a)
Definition: CSparse.cc:7379
octave_value op_mul_herm(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1548
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
void warn_divide_by_zero(void)
Definition: errwarn.cc:320
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
#define DEFCATOP(name, t1, t2)
Definition: ops.h:321
const octave_char_matrix & v2
boolMatrix mx_el_or(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:87
#define DEFNDASSIGNOP_FN(name, t1, t2, e, f)
Definition: ops.h:105
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
boolMatrix mx_el_and(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:87
MatrixType matrix_type(void) const
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
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
#define DEFBINOP_FN(name, t1, t2, f)
Definition: ops.h:283
std::complex< double > Complex
Definition: oct-cmplx.h:31
#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
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_idx_type rows(void) const
Definition: ov-base.h:312
octave_value op_gt(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1526
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))