Skip to content

Commit

Permalink
feat: finished task_01
Browse files Browse the repository at this point in the history
  • Loading branch information
Eugene committed Sep 25, 2024
1 parent 6c3402d commit 55a8f18
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 8 deletions.
11 changes: 3 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
cmake_minimum_required (VERSION 3.0.0)
cmake_minimum_required(VERSION 3.0.0)

project (TMAU)
project(TMAU)

# Search for directories simular to "trunk/as000xxyy/task_0x/src/"
file(GLOB V_GLOB RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "trunk/*/*/src/")
foreach(item ${V_GLOB})
message( "Find \"${item}\"" )
add_subdirectory(${item})
endforeach()
add_executable(TMAU src/main.cpp)
Binary file added trunk/as0006316/task_01/doc/Task.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added trunk/as0006316/task_01/doc/linear&nonlinear.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
69 changes: 69 additions & 0 deletions trunk/as0006316/task_01/doc/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<p align="center">Министерство образования Республики Беларусь</p>
<p align="center">Учреждение образования</p>
<p align="center">«Брестский Государственный технический университет»</p>
<p align="center">Кафедра ИИТ</p>
<br><br><br><br>
<p align="center">Лабораторная работа №1</p>
<p align="center">Тема: моделирование управляемого объекта</p>
<br><br><br>
<p align="right">Выполнил:</p>
<p align="right">Студент 3-го курса</p>
<p align="right">Группы АС-63</p>
<p align="right">Мороз Е. В.</p>
<p align="right">Проверила:</p>
<p align="right">Ситковец Я. С.</p>
<br><br><br>
<p align="center">Брест 2024</p>

---


**Цель:** моделирование температуры управляемого объекта с использованием C++. Температура объекта описывается дифференциальным уравнением, и мы реализуем как линейную, так и нелинейную дискретные модели, полученные из этого уравнения.

Исходная функция:
![alt text](Task.png)


Программа выводит смоделированную температуру на каждом временном шаге для обеих моделей - линейной(1) и нелинейной(2).

![alt text](linear&nonlinear.png)

Код программы находится в папке *src* под названием *main.cpp*

Пример вывода (будет варьироваться в зависимости от параметров):
```markdown
Введите коэффициенты модели (a, b, c, d):
1 2 1 2
Введите начальную температуру: 15
Введите тепловой поток: 10
Введите количество шагов: 5
Выберите модель (1 - линейная, 2 - нелинейная): 1

Результаты моделирования:
-------------------------
Шаг 0: Температура = 15.00°C
Шаг 1: Температура = 35.00°C
Шаг 2: Температура = 55.00°C
Шаг 3: Температура = 75.00°C
Шаг 4: Температура = 95.00°C
Шаг 5: Температура = 115.00°C


Введите коэффициенты модели (a, b, c, d):
1 2 1 2
Введите начальную температуру: 10
Введите тепловой поток: 2
Введите количество шагов: 5
Выберите модель (1 - линейная, 2 - нелинейная): 2

Результаты моделирования:
-------------------------
Шаг 0: Температура = 10.00°C
Шаг 1: Температура = -186.18°C
Шаг 2: Температура = -69509.39°C
Шаг 3: Температура = -9663181229.31°C
Шаг 4: Температура = -186754142950827622400.00°C
Шаг 5: Температура = -inf°C
```

**Вывод:** В ходе выполнения лабораторной работы были протестированы две модели: линейная и нелинейная. Линейная модель показала адекватные результаты с возрастающей температурой на каждом шаге. Однако, при использовании нелинейной модели результаты оказались нестабильными, что привело к некорректным значениям температуры, включая отрицательные и бесконечные значения. Это указывает на необходимость корректировки коэффициентов модели или метода решения для получения более устойчивых результатов.
76 changes: 76 additions & 0 deletions trunk/as0006316/task_01/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#include <iostream>
#include <cmath>
#include <vector>
#include <iomanip>

using namespace std;

struct ModelParams {
double a, b, c, d;
};

double calculate_linear_temp(const ModelParams& params, double prev_temp, double heat) {
return params.a * prev_temp + params.b * heat;
}

double calculate_nonlinear_temp(const ModelParams& params, double prev_temp, double heat) {
return params.a * prev_temp - params.b * pow(prev_temp, 2) + params.c * heat + params.d * sin(heat);
}

vector<double> simulate_temperature(const ModelParams& params, double initial_temp, double heat, int steps, bool is_linear) {
vector<double> temps(steps + 1);
temps[0] = initial_temp;

for (int i = 1; i <= steps; ++i) {
if (is_linear) {
temps[i] = calculate_linear_temp(params, temps[i - 1], heat);
}
else {
temps[i] = calculate_nonlinear_temp(params, temps[i - 1], heat);
}
}

return temps;
}

int main() {
setlocale(LC_ALL, "russian");
ModelParams params;
cout << "Введите коэффициенты модели (a, b, c, d): ";
cin >> params.a >> params.b >> params.c >> params.d;

double initial_temp, heat;
int steps;
cout << "Введите начальную температуру: ";
cin >> initial_temp;
cout << "Введите тепловой поток: ";
cin >> heat;
cout << "Введите количество шагов: ";
cin >> steps;

int choice;
cout << "Выберите модель (1 - линейная, 2 - нелинейная): ";
cin >> choice;

vector<double> temps;
if (choice == 1) {
temps = simulate_temperature(params, initial_temp, heat, steps, true);
}
else if (choice == 2) {
temps = simulate_temperature(params, initial_temp, heat, steps, false);
}
else {
cout << "Неверный выбор модели!" << endl;
return 1;
}

cout << "\nРезультаты моделирования:\n";
cout << "-------------------------\n"; // Добавлена линия для разделения
cout << fixed << setprecision(2); // Установка фиксированной точности для вывода

for (int i = 0; i <= steps; ++i) {
cout << "Шаг " << i << ": Температура = " << temps[i] << "°C" << endl; // Добавлено обозначение градусов Цельсия
}

return 0;
}

0 comments on commit 55a8f18

Please sign in to comment.