Решить численным путем полученнойсистемы двух обыкновенных дифференциальных уравнений методом Рунге – Кутты 4-го порядка

Условие:

Решить численным путем полученной системы двух обыкновенных дифференциальных уравнений методом Рунге – Кутты 4-го порядка. Численное решение находится с количеством точек N = 1000. Реализовать в C++

Условие: Решить численным путем полученной
системы двух обыкновенных дифференциальных уравнений методом Рунге – Кутты 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-го порядка

Метод Рунге-Кутты 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} 


Реализация в C++

#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;
}

Пояснение программы

  1. Определение функций: Заданы функции правой части системы ( \frac{dU_c}{dt} ) и ( \frac{di_L}{dt} ).
  2. Инициализация: Начальные условия и параметры интервала.
  3. Метод Рунге-Кутты: Реализован алгоритм 4-го порядка для численного решения системы.
  4. Вывод результатов: Решения для ( U_c(t) ) и ( i_L(t) ) выводятся для всех точек сетки.

Результат

Программа вычислит значения ( U_c(t) ) и ( i_L(t) ) на заданном интервале с шагом ( h ).

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн