-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLA_Vector.h
More file actions
138 lines (101 loc) · 3.69 KB
/
LA_Vector.h
File metadata and controls
138 lines (101 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#ifndef LA_VECTOR_H
#define LA_VECTOR_H
#include "Fraction.h"
#include "Matrix.h"
#include <initializer_list>
#include <deque>
#include <ostream>
namespace L_Algebra
{
class Vector
{
std::vector<Fraction> data;
Fraction& at(std::size_t i)
{
return data.at(i);
}
const Fraction& at(std::size_t i) const
{
return data.at(i);
}
void push_back(Fraction n)
{
data.push_back(n);
}
friend std::vector<Vector> null_space(Matrix mx);
friend std::vector<Vector> null_space_(Matrix mx);
public:
Vector() = default;
template<std::input_iterator InputIt>
Vector(InputIt first, InputIt last) : data(first, last) {}
Vector(int d, long long int n = 0) : data(d, n) {}
Vector(std::initializer_list<Fraction> values) : data(values) {}
friend std::ostream& operator<< (std::ostream& os, const Vector& lav);
explicit operator bool() const
{
return dimension() != 0;
}
bool operator==(const Vector& lav) const
{
return data == lav.data;
}
bool operator!=(const Vector& lav) const
{
return data != lav.data;
}
Fraction& operator[](size_t i)
{
return data.at(i);
}
const Fraction& operator[](size_t i) const
{
return data.at(i);
}
Vector operator+(const Vector& lav) const;
Vector operator-(const Vector& lav) const;
Vector operator->*(const Vector& lav) const; // vectorial product
Fraction operator*(const Vector& lav) const; // dot product
Vector& operator+=(const Vector& lav);
Vector& operator-=(const Vector& lav);
friend Vector operator*(const Vector& mx, Fraction n);
friend Vector operator*(Fraction n, const Vector& mx);
std::size_t dimension() const
{
return data.size();
}
Fraction norm_Power2() const;
double norm() const;
};
Vector proj(Vector u, Vector a);
Vector proj_orthogonal(Vector u, Vector a);
bool is_orthogonal(std::initializer_list<Vector> vec_set);
bool is_linearly_dependent(std::initializer_list<Vector> vec_set);
bool is_linearly_dependent(std::initializer_list<Matrix> matrices_set);
bool is_linearly_independent(std::initializer_list<Vector> vec_set);
bool is_linearly_independent(std::initializer_list<Matrix> matrices_set);
bool is_linear_combination(std::initializer_list<Vector> vec_set, Vector vec);
bool is_linear_combination(std::initializer_list<Matrix> matrices_set, Matrix mx);
bool spans_space(std::initializer_list<Vector> vec_set);
bool spans_space(std::initializer_list<Matrix> matrix_set);
bool is_in_span(Vector vec, std::initializer_list<Vector> span);
bool is_basis(std::initializer_list<Vector> vec_set);
bool is_basis(std::initializer_list<Matrix> matrices_set);
Vector change_basis(Vector vec, std::initializer_list<Vector> basis_from, std::initializer_list<Vector> basis_to);
Vector change_basis(Vector vec_in_standard_basis, std::initializer_list<Vector> destination_basis);
std::vector<Vector> row_space_basis(Matrix mx);
std::vector<Vector> column_space_basis(Matrix mx);
std::vector<Vector> null_space(Matrix mx);
std::vector<Vector> null_space_(Matrix mx);
std::size_t row_space_dim(Matrix mx);
std::size_t column_space_dim(Matrix mx);
std::size_t nullity(Matrix mx);
Vector coordinate_vector_relative_to_basis(std::initializer_list<Vector> basis, Vector vec);
Vector vector_with_coordinate_relative_to_basis(std::initializer_list<Vector> basis, Vector coordinate_vec);
Matrix vectorsToMatrix(std::vector<Vector>vec_set);
Matrix turnMatricesIntoLinearCombination(std::vector<Matrix>matrix_set);
/*
Vector rowOfMatrixToVector(Matrix mx, int row);
Vector columnOfMatrixToVector(Matrix mx, int column);
*/
} // L_Algebra namespace
#endif // LA_VECTOR_H