GNU Octave 7.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
xnorm.cc
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////
2//
3// Copyright (C) 2008-2022 The Octave Project Developers
4//
5// See the file COPYRIGHT.md in the top-level directory of this
6// distribution or <https://octave.org/copyright/>.
7//
8// This file is part of Octave.
9//
10// Octave is free software: you can redistribute it and/or modify it
11// under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// Octave is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with Octave; see the file COPYING. If not, see
22// <https://www.gnu.org/licenses/>.
23//
24////////////////////////////////////////////////////////////////////////
25
26#if defined (HAVE_CONFIG_H)
27# include "config.h"
28#endif
29
30#include "oct-norm.h"
31
32#include "errwarn.h"
33#include "ov.h"
34#include "xnorm.h"
35
36OCTAVE_NAMESPACE_BEGIN
37
39{
40 octave_value retval;
41
42 bool isvector = (x.columns () == 1 || x.rows () == 1);
43 bool iscomplex = x.iscomplex ();
44 bool issparse = x.issparse ();
45 bool isfloat = x.is_single_type ();
46
47 if (! isfloat && ! x.is_double_type ())
48 err_wrong_type_arg ("xnorm", x);
49
50 if (x.isempty ())
51 retval = octave_value (0);
52 else if (isvector)
53 {
54 if (isfloat & iscomplex)
55 retval = octave::xnorm (x.float_complex_column_vector_value (),
56 p.float_value ());
57 else if (isfloat)
58 retval = octave::xnorm (x.float_column_vector_value (),
59 p.float_value ());
60 else if (iscomplex)
61 retval = octave::xnorm (x.complex_column_vector_value (),
62 p.double_value ());
63 else
64 retval = octave::xnorm (x.column_vector_value (),
65 p.double_value ());
66 }
67 else if (issparse)
68 {
69 if (iscomplex)
70 retval = octave::xnorm (x.sparse_complex_matrix_value (),
71 p.double_value ());
72 else
73 retval = octave::xnorm (x.sparse_matrix_value (),
74 p.double_value ());
75 }
76 else
77 {
78 if (isfloat & iscomplex)
79 retval = octave::xnorm (x.float_complex_matrix_value (),
80 p.float_value ());
81 else if (isfloat)
82 retval = octave::xnorm (x.float_matrix_value (),
83 p.float_value ());
84 else if (iscomplex)
85 retval = octave::xnorm (x.complex_matrix_value (),
86 p.double_value ());
87 else
88 retval = octave::xnorm (x.matrix_value (),
89 p.double_value ());
90 }
91
92 return retval;
93}
94
96{
97 octave_value retval;
98
99 bool iscomplex = x.iscomplex ();
100 bool issparse = x.issparse ();
101 bool isfloat = x.is_single_type ();
102
103 if (! isfloat && ! x.is_double_type ())
104 err_wrong_type_arg ("xcolnorms", x);
105
106 if (issparse)
107 {
108 if (iscomplex)
109 retval = octave::xcolnorms (x.sparse_complex_matrix_value (),
110 p.double_value ());
111 else
112 retval = octave::xcolnorms (x.sparse_matrix_value (),
113 p.double_value ());
114 }
115 else
116 {
117 if (isfloat & iscomplex)
118 retval = octave::xcolnorms (x.float_complex_matrix_value (),
119 p.float_value ());
120 else if (isfloat)
121 retval = octave::xcolnorms (x.float_matrix_value (),
122 p.float_value ());
123 else if (iscomplex)
124 retval = octave::xcolnorms (x.complex_matrix_value (),
125 p.double_value ());
126 else
127 retval = octave::xcolnorms (x.matrix_value (),
128 p.double_value ());
129 }
130
131 return retval;
132}
133
135{
136 octave_value retval;
137
138 bool iscomplex = x.iscomplex ();
139 bool issparse = x.issparse ();
140 bool isfloat = x.is_single_type ();
141
142 if (! isfloat && ! x.is_double_type ())
143 err_wrong_type_arg ("xrownorms", x);
144
145 if (issparse)
146 {
147 if (iscomplex)
148 retval = octave::xrownorms (x.sparse_complex_matrix_value (),
149 p.double_value ());
150 else
151 retval = octave::xrownorms (x.sparse_matrix_value (),
152 p.double_value ());
153 }
154 else
155 {
156 if (isfloat & iscomplex)
157 retval = octave::xrownorms (x.float_complex_matrix_value (),
158 p.float_value ());
159 else if (isfloat)
160 retval = octave::xrownorms (x.float_matrix_value (),
161 p.float_value ());
162 else if (iscomplex)
163 retval = octave::xrownorms (x.complex_matrix_value (),
164 p.double_value ());
165 else
166 retval = octave::xrownorms (x.matrix_value (),
167 p.double_value ());
168 }
169
170 return retval;
171}
172
174{
175 octave_value retval;
176
177 bool iscomplex = x.iscomplex ();
178 bool issparse = x.issparse ();
179 bool isfloat = x.is_single_type ();
180
181 if (! isfloat && ! x.is_double_type ())
182 err_wrong_type_arg ("xfrobnorm", x);
183
184 if (issparse)
185 {
186 if (iscomplex)
187 retval = octave::xfrobnorm (x.sparse_complex_matrix_value ());
188 else
189 retval = octave::xfrobnorm (x.sparse_matrix_value ());
190 }
191 else
192 {
193 if (isfloat & iscomplex)
194 retval = octave::xfrobnorm (x.float_complex_matrix_value ());
195 else if (isfloat)
196 retval = octave::xfrobnorm (x.float_matrix_value ());
197 else if (iscomplex)
198 retval = octave::xfrobnorm (x.complex_matrix_value ());
199 else
200 retval = octave::xfrobnorm (x.matrix_value ());
201 }
202
203 return retval;
204}
205
206OCTAVE_NAMESPACE_END
bool isvector(const dim_vector &dim)
Definition: Array-util.cc:140
float float_value(bool frc_str_conv=false) const
Definition: ov.h:889
double double_value(bool frc_str_conv=false) const
Definition: ov.h:886
void err_wrong_type_arg(const char *name, const char *s)
Definition: errwarn.cc:166
F77_RET_T const F77_DBLE * x
double xfrobnorm(const Matrix &x)
Definition: oct-norm.cc:585
ColumnVector xrownorms(const Matrix &m, double p)
Definition: oct-norm.cc:628
RowVector xcolnorms(const Matrix &m, double p)
Definition: oct-norm.cc:628
double xnorm(const ColumnVector &x, double p)
Definition: oct-norm.cc:585
OCTAVE_NAMESPACE_BEGIN octave_value xnorm(const octave_value &x, const octave_value &p)
Definition: xnorm.cc:38
octave_value xcolnorms(const octave_value &x, const octave_value &p)
Definition: xnorm.cc:95
octave_value xfrobnorm(const octave_value &x)
Definition: xnorm.cc:173
octave_value xrownorms(const octave_value &x, const octave_value &p)
Definition: xnorm.cc:134