IT++ Logo
elem_math.h
Go to the documentation of this file.
1
29#ifndef ELEM_MATH_H
30#define ELEM_MATH_H
31
34#include <cstdlib> // required by std::abs()
35#include <itpp/itexports.h>
36
37namespace itpp
38{
39
42
43// -------------------- sqr function --------------------
44
46inline double sqr(double x) { return (x * x); }
48inline double sqr(const std::complex<double>& x)
49{
50 return (x.real() * x.real() + x.imag() * x.imag());
51}
53inline vec sqr(const vec &x) { return apply_function<double>(sqr, x); }
55inline mat sqr(const mat &x) { return apply_function<double>(sqr, x); }
57ITPP_EXPORT vec sqr(const cvec &x);
59ITPP_EXPORT mat sqr(const cmat &x);
60
61
62// -------------------- abs function --------------------
63
65inline vec abs(const vec &x) { return apply_function<double>(std::fabs, x); }
67inline mat abs(const mat &x) { return apply_function<double>(std::fabs, x); }
69inline ivec abs(const ivec &x) { return apply_function<int>(std::abs, x); }
71inline imat abs(const imat &x) { return apply_function<int>(std::abs, x); }
73ITPP_EXPORT vec abs(const cvec &x);
75ITPP_EXPORT mat abs(const cmat &x);
76
77
78// -------------------- sign/sgn functions --------------------
79
81inline double sign(double x)
82{
83 return (x == 0.0 ? 0.0 : (x < 0.0 ? -1.0 : 1.0));
84}
86inline vec sign(const vec &x) { return apply_function<double>(sign, x); }
88inline mat sign(const mat &x) { return apply_function<double>(sign, x); }
89
91inline double sgn(double x) { return sign(x); }
93inline vec sgn(const vec &x) { return apply_function<double>(sign, x); }
95inline mat sgn(const mat &x) { return apply_function<double>(sign, x); }
96
98inline int sign_i(int x)
99{
100 return (x == 0 ? 0 : (x < 0 ? -1 : 1));
101}
103inline ivec sign_i(const ivec &x) { return apply_function<int>(sign_i, x); }
105inline imat sign_i(const imat &x) { return apply_function<int>(sign_i, x); }
106
108inline int sgn_i(int x) { return sign_i(x); }
110inline ivec sgn_i(const ivec &x) { return apply_function<int>(sign_i, x); }
112inline imat sgn_i(const imat &x) { return apply_function<int>(sign_i, x); }
113
115inline int sign_i(double x)
116{
117 return (x == 0.0 ? 0 : (x < 0.0 ? -1 : 1));
118}
119
120// -------------------- sqrt function --------------------
121
123inline vec sqrt(const vec &x) { return apply_function<double>(std::sqrt, x); }
125inline mat sqrt(const mat &x) { return apply_function<double>(std::sqrt, x); }
126
127
128// -------------------- gamma function --------------------
129
131ITPP_EXPORT double gamma(double x);
133ITPP_EXPORT vec gamma(const vec &x);
135ITPP_EXPORT mat gamma(const mat &x);
136
137
138// -------------------- rem function --------------------
139
141inline double rem(double x, double y) { return fmod(x, y); }
143inline vec rem(const vec &x, double y)
144{
145 return apply_function<double>(rem, x, y);
146}
148inline vec rem(double x, const vec &y)
149{
150 return apply_function<double>(rem, x, y);
151}
153inline mat rem(const mat &x, double y)
154{
155 return apply_function<double>(rem, x, y);
156}
158inline mat rem(double x, const mat &y)
159{
160 return apply_function<double>(rem, x, y);
161}
162
163// -------------------- mod function --------------------
164
166inline int mod(int k, int n)
167{
168 return (n == 0) ? k : (k - n * floor_i(static_cast<double>(k) / n));
169}
170
171
172// -------------------- factorial coefficient function --------------------
173
175ITPP_EXPORT double fact(int index);
176
177
178// -------------------- binomial coefficient function --------------------
179
181ITPP_EXPORT double binom(int n, int k);
182
184ITPP_EXPORT int binom_i(int n, int k);
185
187ITPP_EXPORT double log_binom(int n, int k);
188
189
190// -------------------- greatest common divisor function --------------------
191
199ITPP_EXPORT int gcd(int a, int b);
200
201
202// -------------------- complex related functions --------------------
203
205ITPP_EXPORT vec real(const cvec &x);
207ITPP_EXPORT mat real(const cmat &x);
209ITPP_EXPORT vec imag(const cvec &x);
211ITPP_EXPORT mat imag(const cmat &x);
212
214ITPP_EXPORT vec arg(const cvec &x);
216ITPP_EXPORT mat arg(const cmat &x);
218inline vec angle(const cvec &x) { return arg(x); }
220inline mat angle(const cmat &x) { return arg(x); }
221
222// Added due to a failure in MSVC++ .NET 2005, which crashes on this
223// code.
224#ifndef _MSC_VER
226inline cvec conj(const cvec &x)
227{
228 return apply_function<std::complex<double> >(std::conj, x);
229}
231inline cmat conj(const cmat &x)
232{
233 return apply_function<std::complex<double> >(std::conj, x);
234}
235#else
237ITPP_EXPORT cvec conj(const cvec &x);
238
240ITPP_EXPORT cmat conj(const cmat &x);
241#endif
242
244
245} // namespace itpp
246
247#endif // #ifndef ELEM_MATH_H
248
249
250
251
Definitions of converters between different vector and matrix types.
double gamma(double x)
Deprecated gamma function - please use tgamma() instead.
Definition: elem_math.cpp:79
int sgn_i(int x)
Signum function.
Definition: elem_math.h:108
double sign(double x)
Signum function.
Definition: elem_math.h:81
double binom(int n, int k)
Compute the binomial coefficient "n over k".
Definition: elem_math.cpp:95
double sgn(double x)
Signum function.
Definition: elem_math.h:91
int mod(int k, int n)
Calculates the modulus, i.e. the signed reminder after division.
Definition: elem_math.h:166
double rem(double x, double y)
The reminder of the division x/y.
Definition: elem_math.h:141
double fact(int index)
Calculates factorial coefficient for index <= 170.
Definition: elem_math.cpp:84
vec imag(const cvec &data)
Imaginary part of complex values.
Definition: elem_math.cpp:180
vec angle(const cvec &x)
Angle.
Definition: elem_math.h:218
vec arg(const cvec &data)
Argument (angle)
Definition: elem_math.cpp:202
int binom_i(int n, int k)
Compute the binomial coefficient "n over k".
Definition: elem_math.cpp:110
vec real(const cvec &data)
Real part of complex values.
Definition: elem_math.cpp:157
vec sqr(const cvec &data)
Absolute square of elements.
Definition: elem_math.cpp:36
int gcd(int a, int b)
Compute the greatest common divisor (GCD) g of the elements a and b.
Definition: elem_math.cpp:140
int sign_i(int x)
Signum function.
Definition: elem_math.h:98
cvec conj(const cvec &x)
Conjugate of complex value.
Definition: elem_math.h:226
vec sqrt(const vec &x)
Square root of the elements.
Definition: elem_math.h:123
double log_binom(int n, int k)
Compute the base 10 logarithm of the binomial coefficient "n over k".
Definition: elem_math.cpp:125
Help functions to make functions with vec and mat as arguments.
itpp namespace
Definition: itmex.h:37
int floor_i(double x)
The nearest smaller integer.
Definition: converters.h:350
bin abs(const bin &inbin)
absolute value of bin
Definition: binary.h:174
int abs(const itpp::bin &inbin)
absolute value of bin
Definition: binary.h:186
SourceForge Logo

Generated on Tue Jan 24 2023 00:00:00 for IT++ by Doxygen 1.9.6