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

Условие:

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

Условие: Составить программу на языке 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


Программа на 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 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;
}

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

  1. Функции dUc_dt и diL_dt реализуют правые части системы уравнений.
  2. Метод Рунге-Кутты 4-го порядка используется для численного решения системы. На каждом шаге вычисляются промежуточные значения (коэффициенты k1, k2, k3, k4), которые используются для обновления значений U_C и i_L.
  3. Шаг интегрирования рассчитывается как h = \frac{t_{\text{end}} - t_0}{N}.
  4. Результаты сохраняются в файл results.csv в виде таблицы с колонками t, Uc, iL.

Вывод:

Программа решает задачу Коши методом Рунге-Кутты 4-го порядка, сохраняя результаты численного решения в файл. Для анализа можно построить графики зависимостей U_C(t) и i_L(t) с помощью любого инструмента визуализации данных (например, Python или Excel).

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

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

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