Решать задачу Коши. Подробно описать численное решение и реализовать его на C++

Условие:

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

Условие: Решать задачу Коши. Подробно описать численное решение и реализовать его на 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} \end{formula> Начальные условия: U_C(0) = 0, \, i_L(0) = 0.

Интервал: [0; 5.734 \cdot 10^{-3}].

Число точек: N = 1000.


Решение

1. Разбиение интервала

Шаг метода Эйлера:  h = \frac{t_{\text{кон}} - t_{\text{нач}}}{N} = \frac{5.734 \cdot 10^{-3} - 0}{1000}. 

2. Метод Эйлера

Метод Эйлера для численного решения системы дифференциальных уравнений записывается следующим образом:  U_C^{n+1} = U_C^n + h \cdot f_1(U_C^n, i_L^n), \ i_L^{n+1} = i_L^n + h \cdot f_2(U_C^n, i_L^n),  где:  f_1(U_C, i_L) = -400 \cdot U_C + 60000 \cdot i_L + 40000, \ f_2(U_C, i_L) = -60 \cdot U_C - 8500 \cdot i_L + 40. 


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

#include 
#include 
#include 

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;

    // Начальные условия
    double U_C = 0.0;
    double i_L = 0.0;

    // Временной массив
    std::vector t(N + 1);
    std::vector U_C_values(N + 1);
    std::vector i_L_values(N + 1);

    // Установка начальных значений
    t[0] = t_start;
    U_C_values[0] = U_C;
    i_L_values[0] = i_L;

    // Метод Эйлера
    for (int n = 0; n < N; ++n) {
        // Вычисление функций f1 и f2
        double f1 = -400 * U_C + 60000 * i_L + 40000;
        double f2 = -60 * U_C - 8500 * i_L + 40;

        // Обновление значений U_C и i_L
        U_C += h * f1;
        i_L += h * f2;

        // Сохранение значений в массивы
        t[n + 1] = t[n] + h;
        U_C_values[n + 1] = U_C;
        i_L_values[n + 1] = i_L;
    }

    // Запись результатов в файл
    std::ofstream output("results.csv");
    output << "t,U_C,i_L\n";
    for (int n = 0; n <= N; ++n) {
        output << t[n] << "," << U_C_values[n] << "," << i_L_values[n] << "\n";
    }
    output.close();

    std::cout << "Результаты сохранены в файл results.csv" << std::endl;

    return 0;
}

Пояснение кода

  1. Инициализация параметров:

    • Интервал [0; 5.734 \cdot 10^{-3}] разбивается на N = 1000 точек.
    • Начальные условия U_C(0) = 0 и i_L(0) = 0 задаются.
  2. Метод Эйлера:

    • На каждом шаге вычисляются значения функций f_1 и f_2.
    • Значения U_C и i_L обновляются с использованием метода Эйлера.
  3. Сохранение результатов:

    • Результаты записываются в файл results.csv для последующего анализа.

Вывод

Таким образом, с помощью метода Эйлера мы численно решили задачу Коши. Результаты можно визуализировать, построив графики U_C(t) и i_L(t).

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

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

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