Эволюционные уравнения в частных производных
Практическое занятие "Дифференциальные уравнения"
Цель занятия
Выяснить как ведут себя численные методы решения обыкновенных дифференциальных уравнений в случаях, когда отсутствует решение задачи.
Практическая задача
В соответствующей лекции мы рассматривали метод Рунге-Кутта для построения приближенных решений задачи Коши для системы обыкновенных дифференциальных уравнений. Сейчас мы рассмотрим некоторые примеры численных опытов.
Мы уже отмечали, что задача Коши
не имеет решения на отрезке , где . Посмотрим как себя поведет численный метод Эйлера при попытке решить эту задачу на отрезке . Выполним следующий код, используя написанный ранее класс .Здесь используется следующий класс .
Сначала мы используем нарочито грубый шаг по времени. Поэтому вот результат:
Мы видим, что наш метод в шагом практически "не чувствует", что решения уже не существует. Теперь уменьшим шаг на порядок - возьмем . В результате получим следующее.
Мы видим, что C#, точнее .NET Framework, довольно корректно использовали значение "бесконечность". В этом случае уже можно говорить, что наш метод "заметил" отсутствие решения.
Теперь мы рассмотрим поведение нашего численного метода в случае, когда имеет место разрыв правой части по фазовым переменным. В этом случае поведение решений может быть по разному. Возможны случаи, когда уравнение имеет разрывные траектории, а возможны и случаи, когда уравнение не имеет решений. В последнем случае используют аппроксимацию дифференциального уравнения дифференциальным включением. Однако мы рассмотрим применение нашего метода Эйлера "в лоб" для задачи Коши
Можно показать, что эта задача не имеет решения. Однако мы можем применить к ней метод Эйлера. Приведем листинг нашего класса, который решает эту задачу.Запустим наш класс с шагом на отрезке . Вот результат.
Мы видим, что здесь имеет место пилообразное поведение траектории. Если мы будем решать эту задачу с меньшим шагом, то это приведет к тому, что амплитуда нашей "пилы" будет уменьшаться.