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-sm-sm.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-null-mat.h
"
34
#include "
ops.h
"
35
36
#include "
sparse-xpow.h
"
37
#include "
sparse-xdiv.h
"
38
#include "
ov-re-sparse.h
"
39
40
// sparse matrix unary ops.
41
42
DEFUNOP_OP
(not, sparse_matrix, !)
43
DEFUNOP_OP
(uplus, sparse_matrix,
/* no-op */
)
44
DEFUNOP_OP
(uminus, sparse_matrix, -)
45
46
DEFUNOP
(
transpose
, sparse_matrix)
47
{
48
CAST_UNOP_ARG
(
const
octave_sparse_matrix
&);
49
return
octave_value
(v.sparse_matrix_value ().transpose (),
50
v.matrix_type ().transpose ());
51
}
52
53
// sparse matrix by sparse matrix ops.
54
55
DEFBINOP_OP
(add, sparse_matrix, sparse_matrix, +)
56
57
// DEFBINOP_OP (sub, sparse_matrix, sparse_matrix, -)
58
59
static
octave_value
60
oct_binop_sub
(const
octave_base_value
& a1, const
octave_base_value
&
a2
)
61
{
62
const
octave_sparse_matrix
&
v1
=
63
dynamic_cast<
const
octave_sparse_matrix
&
>
(a1);
64
const
octave_sparse_matrix
&
v2
=
65
dynamic_cast<
const
octave_sparse_matrix
&
>
(
a2
);
66
SparseMatrix
m = v1.
sparse_matrix_value
() - v2.
sparse_matrix_value
();
67
68
return
octave_value
(m);
69
}
70
71
DEFBINOP_OP
(mul, sparse_matrix, sparse_matrix, *)
72
73
DEFBINOP
(div, sparse_matrix, sparse_matrix)
74
{
75
CAST_BINOP_ARGS
(
const
octave_sparse_matrix
&,
const
octave_sparse_matrix
&);
76
77
if
(
v2
.
rows
() == 1 &&
v2
.
columns
() == 1)
78
{
79
double
d
=
v2
.
scalar_value
();
80
81
if
(d == 0.0)
82
gripe_divide_by_zero
();
83
84
return
octave_value
(
v1
.
sparse_matrix_value
() /
d
);
85
}
86
else
87
{
88
MatrixType
typ =
v2
.
matrix_type
();
89
SparseMatrix
ret =
xdiv
(
v1
.
sparse_matrix_value
(),
90
v2
.
sparse_matrix_value
(), typ);
91
92
v2
.
matrix_type
(typ);
93
return
ret;
94
}
95
}
96
97
DEFBINOPX
(
pow
, sparse_matrix, sparse_matrix)
98
{
99
error
(
"can't do A ^ B for A and B both matrices"
);
100
return
octave_value
();
101
}
102
103
DEFBINOP
(ldiv, sparse_matrix, sparse_matrix)
104
{
105
CAST_BINOP_ARGS
(
const
octave_sparse_matrix
&,
const
octave_sparse_matrix
&);
106
107
if
(
v1
.
rows
() == 1 &&
v1
.
columns
() == 1)
108
{
109
double
d
=
v1
.
double_value
();
110
111
if
(d == 0.0)
112
gripe_divide_by_zero
();
113
114
return
octave_value
(
v2
.
sparse_matrix_value
() /
d
);
115
}
116
else
117
{
118
MatrixType
typ =
v1
.
matrix_type
();
119
120
SparseMatrix
ret =
xleftdiv
(
v1
.
sparse_matrix_value
(),
121
v2
.
sparse_matrix_value
(), typ);
122
123
v1
.
matrix_type
(typ);
124
return
ret;
125
}
126
}
127
128
DEFBINOP_FN
(lt, sparse_matrix, sparse_matrix,
mx_el_lt
)
129
DEFBINOP_FN
(le, sparse_matrix, sparse_matrix,
mx_el_le
)
130
DEFBINOP_FN
(eq, sparse_matrix, sparse_matrix,
mx_el_eq
)
131
DEFBINOP_FN
(ge, sparse_matrix, sparse_matrix,
mx_el_ge
)
132
DEFBINOP_FN
(gt, sparse_matrix, sparse_matrix,
mx_el_gt
)
133
DEFBINOP_FN
(ne, sparse_matrix, sparse_matrix,
mx_el_ne
)
134
135
DEFBINOP_FN
(el_mul, sparse_matrix, sparse_matrix,
product
)
136
DEFBINOP_FN
(el_div, sparse_matrix, sparse_matrix,
quotient
)
137
138
DEFBINOP_FN
(el_pow, sparse_matrix, sparse_matrix,
elem_xpow
)
139
140
DEFBINOP
(el_ldiv, sparse_matrix, sparse_matrix)
141
{
142
CAST_BINOP_ARGS
(
const
octave_sparse_matrix
&,
const
octave_sparse_matrix
&);
143
return
octave_value
144
(
quotient
(
v2
.
sparse_matrix_value
(),
v1
.
sparse_matrix_value
()));
145
}
146
147
DEFBINOP_FN
(el_and, sparse_matrix, sparse_matrix,
mx_el_and
)
148
DEFBINOP_FN
(el_or, sparse_matrix, sparse_matrix,
mx_el_or
)
149
150
DEFCATOP_FN
(sm_sm, sparse_matrix, sparse_matrix,
concat
)
151
152
DEFASSIGNOP_FN
(
assign
, sparse_matrix, sparse_matrix, assign)
153
154
DEFNULLASSIGNOP_FN
(null_assign, sparse_matrix, delete_elements)
155
156
void
157
install_sm_sm_ops
(
void
)
158
{
159
INSTALL_UNOP
(
op_not
,
octave_sparse_matrix
, not);
160
INSTALL_UNOP
(
op_uplus
,
octave_sparse_matrix
, uplus);
161
INSTALL_UNOP
(
op_uminus
,
octave_sparse_matrix
, uminus);
162
INSTALL_UNOP
(
op_transpose
,
octave_sparse_matrix
,
transpose
);
163
INSTALL_UNOP
(
op_hermitian
,
octave_sparse_matrix
,
transpose
);
164
165
INSTALL_BINOP
(
op_add
,
octave_sparse_matrix
,
octave_sparse_matrix
, add);
166
INSTALL_BINOP
(
op_sub
,
octave_sparse_matrix
,
octave_sparse_matrix
, sub);
167
INSTALL_BINOP
(
op_mul
,
octave_sparse_matrix
,
octave_sparse_matrix
, mul);
168
INSTALL_BINOP
(
op_div
,
octave_sparse_matrix
,
octave_sparse_matrix
, div);
169
INSTALL_BINOP
(
op_pow
,
octave_sparse_matrix
,
octave_sparse_matrix
,
pow
);
170
INSTALL_BINOP
(
op_ldiv
,
octave_sparse_matrix
,
octave_sparse_matrix
, ldiv);
171
INSTALL_BINOP
(
op_lt
,
octave_sparse_matrix
,
octave_sparse_matrix
, lt);
172
INSTALL_BINOP
(
op_le
,
octave_sparse_matrix
,
octave_sparse_matrix
, le);
173
INSTALL_BINOP
(
op_eq
,
octave_sparse_matrix
,
octave_sparse_matrix
, eq);
174
INSTALL_BINOP
(
op_ge
,
octave_sparse_matrix
,
octave_sparse_matrix
, ge);
175
INSTALL_BINOP
(
op_gt
,
octave_sparse_matrix
,
octave_sparse_matrix
, gt);
176
INSTALL_BINOP
(
op_ne
,
octave_sparse_matrix
,
octave_sparse_matrix
, ne);
177
INSTALL_BINOP
(
op_el_mul
,
octave_sparse_matrix
,
octave_sparse_matrix
,
178
el_mul);
179
INSTALL_BINOP
(
op_el_div
,
octave_sparse_matrix
,
octave_sparse_matrix
,
180
el_div);
181
INSTALL_BINOP
(
op_el_pow
,
octave_sparse_matrix
,
octave_sparse_matrix
,
182
el_pow);
183
INSTALL_BINOP
(
op_el_ldiv
,
octave_sparse_matrix
,
octave_sparse_matrix
,
184
el_ldiv);
185
INSTALL_BINOP
(
op_el_and
,
octave_sparse_matrix
,
octave_sparse_matrix
,
186
el_and);
187
INSTALL_BINOP
(
op_el_or
,
octave_sparse_matrix
,
octave_sparse_matrix
,
188
el_or);
189
190
INSTALL_CATOP
(
octave_sparse_matrix
,
octave_sparse_matrix
, sm_sm);
191
192
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_sparse_matrix
,
octave_sparse_matrix
,
193
assign);
194
195
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_sparse_matrix
,
octave_null_matrix
,
196
null_assign);
197
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_sparse_matrix
,
octave_null_str
,
198
null_assign);
199
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_sparse_matrix
,
octave_null_sq_str
,
200
null_assign);
201
}
Generated on Mon Dec 30 2013 03:04:36 for GNU Octave by
1.8.1.2