-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMatrixObjModules.cpp
More file actions
122 lines (113 loc) · 4.03 KB
/
MatrixObjModules.cpp
File metadata and controls
122 lines (113 loc) · 4.03 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
#include "MatrixObj.h"
/*Реализация всех вспомогательных функций - сеттеров, геттеров, умножений и вычисления погрешности*/
void MatrixObj::setTestMatrix(){
initialMatrix[0] = 3; initialMatrix[1] = 6; initialMatrix[2] = 8; initialMatrix[3] = 9; initialMatrix[4] = 12;
initialMatrix[5] = 5; initialMatrix[6] = 11; initialMatrix[7] = 10; initialMatrix[8]= 4; initialMatrix[9] = 8;
initialMatrix[10] = 7; initialMatrix[11] = 5; initialMatrix[12] = 2; initialMatrix[13] = 1; initialMatrix[14] = 1;
initialMatrix[15] = 3; initialMatrix[16] = 8; initialMatrix[17] = 0; initialMatrix[18] = -2; A[19] = 4;
initialMatrix[20] = -5; initialMatrix[21] = 0; initialMatrix[22] = 2; initialMatrix[23] = -1; initialMatrix[24] = 5;
};
void MatrixObj::setAllMatrices(){
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j){
std::random_device rd;
std::mt19937 mersenne(rd());
std::uniform_real_distribution<> urd(0, 1);
A[i*n + j] = urd(mersenne);;
initialMatrix[i*n + j] = A[i*n + j];
U[i*n + j] = 0.0;
L[i*n + j] = 0.0;
resMatrix[i*n + j] = 0.0;
}
};
void MatrixObj::getMatrix(double *Matrix) const{
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << Matrix[i*n + j] << " ";
}
std::cout<<std::endl;
}
std::cout<<std::endl;
};
void MatrixObj::getAllMatrices() const{
std::cout<<"A Matrix:"<<std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << A[i*n + j] << " ";
}
std::cout<<std::endl;
}
std::cout<<std::endl;
std::cout<<"U Matrix:"<<std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << U[i*n + j] << " ";
}
std::cout<<std::endl;
}
std::cout<<std::endl;
std::cout<<"L Matrix:"<<std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << L[i*n + j] << " ";
}
std::cout<<std::endl;
}
std::cout<<std::endl;
std::cout<<"Res Matrix:"<<std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << resMatrix[i*n + j] << " ";
}
std::cout<<std::endl;
}
std::cout<<std::endl;
};
void MatrixObj::matrixMultiplication(){
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for (int k = 0; k < n; ++k) {
resMatrix[i*n+j] += L[i*n+k]*U[k*n+j];
}
};
void MatrixObj::matrixMultiplication_AllInA() {
for (int i = 0; i < n; i++){
for (int j = 0; j <= i - 1; j++){
for (int k = 0; k <=j; k++){
resMatrix[i * n + j] += A[i * n + k] * A[k * n + j];
}
}
for (int j = i; j < n; j++){
for (int k = 0; k < i; k++){
resMatrix[i * n + j] += A[i * n + k] * A[k * n + j];
}
resMatrix[i * n + j] += A[i * n + j];
}
}
};
void MatrixObj::countError() const{
double temp = 0.0;
for (int i = 0; i < n*n; ++i) {
temp += abs(initialMatrix[i]) - abs(resMatrix[i]);
}
std::cout << "Ошибка вычислений равна " << temp << std::endl;
};
void MatrixObj::setAMatrixFromFile(std::string fileName){
auto fileNamee = "/Users/kola/Desktop/LAB/inputFile.txt";
std::ifstream inputFile(fileName,std::ios_base::in);
for(std::size_t i = 0; i < N; i++)
{
inputFile >> A[i];
initialMatrix[i] = A[i];
}
inputFile.close();
}
void MatrixObj::splitAMatrixIntoLU(){
for(std::size_t i = 0; i<n; i++)
for (std::size_t j = 0; j < n; ++j) {
if(i>j){L[i*n+j] = A[i*n+j]; U[i*n+j] = 0.0;}
else if(i==j){L[i*n+j] = 1.0;
U[i*n+j] = A[i*n+j];}
else {U[i*n+j] = A[i*n+j];}
}
}