forked from brstu/TMAU-2024
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Ilya Kukharchuk <[email protected]> Co-authored-by: Yana Sitkovets <[email protected]>
- Loading branch information
1 parent
6c3402d
commit d975141
Showing
6 changed files
with
156 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,6 +34,7 @@ | |
# Directories to ignore | ||
.vs/ | ||
out/ | ||
build/ | ||
|
||
### macOS ### | ||
# General | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# Laboratory work ¹.1 | ||
<p align="center">MINISTRY OF EDUCATION OF THE REPUBLIC OF BELARUS</p> | ||
<p align="center">EDUCATIONAL INSTITUTION</p> | ||
<p align="center">«BREST STATE TECHNICAL UNIVERSITY»</p> | ||
<p align="center">Department of IIT</p> | ||
<br><br><br><br> | ||
<p align="center">Laboratory work ¹.1</p> | ||
<br><br><br> | ||
<p align="right">Completed by the 3rd year student of</p> | ||
<p align="right">the Faculty of Electronic Information Systems</p> | ||
<p align="right">the group AC-63 Kukharchuk I.N.</p> | ||
<p align="right">Checked by Ivanuk D.S.</p> | ||
<br><br><br> | ||
<p align="center">Brest 2024</p> | ||
|
||
--- | ||
|
||
## Task 1. Modeling controlled object : | ||
|
||
Write program (C++), which simulate object temperature. | ||
|
||
### Realization | ||
There are two classes in the program: | ||
|
||
1. LinearModel represents linear model. | ||
2. NonlinearModel represents nonlinear model. | ||
|
||
<p align="center" style="font-size:25px;font-weight: bold"> | ||
RESULTS</p> | ||
|
||
<p align="center"><img style='border:4px solid #000000'src="result.png"/></p> | ||
|
||
### How to build the project? | ||
|
||
1. The first you need to clone this repository to your computer. | ||
|
||
2. Go to the folder "trunk\as0006314\task_01\src". | ||
|
||
3. Run the command line and type 6 commands : | ||
|
||
```console | ||
mkdir build | ||
cd build | ||
cmake .. | ||
cmake --build . | ||
cd trunk\as0006314\task_01\src\Debug\ | ||
.\MainFile.exe | ||
``` | ||
|
||
|
||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
cmake_minimum_required (VERSION 3.0.0) | ||
project (ModelingTemperature) | ||
|
||
add_executable(MainFile main.cpp) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
#include <iostream> | ||
#include <cmath> | ||
|
||
// Interface for different models | ||
class TemperatureModel { | ||
public: | ||
virtual ~TemperatureModel() = default; | ||
virtual double calculate(double currentTemp, double heatInput) = 0; | ||
}; | ||
|
||
// Linear temperature control model | ||
class SimpleLinearModel : public TemperatureModel { | ||
private: | ||
double coeff1; | ||
double coeff2; | ||
public: | ||
SimpleLinearModel(double coeff1, double coeff2) : coeff1(coeff1), coeff2(coeff2) {} | ||
|
||
~SimpleLinearModel() override = default; | ||
|
||
// Calculate temperature based on a linear equation | ||
double calculate(double currentTemp, double heatInput) override { | ||
return coeff1 * currentTemp + coeff2 * heatInput; | ||
} | ||
}; | ||
|
||
// Nonlinear temperature control model | ||
class ComplexNonlinearModel : public TemperatureModel { | ||
private: | ||
double coeff1; | ||
double coeff2; | ||
double coeff3; | ||
double coeff4; | ||
double previousTemp = 0; | ||
double previousHeat = 0; | ||
public: | ||
ComplexNonlinearModel(double coeff1, double coeff2, double coeff3, double coeff4) | ||
: coeff1(coeff1), coeff2(coeff2), coeff3(coeff3), coeff4(coeff4) {} | ||
|
||
~ComplexNonlinearModel() override = default; | ||
|
||
// Calculate temperature based on a nonlinear equation | ||
double calculate(double currentTemp, double heatInput) override { | ||
double result = coeff1 * currentTemp - coeff2 * pow(previousTemp, 2) + coeff3 * heatInput + coeff4 * sin(previousHeat); | ||
previousTemp = currentTemp; | ||
previousHeat = heatInput; | ||
return result; | ||
} | ||
}; | ||
|
||
// Function to simulate the temperature modeling process | ||
void runSimulation(TemperatureModel& model, double initialTemp, int steps) { | ||
double heatInput; | ||
for (int step = 1; step <= steps; ++step) { | ||
std::cout << "Enter heat flow value (Uw): "; std::cin >> heatInput; | ||
initialTemp = model.calculate(initialTemp, heatInput); | ||
std::cout << "\tStep " << step << "\tTemperature: " << initialTemp << std::endl; | ||
} | ||
} | ||
|
||
int main() { | ||
double initialTemp; | ||
double coeff1, coeff2, coeff3, coeff4; | ||
int numSteps; | ||
|
||
// Input parameters for the linear model | ||
std::cout << "Enter parameters for the linear model" << std::endl; | ||
std::cout << "Parameter a: "; std::cin >> coeff1; | ||
std::cout << "Parameter b: "; std::cin >> coeff2; | ||
|
||
SimpleLinearModel linearModel(coeff1, coeff2); | ||
|
||
// Input parameters for the nonlinear model | ||
std::cout << "Enter parameters for the nonlinear model" << std::endl; | ||
std::cout << "Parameter a: "; std::cin >> coeff1; | ||
std::cout << "Parameter b: "; std::cin >> coeff2; | ||
std::cout << "Parameter c: "; std::cin >> coeff3; | ||
std::cout << "Parameter d: "; std::cin >> coeff4; | ||
|
||
ComplexNonlinearModel nonlinearModel(coeff1, coeff2, coeff3, coeff4); | ||
|
||
std::cout << "Enter initial temperature: "; std::cin >> initialTemp; | ||
|
||
// Simulation for the linear model | ||
std::cout << "Enter the number of simulation steps for the linear model: "; | ||
std::cin >> numSteps; | ||
std::cout << "\n--- Simulation for the linear model ---" << std::endl; | ||
runSimulation(linearModel, initialTemp, numSteps); | ||
|
||
std::cout << std::endl; | ||
|
||
// Simulation for the nonlinear model | ||
std::cout << "Enter the number of simulation steps for the nonlinear model: "; | ||
std::cin >> numSteps; | ||
std::cout << "\n--- Simulation for the nonlinear model ---" << std::endl; | ||
runSimulation(nonlinearModel, initialTemp, numSteps); | ||
|
||
return 0; | ||
} |