GNU Octave
3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
Main Page
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
libinterp
operators
op-m-scm.cc
Go to the documentation of this file.
1
/*
2
3
Copyright (C) 2004-2013 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
#ifdef HAVE_CONFIG_H
25
#include <config.h>
26
#endif
27
28
#include "
gripes.h
"
29
#include "
oct-obj.h
"
30
#include "
ov.h
"
31
#include "
ov-typeinfo.h
"
32
#include "
ov-re-mat.h
"
33
#include "
ov-cx-mat.h
"
34
#include "
ops.h
"
35
#include "
xdiv.h
"
36
37
#include "
sparse-xpow.h
"
38
#include "
sparse-xdiv.h
"
39
#include "
smx-scm-m.h
"
40
#include "
smx-m-scm.h
"
41
#include "
ov-cx-sparse.h
"
42
43
// matrix by sparse complex matrix ops.
44
45
DEFBINOP_OP
(add, matrix, sparse_complex_matrix, +)
46
DEFBINOP_OP
(sub, matrix, sparse_complex_matrix, -)
47
48
DEFBINOP_OP
(mul, matrix, sparse_complex_matrix, *)
49
50
DEFBINOP
(div, matrix, sparse_complex_matrix)
51
{
52
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_sparse_complex_matrix
&);
53
54
if
(
v2
.
rows
() == 1 &&
v2
.
columns
() == 1)
55
{
56
Complex
d
=
v2
.
complex_value
();
57
58
if
(d == 0.0)
59
gripe_divide_by_zero
();
60
61
return
octave_value
(
v1
.
array_value
() /
d
);
62
}
63
else
64
{
65
MatrixType
typ =
v2
.
matrix_type
();
66
67
ComplexMatrix
ret =
xdiv
(
v1
.
matrix_value
(),
68
v2
.
sparse_complex_matrix_value
(), typ);
69
70
v2
.
matrix_type
(typ);
71
return
ret;
72
}
73
}
74
75
DEFBINOPX
(
pow
, matrix, sparse_complex_matrix)
76
{
77
error
(
"can't do A ^ B for A and B both matrices"
);
78
return
octave_value
();
79
}
80
81
DEFBINOP
(ldiv, matrix, sparse_complex_matrix)
82
{
83
CAST_BINOP_ARGS
(
const
octave_matrix
&,
84
const
octave_sparse_complex_matrix
&);
85
MatrixType
typ =
v1
.
matrix_type
();
86
87
ComplexMatrix
ret =
xleftdiv
(
v1
.
matrix_value
(),
88
v2
.
complex_matrix_value
(), typ);
89
90
v1
.
matrix_type
(typ);
91
return
ret;
92
}
93
94
DEFBINOP_FN
(lt, matrix, sparse_complex_matrix,
mx_el_lt
)
95
DEFBINOP_FN
(le, matrix, sparse_complex_matrix,
mx_el_le
)
96
DEFBINOP_FN
(eq, matrix, sparse_complex_matrix,
mx_el_eq
)
97
DEFBINOP_FN
(ge, matrix, sparse_complex_matrix,
mx_el_ge
)
98
DEFBINOP_FN
(gt, matrix, sparse_complex_matrix,
mx_el_gt
)
99
DEFBINOP_FN
(ne, matrix, sparse_complex_matrix,
mx_el_ne
)
100
101
DEFBINOP_FN
(el_mul, matrix, sparse_complex_matrix,
product
)
102
DEFBINOP_FN
(el_div, matrix, sparse_complex_matrix,
quotient
)
103
104
DEFBINOP
(el_pow, matrix, sparse_complex_matrix)
105
{
106
CAST_BINOP_ARGS
(
const
octave_matrix
&,
107
const
octave_sparse_complex_matrix
&);
108
109
return
octave_value
110
(
elem_xpow
(
SparseMatrix
(
v1
.
matrix_value
()),
111
v2
.
sparse_complex_matrix_value
()));
112
}
113
114
DEFBINOP
(el_ldiv, matrix, sparse_complex_matrix)
115
{
116
CAST_BINOP_ARGS
(
const
octave_matrix
&,
117
const
octave_sparse_complex_matrix
&);
118
return
octave_value
119
(
quotient
(
v2
.
sparse_complex_matrix_value
(),
v1
.
matrix_value
()));
120
}
121
122
DEFBINOP_FN
(el_and, matrix, sparse_complex_matrix,
mx_el_and
)
123
DEFBINOP_FN
(el_or, matrix, sparse_complex_matrix,
mx_el_or
)
124
125
DEFCATOP
(m_scm, matrix, sparse_complex_matrix)
126
{
127
CAST_BINOP_ARGS
(
octave_matrix
&,
const
octave_sparse_complex_matrix
&);
128
SparseMatrix
tmp (
v1
.
matrix_value
());
129
return
octave_value
(tmp.
concat
(
v2
.
sparse_complex_matrix_value
(),
130
ra_idx));
131
}
132
133
DEFCONV
(sparse_complex_matrix_conv, matrix, sparse_complex_matrix)
134
{
135
CAST_CONV_ARG
(
const
octave_matrix
&);
136
return
new
octave_sparse_complex_matrix
137
(
SparseComplexMatrix
(v.complex_matrix_value ()));
138
}
139
140
void
141
install_m_scm_ops
(
void
)
142
{
143
INSTALL_BINOP
(
op_add
,
octave_matrix
,
octave_sparse_complex_matrix
, add);
144
INSTALL_BINOP
(
op_sub
,
octave_matrix
,
octave_sparse_complex_matrix
, sub);
145
INSTALL_BINOP
(
op_mul
,
octave_matrix
,
octave_sparse_complex_matrix
, mul);
146
INSTALL_BINOP
(
op_div
,
octave_matrix
,
octave_sparse_complex_matrix
, div);
147
INSTALL_BINOP
(
op_pow
,
octave_matrix
,
octave_sparse_complex_matrix
,
pow
);
148
INSTALL_BINOP
(
op_ldiv
,
octave_matrix
,
octave_sparse_complex_matrix
, ldiv);
149
INSTALL_BINOP
(
op_lt
,
octave_matrix
,
octave_sparse_complex_matrix
, lt);
150
INSTALL_BINOP
(
op_le
,
octave_matrix
,
octave_sparse_complex_matrix
, le);
151
INSTALL_BINOP
(
op_eq
,
octave_matrix
,
octave_sparse_complex_matrix
, eq);
152
INSTALL_BINOP
(
op_ge
,
octave_matrix
,
octave_sparse_complex_matrix
, ge);
153
INSTALL_BINOP
(
op_gt
,
octave_matrix
,
octave_sparse_complex_matrix
, gt);
154
INSTALL_BINOP
(
op_ne
,
octave_matrix
,
octave_sparse_complex_matrix
, ne);
155
INSTALL_BINOP
(
op_el_mul
,
octave_matrix
,
octave_sparse_complex_matrix
,
156
el_mul);
157
INSTALL_BINOP
(
op_el_div
,
octave_matrix
,
octave_sparse_complex_matrix
,
158
el_div);
159
INSTALL_BINOP
(
op_el_pow
,
octave_matrix
,
octave_sparse_complex_matrix
,
160
el_pow);
161
INSTALL_BINOP
(
op_el_ldiv
,
octave_matrix
,
octave_sparse_complex_matrix
,
162
el_ldiv);
163
INSTALL_BINOP
(
op_el_and
,
octave_matrix
,
octave_sparse_complex_matrix
,
164
el_and);
165
INSTALL_BINOP
(
op_el_or
,
octave_matrix
,
octave_sparse_complex_matrix
,
166
el_or);
167
168
INSTALL_CATOP
(
octave_matrix
,
octave_sparse_complex_matrix
, m_scm);
169
170
INSTALL_ASSIGNCONV
(
octave_matrix
,
octave_sparse_complex_matrix
,
171
octave_complex_matrix
);
172
173
INSTALL_WIDENOP
(
octave_matrix
,
octave_sparse_complex_matrix
,
174
sparse_complex_matrix_conv);
175
}
Generated on Mon Dec 30 2013 03:04:36 for GNU Octave by
1.8.1.2