Работа вам нужна срочно. Не волнуйтесь, уложимся!
Заполните, пожалуйста, данные для автора:
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Составить программу на языке C++,представляющую собой решение численным путем полученной системы двух обыкновенных дифференциальных уравнений методом Рунге – Кутты 4-го порядка. Численное решение находится с количеством точек N = 1000.
Задача состоит в численном решении системы двух обыкновенных дифференциальных уравнений методом Рунге-Кутты 4-го порядка. Программа будет написана на языке C++.
Система дифференциальных уравнений: \begin{cases} \frac{dU_C}{dt} = -400 \cdot U_C + 60000 \cdot i_L + 40000, \ \frac{di_L}{dt} = -60 \cdot U_C - 8500 \cdot i_L + 40 \end{cases}
Начальные условия: U_C(0) = 0, \, i_L(0) = 0
Интервал решения: [0; 5,734 \cdot 10^{-3}]
Количество точек: N = 1000
#include
#include
#include
// Функции для правых частей системы уравнений
double dUc_dt(double Uc, double iL) {
return -400 * Uc + 60000 * iL + 40000;
}
double diL_dt(double Uc, double iL) {
return -60 * Uc - 8500 * iL + 40;
}
int main() {
// Параметры задачи
const double t0 = 0.0; // Начальное время
const double t_end = 5.734e-3; // Конечное время
const int N = 1000; // Количество точек
const double h = (t_end - t0) / N; // Шаг интегрирования
// Начальные условия
double Uc = 0.0;
double iL = 0.0;
// Векторы для хранения результатов
std::vector t_values(N + 1);
std::vector Uc_values(N + 1);
std::vector iL_values(N + 1);
// Заполнение начальных значений
t_values[0] = t0;
Uc_values[0] = Uc;
iL_values[0] = iL;
// Метод Рунге-Кутты 4-го порядка
for (int i = 0; i < N; ++i) {
double t = t_values[i];
// Вычисление коэффициентов для Uc
double k1_Uc = h * dUc_dt(Uc, iL);
double k1_iL = h * diL_dt(Uc, iL);
double k2_Uc = h * dUc_dt(Uc + k1_Uc / 2, iL + k1_iL / 2);
double k2_iL = h * diL_dt(Uc + k1_Uc / 2, iL + k1_iL / 2);
double k3_Uc = h * dUc_dt(Uc + k2_Uc / 2, iL + k2_iL / 2);
double k3_iL = h * diL_dt(Uc + k2_Uc / 2, iL + k2_iL / 2);
double k4_Uc = h * dUc_dt(Uc + k3_Uc, iL + k3_iL);
double k4_iL = h * diL_dt(Uc + k3_Uc, iL + k3_iL);
// Обновление значений Uc и iL
Uc += (k1_Uc + 2 * k2_Uc + 2 * k3_Uc + k4_Uc) / 6;
iL += (k1_iL + 2 * k2_iL + 2 * k3_iL + k4_iL) / 6;
// Сохранение результатов
t_values[i + 1] = t + h;
Uc_values[i + 1] = Uc;
iL_values[i + 1] = iL;
}
// Запись результатов в файл
std::ofstream file("results.csv");
file << "t,Uc,iL\n";
for (int i = 0; i <= N; ++i) {
file << t_values[i] << "," << Uc_values[i] << "," << iL_values[i] << "\n";
}
file.close();
std::cout << "Результаты сохранены в файл results.csv\n";
return 0;
}
dUc_dt
и diL_dt
реализуют правые части системы уравнений.k1
, k2
, k3
, k4
), которые используются для обновления значений U_C и i_L.results.csv
в виде таблицы с колонками t
, Uc
, iL
.Программа решает задачу Коши методом Рунге-Кутты 4-го порядка, сохраняя результаты численного решения в файл. Для анализа можно построить графики зависимостей U_C(t) и i_L(t) с помощью любого инструмента визуализации данных (например, Python или Excel).