scifir-units 2.0.0
scifir-units is a library of units of measurement, angles, coordinates, fields, and related data, all lightweight, that help in the development of scientific software and scientific machines
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
scifir::matrix< T, M, N > Class Template Reference

#include <matrix.hpp>

Public Member Functions

 matrix ()
 
 matrix (initializer_list< vector< T > > x)
 
virtual matrix< T, M, N > * clone () const
 
int row_size () const
 
int column_size () const
 
matrix< T, 1, Nrow (int i) const
 
matrix< T, M, 1 > column (int j) const
 
const Toperator() (int i, int j) const
 
Toperator() (int i, int j)
 
matrix< T, M, Noperator+ (const matrix< T, M, N > &x)
 
matrix< T, M, Noperator- (const matrix< T, M, N > &x)
 
template<int N2>
matrix< T, N, N2operator* (const matrix< T, N, N2 > &x)
 
template<typename U , typename = typename enable_if<is_integer_number<T>::value>::type>
matrix< T, M, Noperator^ (U x)
 
void operator+= (const matrix< T, M, N > &x)
 
void operator-= (const matrix< T, M, N > &x)
 
template<typename U , typename = typename enable_if<is_integer_number<T>::value>::type>
void operator^= (U x)
 
matrix< T, N, Mt () const
 
bool is_square () const
 
bool is_diagonal () const
 

Private Member Functions

bool outside_row_limits (int i) const
 
bool outside_column_limits (int i) const
 
bool outside_limits (int i, int j) const
 

Private Attributes

vector< vector< T > > data
 

Detailed Description

template<typename T, int M, int N>
class scifir::matrix< T, M, N >

Definition at line 15 of file matrix.hpp.

Constructor & Destructor Documentation

◆ matrix() [1/2]

template<typename T , int M, int N>
scifir::matrix< T, M, N >::matrix ( )
inline

Definition at line 18 of file matrix.hpp.

18 : data(vector<vector<T>>(M, vector<T>(N)))
19 {}
vector< vector< T > > data
Definition matrix.hpp:227

◆ matrix() [2/2]

template<typename T , int M, int N>
scifir::matrix< T, M, N >::matrix ( initializer_list< vector< T > >  x)
inline

Definition at line 21 of file matrix.hpp.

21 : matrix()
22 {
23 if(x.size() != M)
24 {
25 return;
26 }
27 for(const auto& column : x)
28 {
29 if(column.size() != N)
30 {
31 return;
32 }
33 }
34 int i = 0;
35 for(const auto& column : x)
36 {
37 for(int j = 0; j < N; j++)
38 {
39 data[i][j] = column[j];
40 }
41 i++;
42 }
43 }
matrix< T, M, 1 > column(int j) const
Definition matrix.hpp:74

Member Function Documentation

◆ clone()

template<typename T , int M, int N>
virtual matrix< T, M, N > * scifir::matrix< T, M, N >::clone ( ) const
inlinevirtual

Definition at line 45 of file matrix.hpp.

46 {
47 return new matrix<T, M, N>(static_cast<const matrix<T, M, N>&>(*this));
48 }

◆ column()

template<typename T , int M, int N>
matrix< T, M, 1 > scifir::matrix< T, M, N >::column ( int  j) const
inline

Definition at line 74 of file matrix.hpp.

75 {
77 {
78 return matrix<T,M,1>();
79 }
80 matrix<T,M,1> x = matrix<T,M,1>();
81 for (int i = 0; i < M; i++)
82 {
83 x(i + 1,1) = data[i][j - 1];
84 }
85 return std::move(x);
86 }
bool outside_column_limits(int i) const
Definition matrix.hpp:238

◆ column_size()

template<typename T , int M, int N>
int scifir::matrix< T, M, N >::column_size ( ) const
inline

Definition at line 55 of file matrix.hpp.

56 {
57 return N;
58 }

◆ is_diagonal()

template<typename T , int M, int N>
bool scifir::matrix< T, M, N >::is_diagonal ( ) const
inline

Definition at line 211 of file matrix.hpp.

212 {
213 for(int i = 0; i < M; i++)
214 {
215 for(int j = 0; j < N; j++)
216 {
217 if(i != j and data[i][j] != 0)
218 {
219 return false;
220 }
221 }
222 }
223 return true;
224 }

◆ is_square()

template<typename T , int M, int N>
bool scifir::matrix< T, M, N >::is_square ( ) const
inline

Definition at line 199 of file matrix.hpp.

200 {
201 if(M == N)
202 {
203 return true;
204 }
205 else
206 {
207 return false;
208 }
209 }

◆ operator()() [1/2]

template<typename T , int M, int N>
T & scifir::matrix< T, M, N >::operator() ( int  i,
int  j 
)
inline

Definition at line 97 of file matrix.hpp.

98 {
99 if (outside_limits(i,j))
100 {
101 return T();
102 }
103 return data[i - 1][j - 1];
104 }
bool outside_limits(int i, int j) const
Definition matrix.hpp:247

◆ operator()() [2/2]

template<typename T , int M, int N>
const T & scifir::matrix< T, M, N >::operator() ( int  i,
int  j 
) const
inline

Definition at line 88 of file matrix.hpp.

89 {
90 if (outside_limits(i,j))
91 {
92 return T();
93 }
94 return data[i - 1][j - 1];
95 }

◆ operator*()

template<typename T , int M, int N>
template<int N2>
matrix< T, N, N2 > scifir::matrix< T, M, N >::operator* ( const matrix< T, N, N2 > &  x)
inline

Definition at line 121 of file matrix.hpp.

122 {
123 matrix<T, N, N2> new_matrix = matrix<T, N, N2>();
124 for(int i = 0; i < M; i++)
125 {
126 for(int j = 0; j < N2; j++)
127 {
128 T a = 0;
129 for(int k = 0; k < N; k++)
130 {
131 a += data[i][k] * x(k + 1,j + 1);
132 }
133 new_matrix(i + 1,j + 1) = a;
134 }
135 }
136 return move(new_matrix);
137 }

◆ operator+()

template<typename T , int M, int N>
matrix< T, M, N > scifir::matrix< T, M, N >::operator+ ( const matrix< T, M, N > &  x)
inline

Definition at line 106 of file matrix.hpp.

107 {
108 matrix<T, M, N> y = *clone();
109 y += x;
110 return std::move(y);
111 }
virtual matrix< T, M, N > * clone() const
Definition matrix.hpp:45

◆ operator+=()

template<typename T , int M, int N>
void scifir::matrix< T, M, N >::operator+= ( const matrix< T, M, N > &  x)
inline

Definition at line 147 of file matrix.hpp.

148 {
149 for(int i = 0; i < M; i++)
150 {
151 for(int j = 0; j < N; j++)
152 {
153 data[i][j] += x(i + 1,j + 1);
154 }
155 }
156 }

◆ operator-()

template<typename T , int M, int N>
matrix< T, M, N > scifir::matrix< T, M, N >::operator- ( const matrix< T, M, N > &  x)
inline

Definition at line 113 of file matrix.hpp.

114 {
115 matrix<T, M, N> y = *clone();
116 y -= x;
117 return std::move(y);
118 }

◆ operator-=()

template<typename T , int M, int N>
void scifir::matrix< T, M, N >::operator-= ( const matrix< T, M, N > &  x)
inline

Definition at line 158 of file matrix.hpp.

159 {
160 for(int i = 0; i < M; i++)
161 {
162 for(int j = 0; j < N; j++)
163 {
164 data[i][j] -= x(i + 1,j + 1);
165 }
166 }
167 }

◆ operator^()

template<typename T , int M, int N>
template<typename U , typename = typename enable_if<is_integer_number<T>::value>::type>
matrix< T, M, N > scifir::matrix< T, M, N >::operator^ ( U  x)
inline

Definition at line 140 of file matrix.hpp.

141 {
142 matrix<T, M, N> y = *clone();
143 y ^= x;
144 return move(y);
145 }

◆ operator^=()

template<typename T , int M, int N>
template<typename U , typename = typename enable_if<is_integer_number<T>::value>::type>
void scifir::matrix< T, M, N >::operator^= ( U  x)
inline

Definition at line 170 of file matrix.hpp.

171 {
172 matrix<T,M,N> new_data = *clone();
173 for(int i = 2; i <= x; i++)
174 {
175 new_data = (new_data * (*this));
176 }
177 for (int i = 0; i < M; i++)
178 {
179 for (int j = 0; j < N; j++)
180 {
181 data[i][j] = new_data(i + 1,j + 1);
182 }
183 }
184 }

◆ outside_column_limits()

template<typename T , int M, int N>
bool scifir::matrix< T, M, N >::outside_column_limits ( int  i) const
inlineprivate

Definition at line 238 of file matrix.hpp.

239 {
240 if (i < 1 or i > N)
241 {
242 return true;
243 }
244 return false;
245 }

◆ outside_limits()

template<typename T , int M, int N>
bool scifir::matrix< T, M, N >::outside_limits ( int  i,
int  j 
) const
inlineprivate

Definition at line 247 of file matrix.hpp.

248 {
250 {
251 return true;
252 }
253 return false;
254 }
bool outside_row_limits(int i) const
Definition matrix.hpp:229

◆ outside_row_limits()

template<typename T , int M, int N>
bool scifir::matrix< T, M, N >::outside_row_limits ( int  i) const
inlineprivate

Definition at line 229 of file matrix.hpp.

230 {
231 if (i < 1 or i > M)
232 {
233 return true;
234 }
235 return false;
236 }

◆ row()

template<typename T , int M, int N>
matrix< T, 1, N > scifir::matrix< T, M, N >::row ( int  i) const
inline

Definition at line 60 of file matrix.hpp.

61 {
62 if (outside_row_limits(i))
63 {
64 return matrix<T,1,N>();
65 }
66 matrix<T,1,N> x = matrix<T,1,N>();
67 for (int j = 0; j < N; j++)
68 {
69 x(1,j + 1) = data[i - 1][j];
70 }
71 return std::move(x);
72 }

◆ row_size()

template<typename T , int M, int N>
int scifir::matrix< T, M, N >::row_size ( ) const
inline

Definition at line 50 of file matrix.hpp.

51 {
52 return M;
53 }

◆ t()

template<typename T , int M, int N>
matrix< T, N, M > scifir::matrix< T, M, N >::t ( ) const
inline

Definition at line 186 of file matrix.hpp.

187 {
188 matrix<T, N, M> new_data = matrix<T, N, M>();
189 for(int i = 0; i < M; i++)
190 {
191 for(int j = 0; j < N; j++)
192 {
193 new_data(j + 1,i + 1) = data[i][j];
194 }
195 }
196 return move(new_data);
197 }

Member Data Documentation

◆ data

template<typename T , int M, int N>
vector<vector<T> > scifir::matrix< T, M, N >::data
private

Definition at line 227 of file matrix.hpp.


The documentation for this class was generated from the following file: