-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Eugene
committed
Sep 25, 2024
1 parent
6c3402d
commit 55a8f18
Showing
5 changed files
with
148 additions
and
8 deletions.
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 |
---|---|---|
@@ -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) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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,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 | ||
``` | ||
|
||
**Вывод:** В ходе выполнения лабораторной работы были протестированы две модели: линейная и нелинейная. Линейная модель показала адекватные результаты с возрастающей температурой на каждом шаге. Однако, при использовании нелинейной модели результаты оказались нестабильными, что привело к некорректным значениям температуры, включая отрицательные и бесконечные значения. Это указывает на необходимость корректировки коэффициентов модели или метода решения для получения более устойчивых результатов. |
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,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; | ||
} |