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-fcs.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-fcs.h"
28 #include "mx-fcs-fm.h"
29 #include "mx-fnda-fcs.h"
30 #include "mx-fcs-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-flt-complex.h"
40 #include "ov-complex.h"
41 #include "ov-typeinfo.h"
42 #include "ops.h"
43 #include "xdiv.h"
44 #include "xpow.h"
45 
46 // matrix by complex scalar ops.
47 
48 DEFNDBINOP_OP (add, float_matrix, float_complex, float_array, float_complex, +)
49 DEFNDBINOP_OP (sub, float_matrix, float_complex, float_array, float_complex, -)
50 DEFNDBINOP_OP (mul, float_matrix, float_complex, float_array, float_complex, *)
51 
52 DEFBINOP (div, float_matrix, float_complex)
53 {
54  const octave_float_matrix& v1 = dynamic_cast<const octave_float_matrix&> (a1);
55  const octave_float_complex& v2 = dynamic_cast<const octave_float_complex&> (a2);
56 
58 
59  if (d == 0.0f)
61 
62  return octave_value (v1.float_array_value () / d);
63 }
64 
65 DEFBINOP_FN (pow, float_matrix, float_complex, xpow)
66 
67 DEFBINOP (ldiv, float_matrix, float_complex)
68 {
69  const octave_float_matrix& v1 = dynamic_cast<const octave_float_matrix&> (a1);
70  const octave_float_complex& v2 = dynamic_cast<const octave_float_complex&> (a2);
71 
74  MatrixType typ = v1.matrix_type ();
75 
76  FloatComplexMatrix ret = xleftdiv (m1, m2, typ);
77 
78  v1.matrix_type (typ);
79  return ret;
80 }
81 
82 DEFNDCMPLXCMPOP_FN (lt, float_matrix, float_complex, float_array,
83  float_complex, mx_el_lt)
84 DEFNDCMPLXCMPOP_FN (le, float_matrix, float_complex, float_array,
85  float_complex, mx_el_le)
86 DEFNDCMPLXCMPOP_FN (eq, float_matrix, float_complex, float_array,
87  float_complex, mx_el_eq)
88 DEFNDCMPLXCMPOP_FN (ge, float_matrix, float_complex, float_array,
89  float_complex, mx_el_ge)
90 DEFNDCMPLXCMPOP_FN (gt, float_matrix, float_complex, float_array,
91  float_complex, mx_el_gt)
92 DEFNDCMPLXCMPOP_FN (ne, float_matrix, float_complex, float_array,
93  float_complex, mx_el_ne)
94 
95 DEFNDBINOP_OP (el_mul, float_matrix, float_complex, float_array,
96  float_complex, *)
97 
98 DEFBINOP (el_div, float_matrix, float_complex)
99 {
100  const octave_float_matrix& v1 = dynamic_cast<const octave_float_matrix&> (a1);
101  const octave_float_complex& v2 = dynamic_cast<const octave_float_complex&> (a2);
102 
104 
105  if (d == 0.0f)
107 
108  return octave_value (v1.float_array_value () / d);
109 }
110 
111 DEFNDBINOP_FN (el_pow, float_matrix, float_complex, float_array,
112  float_complex, elem_xpow)
113 
114 DEFBINOP (el_ldiv, float_matrix, flaot_complex)
115 {
116  const octave_float_matrix& v1 = dynamic_cast<const octave_float_matrix&> (a1);
117  const octave_float_complex& v2 = dynamic_cast<const octave_float_complex&> (a2);
118 
119  return x_el_div (v2.float_complex_value (), v1.float_array_value ());
120 }
121 
122 DEFNDBINOP_FN (el_and, float_matrix, float_complex, float_array,
123  float_complex, mx_el_and)
124 DEFNDBINOP_FN (el_or, float_matrix, float_complex, float_array,
125  float_complex, mx_el_or)
126 
127 DEFNDCATOP_FN (fm_fcs, float_matrix, float_complex, float_array,
128  float_complex_array, concat)
129 
130 DEFNDCATOP_FN (m_fcs, matrix, float_complex, float_array,
131  float_complex_array, concat)
132 
133 DEFNDCATOP_FN (fm_cs, float_matrix, complex, float_array,
134  float_complex_array, concat)
135 
136 void
138 {
155  el_ldiv);
158 
162 
167 }
octave_value xpow(const SparseMatrix &a, double b)
Definition: sparse-xpow.cc:58
#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
octave_value op_eq(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1524
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 * f
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
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
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
const octave_base_value & a2
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
#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
Matrix x_el_div(double a, const SparseMatrix &b)
Definition: sparse-xdiv.cc:371
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
FloatComplexMatrix float_complex_matrix_value(bool=false) const
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
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
void install_fm_fcs_ops(void)
Definition: op-fm-fcs.cc:137
FloatComplex float_complex_value(bool=false) const
const octave_char_matrix & v2
boolMatrix mx_el_or(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:87
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
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
#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
boolMatrix mx_el_lt(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
std::complex< float > FloatComplex
Definition: oct-cmplx.h:32
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
#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
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))