4template <
int Size,
typename Scalar>
6 std::vector<Scalar> result(Size);
7 for (
int i=0; i<Size; i++) result[i] = vector(i);
12template <
int Size,
typename Scalar>
15 for (
int d = 0; d < Size; d++) {
23template <
int Size,
typename Scalar>
26 for (
int d = 0; d < Size; d++) {
32template <
int Size,
typename Scalar>
35 for (
int i = 0; i < Size; i++) {
36 result |= std::isnan(vector(i));
41template <
int Size,
typename Scalar>
44 for (
int i = 0; i < Size; i++) {
45 result &= std::isfinite(vector(i));
50template <
int Size,
typename Scalar>
53 for (
int d = 0; d < Size; d++) {
54 result |= vector(d) == value;
59template <
int Size,
typename Scalar>
65 for (
int i = 0; i < Size; i++) {
66 assertion1(vector(i) != 0.0, vector.toString());
67 result(i) = 1.0 / vector(i);
72template <
int Size,
typename Scalar>
75 for (
int i = 1; i < Size; i++) {
84 for (
int i = 0; i < Size; i++) {
90template <
int Size,
typename Scalar>
92 Scalar result(vector(0) * vector(0));
93 for (
int i = 1; i < Size; i++) {
94 result += vector(i) * vector(i);
99template <
int Size,
typename Scalar>
107 for (
int i = 0; i < Size; i++) {
108 result += (vector(i).real() * vector(i).real());
109 result += (vector(i).img() * vector(i).img());
119template <
int Size,
typename Scalar>
123 for (
int i = 0; i < Size; i++) {
134 for (
int i = 0; i < Size; i++) {
141template <
int Size,
typename Scalar>
144 for (
int i = 0; i < Size; i++) {
153 for (
int i = 0;
i <
Size;
i++) {
159template <
int Size,
typename Scalar>
161 return sum(vector) /
static_cast<Scalar
>(Size);
164template <
int Size,
typename Scalar>
166 Scalar result = vector(0);
167 for (
int i = 1; i < Size; i++) {
173template <
int Size,
typename Scalar>
175 Scalar result = vector(0);
176 for (
int i = 1; i < Size; i++) {
182template <
int Size,
typename Scalar>
185 for (
int i = 1; i < Size; i++) {
191template <
int Size,
typename Scalar>
194 for (
int i = 1; i < Size; i++) {
200template <
int Size,
typename Scalar>
202 Scalar largest = vector(0);
203 for (
int i = 1; i < Size; i++) {
204 if (largest < vector(i)) {
211template <
int Size,
typename Scalar>
213 Scalar largest =
std::abs(vector(0));
214 for (
int i = 1; i < Size; i++) {
215 if (largest <
std::abs(vector(i))) {
226 for (
int d = 0; d < Size; d++) {
227 result(d) = vector(d).real();
237 for (
int d = 0;
d <
Size;
d++) {
238 result(d) = vector(d).imag();
246 double result = std::numeric_limits<double>::min();
247 for (
int i = 0; i < Size; i++) {
248 result = result > vector(i).real() ? result : vector(i).real();
255 double result = std::numeric_limits<double>::min();
256 for (
int i = 0; i < Size; i++) {
257 result = result > vector(i).imag() ? result : vector(i).imag();
262template <
int Size,
typename Scalar>
264 Scalar smallest = vector(0);
265 for (
int i = 1; i < Size; i++) {
266 if (smallest > vector(i)) {
267 smallest = vector(i);
273template <
int Size,
typename Scalar>
#define assertion1(expr, param)
std::ostream & operator<<(std::ostream &os, const tarch::la::Vector< Size, Scalar > &vector)
Streams the component values into a comma separated representation.
std::string toString(Filter filter)
Scalar average(const Vector< Size, Scalar > &vector)
Computes the volume of the tetrahedron spanned by the Cartesian unit vectors scaled by the correspond...
int count(const Vector< Size, Scalar > &vector, const Scalar &value)
Scalar volume(const Vector< Size, Scalar > &vector)
Computes the volume of the tetrahedron spanned by the Cartesian unit vectors scaled by the correspond...
Vector< Size, double > real(const Vector< Size, std::complex< double > > &vector)
Scalar sum(const Matrix< Rows, Cols, Scalar > &matrix)
Computes the sum of all entries of the matrix.
double maxImag(const Vector< Size, std::complex< double > > &vector)
int indexMin(const Vector< Size, Scalar > &vector)
Returns the index of the element with minimal value (NOT absolute value).
bool allEntriesAreTheSame(const Vector< Size, Scalar > &vector)
std::vector< Scalar > toSTLVector(const Vector< Size, Scalar > &vector)
double abs(double value)
Returns the absolute value of a type by redirecting to std::abs.
int indexMax(const Vector< Size, Scalar > &vector)
Returns the index of the element with maximal value (NOT absolute value).
double max(double a, double b, double c)
I need the maximum of three values all the time, to I decided to write a function for this.
Matrix< Rows, Cols, Scalar > invertEntries(const Matrix< Rows, Cols, Scalar > &matrix)
int isEntryFinite(const Vector< Size, Scalar > &vector)
Scalar norm2Squared(const Vector< Size, Scalar > &vector)
int isEntryNan(const Vector< Size, Scalar > &vector)
Scalar maxAbs(const Vector< Size, Scalar > &vector)
Returns the element with maximal absolute value.
Vector< Size, double > imag(const Vector< Size, std::complex< double > > &vector)
bool equals(const Matrix< Rows, Cols, Scalar > &lhs, const Matrix< Rows, Cols, Scalar > &rhs, const Scalar &tolerance=NUMERICAL_ZERO_DIFFERENCE)
Compares to matrices on equality by means of a numerical accuracy.
Scalar norm1(const Vector< Size, Scalar > &vector)
Computes the 1-norm of the vector, i.e.
bool contains(const Vector< Size, Scalar > &vector, const Scalar &value)
Scalar normMax(const Vector< Size, Scalar > &vector)
Computes the max-norm of the vector.
Scalar min(const Vector< Size, Scalar > &vector)
Returns the element with minimal value (NOT absolute value).
Scalar norm2(const Vector< Size, Scalar > &vector)
Computes the 2-norm of the vector, i.e.
double maxReal(const Vector< Size, std::complex< double > > &vector)