Работа вам нужна срочно. Не волнуйтесь, уложимся!
Заполните, пожалуйста, данные для автора:
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Решить численным путем полученной системы двух обыкновенных дифференциальных уравнений методом Рунге – Кутты 4-го порядка. Численное решение находится с количеством точек N = 1000. Реализовать в C++
Мы решаем систему двух обыкновенных дифференциальных уравнений методом Рунге-Кутты 4-го порядка на заданном интервале. Для реализации метода в C++ будем использовать заданное количество точек ( N = 1000 ).
Система уравнений: \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, \quad i_L(0) = 0
Интервал: t \in [0; 5.734 \cdot 10^{-3}]
Число точек: ( N = 1000 )
Шаг интегрирования: h = \frac{t_{\text{end}} - t_{\text{start}}}{N - 1} \
Метод Рунге-Кутты 4-го порядка для системы дифференциальных уравнений: \begin{aligned} k_{1, U_c} &= f_1(t, U_c, i_L), \ k_{1, i_L} &= f_2(t, U_c, i_L), \ k_{2, U_c} &= f_1\left(t + \frac{h}{2}, U_c + \frac{h}{2}k_{1, U_c}, i_L + \frac{h}{2}k_{1, i_L}\right), \ k_{2, i_L} &= f_2\left(t + \frac{h}{2}, U_c + \frac{h}{2}k_{1, U_c}, i_L + \frac{h}{2}k_{1, i_L}\right), \ k_{3, U_c} &= f_1\left(t + \frac{h}{2}, U_c + \frac{h}{2}k_{2, U_c}, i_L + \frac{h}{2}k_{2, i_L}\right), \ k_{3, i_L} &= f_2\left(t + \frac{h}{2}, U_c + \frac{h}{2}k_{2, U_c}, i_L + \frac{h}{2}k_{2, i_L}\right), \ k_{4, U_c} &= f_1(t + h, U_c + h \cdot k_{3, U_c}, i_L + h \cdot k_{3, i_L}), \ k_{4, i_L} &= f_2(t + h, U_c + h \cdot k_{3, U_c}, i_L + h \cdot k_{3, i_L}). \end{aligned}
Обновление значений: \begin{aligned} U_c^{n+1} &= U_c^n + \frac{h}{6}(k_{1, U_c} + 2k_{2, U_c} + 2k_{3, U_c} + k_{4, U_c}), \ i_L^{n+1} &= i_L^n + \frac{h}{6}(k_{1, i_L} + 2k_{2, i_L} + 2k_{3, i_L} + k_{4, i_L}). \end{aligned}
#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 t_start = 0.0;
const double t_end = 5.734e-3;
const int N = 1000;
const double h = (t_end - t_start) / (N - 1);
// Начальные условия
double Uc = 0.0, iL = 0.0;
// Векторы для хранения решений
std::vector t(N), Uc_vals(N), iL_vals(N);
// Инициализация начальных условий
t[0] = t_start;
Uc_vals[0] = Uc;
iL_vals[0] = iL;
// Метод Рунге-Кутты 4-го порядка
for (int n = 0; n < N - 1; ++n) {
t[n + 1] = t[n] + h;
// Вычисление коэффициентов k1, k2, k3, k4
double k1_Uc = dUc_dt(Uc, iL);
double k1_iL = diL_dt(Uc, iL);
double k2_Uc = dUc_dt(Uc + h * k1_Uc / 2, iL + h * k1_iL / 2);
double k2_iL = diL_dt(Uc + h * k1_Uc / 2, iL + h * k1_iL / 2);
double k3_Uc = dUc_dt(Uc + h * k2_Uc / 2, iL + h * k2_iL / 2);
double k3_iL = diL_dt(Uc + h * k2_Uc / 2, iL + h * k2_iL / 2);
double k4_Uc = dUc_dt(Uc + h * k3_Uc, iL + h * k3_iL);
double k4_iL = diL_dt(Uc + h * k3_Uc, iL + h * k3_iL);
// Обновление значений Uc и iL
Uc += h / 6 * (k1_Uc + 2 * k2_Uc + 2 * k3_Uc + k4_Uc);
iL += h / 6 * (k1_iL + 2 * k2_iL + 2 * k3_iL + k4_iL);
// Сохранение решений
Uc_vals[n + 1] = Uc;
iL_vals[n + 1] = iL;
}
// Вывод результатов
for (int n = 0; n < N; ++n) {
std::cout << "t = " << t[n] << ", Uc = " << Uc_vals[n] << ", iL = " << iL_vals[n] << std::endl;
}
return 0;
}
Программа вычислит значения ( U_c(t) ) и ( i_L(t) ) на заданном интервале с шагом ( h ).