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-m.cc
Go to the documentation of this file.
1
/*
2
3
Copyright (C) 1996-2013 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
#ifdef HAVE_CONFIG_H
24
#include <config.h>
25
#endif
26
27
#include "
gripes.h
"
28
#include "
oct-obj.h
"
29
#include "
ov.h
"
30
#include "
ov-re-mat.h
"
31
#include "
ov-flt-re-mat.h
"
32
#include "
ov-typeinfo.h
"
33
#include "
ov-null-mat.h
"
34
#include "
ops.h
"
35
#include "
xdiv.h
"
36
#include "
xpow.h
"
37
38
// matrix unary ops.
39
40
DEFNDUNOP_OP
(not, matrix, array, !)
41
DEFNDUNOP_OP
(uplus, matrix, array,
/* no-op */
)
42
DEFNDUNOP_OP
(uminus, matrix, array, -)
43
44
DEFUNOP
(
transpose
, matrix)
45
{
46
CAST_UNOP_ARG
(
const
octave_matrix
&);
47
48
if
(v.ndims () > 2)
49
{
50
error
(
"transpose not defined for N-d objects"
);
51
return
octave_value
();
52
}
53
else
54
return
octave_value
(v.matrix_value ().transpose ());
55
}
56
57
DEFNCUNOP_METHOD
(incr, matrix, increment)
58
DEFNCUNOP_METHOD
(decr, matrix, decrement)
59
DEFNCUNOP_METHOD
(changesign, matrix, changesign)
60
61
// matrix by matrix ops.
62
63
DEFNDBINOP_OP
(add, matrix, matrix, array, array, +)
64
DEFNDBINOP_OP
(sub, matrix, matrix, array, array, -)
65
66
DEFBINOP_OP
(mul, matrix, matrix, *)
67
68
DEFBINOP
(div, matrix, matrix)
69
{
70
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_matrix
&);
71
MatrixType
typ =
v2
.
matrix_type
();
72
73
Matrix
ret =
xdiv
(
v1
.
matrix_value
(),
v2
.
matrix_value
(), typ);
74
75
v2
.
matrix_type
(typ);
76
return
ret;
77
}
78
79
DEFBINOPX
(
pow
, matrix, matrix)
80
{
81
error
(
"can't do A ^ B for A and B both matrices"
);
82
return
octave_value
();
83
}
84
85
DEFBINOP
(ldiv, matrix, matrix)
86
{
87
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_matrix
&);
88
MatrixType
typ =
v1
.
matrix_type
();
89
90
Matrix
ret =
xleftdiv
(
v1
.
matrix_value
(),
v2
.
matrix_value
(), typ);
91
92
v1
.
matrix_type
(typ);
93
return
ret;
94
}
95
96
DEFBINOP
(
trans_mul
, matrix, matrix)
97
{
98
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_matrix
&);
99
return
octave_value
(
xgemm
(
v1
.
matrix_value
(),
v2
.
matrix_value
(),
100
blas_trans
,
blas_no_trans
));
101
}
102
103
DEFBINOP
(
mul_trans
, matrix, matrix)
104
{
105
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_matrix
&);
106
return
octave_value
(
xgemm
(
v1
.
matrix_value
(),
v2
.
matrix_value
(),
107
blas_no_trans
,
blas_trans
));
108
}
109
110
DEFBINOP
(trans_ldiv, matrix, matrix)
111
{
112
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_matrix
&);
113
MatrixType
typ =
v1
.
matrix_type
();
114
115
Matrix
ret =
xleftdiv
(
v1
.
matrix_value
(),
v2
.
matrix_value
(),
116
typ,
blas_trans
);
117
118
v1
.
matrix_type
(typ);
119
return
ret;
120
}
121
122
DEFNDBINOP_FN
(lt, matrix, matrix, array, array,
mx_el_lt
)
123
DEFNDBINOP_FN
(le, matrix, matrix, array, array,
mx_el_le
)
124
DEFNDBINOP_FN
(eq, matrix, matrix, array, array,
mx_el_eq
)
125
DEFNDBINOP_FN
(ge, matrix, matrix, array, array,
mx_el_ge
)
126
DEFNDBINOP_FN
(gt, matrix, matrix, array, array,
mx_el_gt
)
127
DEFNDBINOP_FN
(ne, matrix, matrix, array, array,
mx_el_ne
)
128
129
DEFNDBINOP_FN
(el_mul, matrix, matrix, array, array,
product
)
130
DEFNDBINOP_FN
(el_div, matrix, matrix, array, array,
quotient
)
131
DEFNDBINOP_FN
(el_pow, matrix, matrix, array, array,
elem_xpow
)
132
133
DEFBINOP
(el_ldiv, matrix, matrix)
134
{
135
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_matrix
&);
136
137
return
octave_value
(
quotient
(
v2
.
array_value
(),
v1
.
array_value
()));
138
}
139
140
DEFNDBINOP_FN
(el_and, matrix, matrix, array, array,
mx_el_and
)
141
DEFNDBINOP_FN
(el_or, matrix, matrix, array, array,
mx_el_or
)
142
DEFNDBINOP_FN
(el_not_and, matrix, matrix, array, array,
mx_el_not_and
)
143
DEFNDBINOP_FN
(el_not_or, matrix, matrix, array, array,
mx_el_not_or
)
144
DEFNDBINOP_FN
(el_and_not, matrix, matrix, array, array,
mx_el_and_not
)
145
DEFNDBINOP_FN
(el_or_not, matrix, matrix, array, array,
mx_el_or_not
)
146
147
148
DEFNDCATOP_FN
(m_m, matrix, matrix, array, array,
concat
)
149
150
DEFNDASSIGNOP_FN
(
assign
, matrix, matrix, array, assign)
151
DEFNDASSIGNOP_FN
(sgl_assign, float_matrix, matrix, float_array, assign)
152
153
DEFNULLASSIGNOP_FN
(null_assign, matrix, delete_elements)
154
155
DEFNDASSIGNOP_OP
(assign_add, matrix, matrix, array, +=)
156
DEFNDASSIGNOP_OP
(assign_sub, matrix, matrix, array, -=)
157
DEFNDASSIGNOP_FNOP
(assign_el_mul, matrix, matrix, array,
product_eq
)
158
DEFNDASSIGNOP_FNOP
(assign_el_div, matrix, matrix, array,
quotient_eq
)
159
160
CONVDECL
(matrix_to_float_matrix)
161
{
162
CAST_CONV_ARG
(
const
octave_matrix
&);
163
164
return
new
octave_float_matrix
(
FloatNDArray
(v.array_value ()));
165
}
166
167
void
168
install_m_m_ops
(
void
)
169
{
170
INSTALL_UNOP
(
op_not
,
octave_matrix
, not);
171
INSTALL_UNOP
(
op_uplus
,
octave_matrix
, uplus);
172
INSTALL_UNOP
(
op_uminus
,
octave_matrix
, uminus);
173
INSTALL_UNOP
(
op_transpose
,
octave_matrix
,
transpose
);
174
INSTALL_UNOP
(
op_hermitian
,
octave_matrix
,
transpose
);
175
176
INSTALL_NCUNOP
(
op_incr
,
octave_matrix
, incr);
177
INSTALL_NCUNOP
(
op_decr
,
octave_matrix
, decr);
178
INSTALL_NCUNOP
(
op_uminus
,
octave_matrix
, changesign);
179
180
INSTALL_BINOP
(
op_add
,
octave_matrix
,
octave_matrix
, add);
181
INSTALL_BINOP
(
op_sub
,
octave_matrix
,
octave_matrix
, sub);
182
INSTALL_BINOP
(
op_mul
,
octave_matrix
,
octave_matrix
, mul);
183
INSTALL_BINOP
(
op_div
,
octave_matrix
,
octave_matrix
, div);
184
INSTALL_BINOP
(
op_pow
,
octave_matrix
,
octave_matrix
,
pow
);
185
INSTALL_BINOP
(
op_ldiv
,
octave_matrix
,
octave_matrix
, ldiv);
186
INSTALL_BINOP
(
op_lt
,
octave_matrix
,
octave_matrix
, lt);
187
INSTALL_BINOP
(
op_le
,
octave_matrix
,
octave_matrix
, le);
188
INSTALL_BINOP
(
op_eq
,
octave_matrix
,
octave_matrix
, eq);
189
INSTALL_BINOP
(
op_ge
,
octave_matrix
,
octave_matrix
, ge);
190
INSTALL_BINOP
(
op_gt
,
octave_matrix
,
octave_matrix
, gt);
191
INSTALL_BINOP
(
op_ne
,
octave_matrix
,
octave_matrix
, ne);
192
INSTALL_BINOP
(
op_el_mul
,
octave_matrix
,
octave_matrix
, el_mul);
193
INSTALL_BINOP
(
op_el_div
,
octave_matrix
,
octave_matrix
, el_div);
194
INSTALL_BINOP
(
op_el_pow
,
octave_matrix
,
octave_matrix
, el_pow);
195
INSTALL_BINOP
(
op_el_ldiv
,
octave_matrix
,
octave_matrix
, el_ldiv);
196
INSTALL_BINOP
(
op_el_and
,
octave_matrix
,
octave_matrix
, el_and);
197
INSTALL_BINOP
(
op_el_or
,
octave_matrix
,
octave_matrix
, el_or);
198
INSTALL_BINOP
(
op_el_and_not
,
octave_matrix
,
octave_matrix
, el_and_not);
199
INSTALL_BINOP
(
op_el_or_not
,
octave_matrix
,
octave_matrix
, el_or_not);
200
INSTALL_BINOP
(
op_el_not_and
,
octave_matrix
,
octave_matrix
, el_not_and);
201
INSTALL_BINOP
(
op_el_not_or
,
octave_matrix
,
octave_matrix
, el_not_or);
202
INSTALL_BINOP
(
op_trans_mul
,
octave_matrix
,
octave_matrix
,
trans_mul
);
203
INSTALL_BINOP
(
op_mul_trans
,
octave_matrix
,
octave_matrix
,
mul_trans
);
204
INSTALL_BINOP
(
op_herm_mul
,
octave_matrix
,
octave_matrix
,
trans_mul
);
205
INSTALL_BINOP
(
op_mul_herm
,
octave_matrix
,
octave_matrix
,
mul_trans
);
206
INSTALL_BINOP
(
op_trans_ldiv
,
octave_matrix
,
octave_matrix
, trans_ldiv);
207
INSTALL_BINOP
(
op_herm_ldiv
,
octave_matrix
,
octave_matrix
, trans_ldiv);
208
209
INSTALL_CATOP
(
octave_matrix
,
octave_matrix
, m_m);
210
211
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_matrix
,
octave_matrix
,
assign
);
212
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_float_matrix
,
octave_matrix
, sgl_assign);
213
214
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_matrix
,
octave_null_matrix
, null_assign);
215
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_matrix
,
octave_null_str
, null_assign);
216
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_matrix
,
octave_null_sq_str
, null_assign);
217
218
INSTALL_ASSIGNOP
(
op_add_eq
,
octave_matrix
,
octave_matrix
, assign_add);
219
INSTALL_ASSIGNOP
(
op_sub_eq
,
octave_matrix
,
octave_matrix
, assign_sub);
220
INSTALL_ASSIGNOP
(
op_el_mul_eq
,
octave_matrix
,
octave_matrix
, assign_el_mul);
221
INSTALL_ASSIGNOP
(
op_el_div_eq
,
octave_matrix
,
octave_matrix
, assign_el_div);
222
223
INSTALL_CONVOP
(
octave_matrix
,
octave_float_matrix
, matrix_to_float_matrix);
224
}
Generated on Mon Dec 30 2013 03:04:36 for GNU Octave by
1.8.1.2