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
General array class.
Definition array.h:105
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.
vec angle(const cvec &x)
Angle.
Definition elem_math.h:218
vec arg(const cvec &data)
Argument (angle)
int binom_i(int n, int k)
Compute the binomial coefficient "n over k".
vec real(const cvec &data)
Real part of complex values.
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.
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".
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

Generated on Tue Mar 26 2024 19:08:31 for IT++ by Doxygen 1.9.8