diff --git a/MemMAPR-MKE.vcxproj b/MemMAPR-MKE.vcxproj
index 51fce13..ea86f90 100644
--- a/MemMAPR-MKE.vcxproj
+++ b/MemMAPR-MKE.vcxproj
@@ -142,6 +142,7 @@
true
Default
Default
+ include/
Console
@@ -156,6 +157,7 @@
true
Default
Default
+ include/
Console
@@ -172,6 +174,7 @@
true
Default
Default
+ include/
Console
@@ -179,15 +182,15 @@
-
-
+
+
-
-
+
+
diff --git a/MemMAPR-MKE.vcxproj.filters b/MemMAPR-MKE.vcxproj.filters
index 68b8f0e..6da7bf8 100644
--- a/MemMAPR-MKE.vcxproj.filters
+++ b/MemMAPR-MKE.vcxproj.filters
@@ -18,22 +18,22 @@
-
- Исходные файлы
-
-
+
Solver
+
+ Исходные файлы
+
-
- Исходные файлы
-
-
+
Solver
+
+ Исходные файлы
+
\ No newline at end of file
diff --git a/graphics.ipynb b/graphics.ipynb
index 15bedf1..1872fe4 100644
--- a/graphics.ipynb
+++ b/graphics.ipynb
@@ -102,7 +102,7 @@
" y = np.fromstring(data_str, sep=' ')\n",
" y_real = u(x)\n",
"\n",
- " plt.plot(x, y, label=\"Linear element solution\", color='red')\n",
+ " plt.plot(x, y, label=\"Linear element solution\", color='blue')\n",
" plt.plot(x, y_real, label=\"Numeral solution\", color='black')\n",
" plt.title(f\"Linear element, elements = {elements}\")\n",
" plt.grid(True)\n",
diff --git a/Header.h b/include/Header.h
similarity index 100%
rename from Header.h
rename to include/Header.h
diff --git a/Solver.h b/include/Solver.h
similarity index 61%
rename from Solver.h
rename to include/Solver.h
index 9ea0440..5c33167 100644
--- a/Solver.h
+++ b/include/Solver.h
@@ -1,4 +1,10 @@
+// Особенности MSVC
+#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
+
#pragma once
+#include
+using namespace std;
+using namespace std::experimental::filesystem;
class Solver {
private:
@@ -14,4 +20,12 @@ public:
Solver(double _A, double _B, double _C, double _D, int _N, int _l, int _u);
void Execute_Linear(double value_1, double value_2);
void Execute_Cubic(double value_1, double value_2);
+
+ bool check_path(string path) {
+ return exists(path);
+ }
+
+ void make_path(string path) {
+ create_directory(path);
+ }
};
\ No newline at end of file
diff --git a/MemMAPR-MKE.cpp b/src/MemMAPR-MKE.cpp
similarity index 90%
rename from MemMAPR-MKE.cpp
rename to src/MemMAPR-MKE.cpp
index 0b8bee9..1fe9c78 100644
--- a/MemMAPR-MKE.cpp
+++ b/src/MemMAPR-MKE.cpp
@@ -1,5 +1,5 @@
-#include "Header.h"
-#include "Solver.h"
+#include "Solver.h"
+#include "Header.h"
#include
#define A 5.
#define B 4.
diff --git a/Solver.cpp b/src/Solver.cpp
similarity index 91%
rename from Solver.cpp
rename to src/Solver.cpp
index a17b817..c84c387 100644
--- a/Solver.cpp
+++ b/src/Solver.cpp
@@ -3,6 +3,9 @@
using namespace Eigen;
Solver::Solver(double _A, double _B, double _C, double _D, int _N, int _l, int _u) {
+ if (_N < 1)
+ throw std::runtime_error("N CAN BE OVER THAN 1!");
+
A = _A, B = _B, C = _C, D = _D, N = _N;
upper = _u, lower = _l;
L = (double)(upper - lower) / N;
@@ -50,16 +53,22 @@ void Solver::Execute_Linear(double val1, double val2) {
std::cout << "Ansamb load vector:\n" << global_load << std::endl;
#endif
- // Граничные условия
+ // Boundary conditions
double u_right = val2;
+ // 3rd type of boundary condition
ansamb.row(0).setZero();
ansamb(0, 0) = 1;
ansamb(0, 1) = -1;
global_load(0) = 0;
ansamb(1, 1) -= A;
+ // 1st type of boundary condition
+ for (int i = 0; i < global_load.size(); ++i) {
+ global_load(i) = global_load(i) - u_right * ansamb(i, N + 1);
+ }
ansamb.row(N + 1).setZero();
+ ansamb.col(N + 1).setZero();
ansamb(N + 1, N + 1) = 1;
global_load(N + 1) = u_right;
@@ -142,13 +151,19 @@ void Solver::Execute_Cubic(double val1, double val2) {
// Граничные условия
double u_right = val2;
+ // 3rd type of boundary condition
ansamb.row(0).setZero();
ansamb(0, 0) = 1;
ansamb(0, 1) = -1;
global_load(0) = 0;
ansamb(1, 1) -= A;
+ // 1st type of boundary condition
+ for (int i = 0; i < global_load.size(); ++i) {
+ global_load(i) = global_load(i) - u_right * ansamb(i, mat_dim - 1);
+ }
ansamb.row(mat_dim - 1).setZero();
+ ansamb.col(mat_dim - 1).setZero();
ansamb(mat_dim - 1, mat_dim - 1) = 1;
global_load(mat_dim - 1) = u_right;