Обыкновенные дифференциальные уравнения
Существует довольно много численных методов решения задачи Коши для дифференциальных уравнений. При этом многие методы были созданы еще в "до машинную эпоху". Такие методы часто ориентированы на ручной расчет и включают в себя использование аналитических выкладок, например, расчет производных от правой части. Наиболее часто используемым является метод Рунге-Кутта. Этот метод имеет весьма высокую точность, может иметь переменный шаг и может быть легко запрограммирован. Одним из самых простейших методов решения дифференциального уравнения является метод Эйлера. Мы подробно рассмотрим метод Эйлера и метод Рунге-Кутта -го порядка.
Метод Эйлера применялся еще Л.Эйлером для доказательства существования решения задачи Коши. Он имеет интуитивно понятную форму, легко может быть запрограммирован, но имеет низкую точность. И так, рассмотрим уравнение 16.1. Производную в этом уравнении приближенно представим с помощью конечной разности:
где некоторое число. Используя это представление мы вместо дифференциального уравнения 16.1 получим разностное уравнение От сюда найдем( 16.4) |
Реализуем этот метод на C#. Сначала реализуем абстрактный класс, который будет использован для конструирования различных методов построения численных решений систем обыкновенных дифференциальных уравнений.
На основе этого класса построим класс, реализующий метод Эйлера.
Прежде чем испытать наш метод Эйлера, мы рассмотрим и реализуем метод Рунге-Кутта -го порядка. Метод Рунге-Кутта, также как и метод Эйлера, допускает перемену шага, но имеет значительно большую точность. Пусть и имеют тот же смысл, что и при рассмотрении метода Эйлера.
Правила построения точек следующие
где Как мы видим, для расчета решения на следующем шаге необходимо вычислить правую часть четыре раза, зато точность этого метода имеет четвертый порядок, при условии гладкости правой части.