EllAlgo 1.6.13
Loading...
Searching...
No Matches
linear_algebra.hpp
Go to the documentation of this file.
1
10#ifndef LINEAR_ALGEBRA_HPP
11#define LINEAR_ALGEBRA_HPP
12
13#include <cmath>
14#include <vector>
15
25template <typename T> class Vector2 {
26 public:
27 using value_type = T;
28
35 Vector2(size_t size) : data(size, T{}) {}
36
42 Vector2(const std::vector<T>& v) : data(v) {}
43
47 ~Vector2() = default;
48
52 Vector2(const Vector2&) = default;
53
57 Vector2& operator=(const Vector2&) = default;
58
63
68
75 T& operator[](size_t i) { return data[i]; }
76
83 const T& operator[](size_t i) const { return data[i]; }
84
90 size_t size() const { return data.size(); }
91
99 for (size_t i = 0; i < size(); ++i) data[i] += rhs[i];
100 return *this;
101 }
102
110 for (size_t i = 0; i < size(); ++i) data[i] -= rhs[i];
111 return *this;
112 }
113
121 for (auto& val : data) val *= scalar;
122 return *this;
123 }
124
135 T dot(const Vector2& other) const {
136 T sum = T{};
137 for (size_t i = 0; i < size(); ++i) sum += data[i] * other[i];
138 return sum;
139 }
140
150 T norm() const { return std::sqrt(dot(*this)); }
151
152 private:
153 std::vector<T> data;
154};
155
163template <typename T> inline Vector2<T> operator+(Vector2<T> lhs, const Vector2<T>& rhs) {
164 lhs += rhs;
165 return lhs;
166}
167
175template <typename T> inline Vector2<T> operator-(Vector2<T> lhs, const Vector2<T>& rhs) {
176 lhs -= rhs;
177 return lhs;
178}
179
187template <typename T> inline Vector2<T> operator*(Vector2<T> v, T scalar) {
188 v *= scalar;
189 return v;
190}
191
199template <typename T> inline Vector2<T> operator*(T scalar, Vector2<T> v) { return v * scalar; }
200
210template <typename T> class Matrix2 {
211 public:
221 Matrix2(size_t rows, size_t cols) : data(rows, std::vector<T>(cols, T{})) {}
222
229 std::vector<T>& operator[](size_t i) { return data[i]; }
230
237 const std::vector<T>& operator[](size_t i) const { return data[i]; }
238
244 size_t rows() const { return data.size(); }
245
251 size_t cols() const { return data[0].size(); }
252
265 for (size_t i = 0; i < rows(); ++i) {
266 for (size_t j = 0; j < cols(); ++j) {
267 result[i] += data[i][j] * v[j];
268 }
269 }
270 return result;
271 }
272
273 private:
274 std::vector<std::vector<T>> data;
275};
276
277#endif // LINEAR_ALGEBRA_HPP
double sum(const Arr &a)
Sum of all elements.
Definition arr.hpp:260
A simple 2D matrix class for linear algebra operations.
Definition linear_algebra.hpp:210
Matrix2(size_t rows, size_t cols)
Construct a matrix with specified dimensions.
Definition linear_algebra.hpp:221
size_t cols() const
Definition linear_algebra.hpp:251
std::vector< T > & operator[](size_t i)
Definition linear_algebra.hpp:229
const std::vector< T > & operator[](size_t i) const
Definition linear_algebra.hpp:237
Vector2< T > operator*(const Vector2< T > &v) const
Definition linear_algebra.hpp:263
size_t rows() const
Definition linear_algebra.hpp:244
A simple 2D vector class for linear algebra operations.
Definition linear_algebra.hpp:25
Vector2(size_t size)
Definition linear_algebra.hpp:35
Vector2 & operator-=(const Vector2 &rhs)
Definition linear_algebra.hpp:109
T norm() const
Definition linear_algebra.hpp:150
T dot(const Vector2 &other) const
Definition linear_algebra.hpp:135
~Vector2()=default
Vector2(const std::vector< T > &v)
Definition linear_algebra.hpp:42
Vector2(Vector2 &&) noexcept=default
const T & operator[](size_t i) const
Definition linear_algebra.hpp:83
Vector2 & operator+=(const Vector2 &rhs)
Definition linear_algebra.hpp:98
Vector2 & operator*=(T scalar)
Definition linear_algebra.hpp:120
T value_type
Definition linear_algebra.hpp:27
size_t size() const
Definition linear_algebra.hpp:90
Vector2(const Vector2 &)=default
Vector2 & operator=(const Vector2 &)=default
auto invalid_value() -> T
Return an invalid/sentinel value for type T.
Definition cutting_plane.hpp:27
Vector2< T > operator+(Vector2< T > lhs, const Vector2< T > &rhs)
Definition linear_algebra.hpp:163
Vector2< T > operator-(Vector2< T > lhs, const Vector2< T > &rhs)
Definition linear_algebra.hpp:175
Vector2< T > operator*(Vector2< T > v, T scalar)
Definition linear_algebra.hpp:187