Compare commits

...

2 Commits

Author SHA1 Message Date
5b2331445c Modify code and notebook 2025-10-08 21:36:44 +03:00
e3c7b88dfb New structure 2025-10-08 21:14:13 +03:00
7 changed files with 48 additions and 16 deletions

View File

@@ -142,6 +142,7 @@
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>Default</LanguageStandard> <LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C> <LanguageStandard_C>Default</LanguageStandard_C>
<AdditionalIncludeDirectories>include/</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
@@ -156,6 +157,7 @@
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>Default</LanguageStandard> <LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C> <LanguageStandard_C>Default</LanguageStandard_C>
<AdditionalIncludeDirectories>include/</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
@@ -172,6 +174,7 @@
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<LanguageStandard>Default</LanguageStandard> <LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C> <LanguageStandard_C>Default</LanguageStandard_C>
<AdditionalIncludeDirectories>include/</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
@@ -179,15 +182,15 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="MemMAPR-MKE.cpp" /> <ClCompile Include="src\MemMAPR-MKE.cpp" />
<ClCompile Include="Solver.cpp" /> <ClCompile Include="src\Solver.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Header.h" /> <ClInclude Include="include\Header.h" />
<ClInclude Include="Solver.h" /> <ClInclude Include="include\Solver.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@@ -18,22 +18,22 @@
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="MemMAPR-MKE.cpp"> <ClCompile Include="src\Solver.cpp">
<Filter>Исходные файлы</Filter>
</ClCompile>
<ClCompile Include="Solver.cpp">
<Filter>Solver</Filter> <Filter>Solver</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\MemMAPR-MKE.cpp">
<Filter>Исходные файлы</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Header.h"> <ClInclude Include="include\Solver.h">
<Filter>Исходные файлы</Filter>
</ClInclude>
<ClInclude Include="Solver.h">
<Filter>Solver</Filter> <Filter>Solver</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="include\Header.h">
<Filter>Исходные файлы</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -102,7 +102,7 @@
" y = np.fromstring(data_str, sep=' ')\n", " y = np.fromstring(data_str, sep=' ')\n",
" y_real = u(x)\n", " y_real = u(x)\n",
"\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.plot(x, y_real, label=\"Numeral solution\", color='black')\n",
" plt.title(f\"Linear element, elements = {elements}\")\n", " plt.title(f\"Linear element, elements = {elements}\")\n",
" plt.grid(True)\n", " plt.grid(True)\n",

View File

@@ -1,4 +1,10 @@
// Особенности MSVC
#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
#pragma once #pragma once
#include <experimental/filesystem>
using namespace std;
using namespace std::experimental::filesystem;
class Solver { class Solver {
private: private:
@@ -14,4 +20,12 @@ public:
Solver(double _A, double _B, double _C, double _D, int _N, int _l, int _u); 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_Linear(double value_1, double value_2);
void Execute_Cubic(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);
}
}; };

View File

@@ -1,5 +1,5 @@
#include "Header.h" #include "Solver.h"
#include "Solver.h" #include "Header.h"
#include <Eigen/Dense> #include <Eigen/Dense>
#define A 5. #define A 5.
#define B 4. #define B 4.

View File

@@ -3,6 +3,9 @@
using namespace Eigen; using namespace Eigen;
Solver::Solver(double _A, double _B, double _C, double _D, int _N, int _l, int _u) { 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; A = _A, B = _B, C = _C, D = _D, N = _N;
upper = _u, lower = _l; upper = _u, lower = _l;
L = (double)(upper - lower) / N; 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; std::cout << "Ansamb load vector:\n" << global_load << std::endl;
#endif #endif
// Граничные условия // Boundary conditions
double u_right = val2; double u_right = val2;
// 3rd type of boundary condition
ansamb.row(0).setZero(); ansamb.row(0).setZero();
ansamb(0, 0) = 1; ansamb(0, 0) = 1;
ansamb(0, 1) = -1; ansamb(0, 1) = -1;
global_load(0) = 0; global_load(0) = 0;
ansamb(1, 1) -= A; 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.row(N + 1).setZero();
ansamb.col(N + 1).setZero();
ansamb(N + 1, N + 1) = 1; ansamb(N + 1, N + 1) = 1;
global_load(N + 1) = u_right; global_load(N + 1) = u_right;
@@ -142,13 +151,19 @@ void Solver::Execute_Cubic(double val1, double val2) {
// Граничные условия // Граничные условия
double u_right = val2; double u_right = val2;
// 3rd type of boundary condition
ansamb.row(0).setZero(); ansamb.row(0).setZero();
ansamb(0, 0) = 1; ansamb(0, 0) = 1;
ansamb(0, 1) = -1; ansamb(0, 1) = -1;
global_load(0) = 0; global_load(0) = 0;
ansamb(1, 1) -= A; 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.row(mat_dim - 1).setZero();
ansamb.col(mat_dim - 1).setZero();
ansamb(mat_dim - 1, mat_dim - 1) = 1; ansamb(mat_dim - 1, mat_dim - 1) = 1;
global_load(mat_dim - 1) = u_right; global_load(mat_dim - 1) = u_right;