Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Программа численного решения дифференциального уравнения первого порядка на Python методом Пикара
Рассмотрим уравнения, общий вид которого представлен на рисунке 1, где f(x,y) произвольная функция. Конечно, некоторые уравнения такого типа можно решить аналитически и получить формулу зависимости y от x. Но чаще всего это не удаётся и приходится решать численно.
Метод Пикара, который мы сегодня будем рассматривать, основывается на простом преобразовании уравнения из рисунка 1 в формулу из рисунка 2, ну или интегральное уравнение.
Предварительно отметим, что уравнение будем решать с некоторыми начальными значениями x0 и y0. Рассмотрим следующий подход к решению задачи, называемый методом Пикара.
Положим значение y под знаком интеграла (см. рисунок 1) равным y0. Вычислим интеграл для конкретного значения x и получим некоторое значение y1. Назовём его значением y в точке x в первом приближении. Повторим вычисление, заменим значение y под знаком интеграла на y1. Получим значение y2 для данного x во втором приближении. Процесс можно повторить несколько раз уточняя значение. Это общая канва метода Пикара. Перейдём теперь к тому, как это можно осуществить программно.
- Вспомним наши статьи о численном интегрировании. Возьмём, например, алгоритм вычисления определенного интеграла методом трапеций (см. эту статью).
- Разобьем отрезок, на котором будет решаться уравнение, на несколько не больших отрезков, получив множество значений x, вы которых будем вычислять значения y.
- Будем вычислять значения определённого интеграла на каждом отрезке, делая при этом несколько итераций (получая y1, y2...yn) для улучшения точности.
Я не строго, простыми словами, описал метод Пикара для написания программного решения. Чтобы быть нагляднее, будем использовать уже знакомую нам библиотеку matplotlib, для построения графика полученной функции. Программа представлена ниже (см. Рисунок 3 )
Пояснения к программе
- Результат работы программы представлен на рисунке 4. Мы взяли функцию sin(x*x+y*y). Для функции -3*x*x + 20*x + 5 результат на рисунке 5.
- Мы задаём начальные значения x0 и y0. Фактически мы просто задаём сдвиг графика так, чтобы он проходил через заданную точку.
- Мы задаём множество значений x и помещаем их в список X.
- Далее в цикле for мы проходим по всем значениям x, вычисляя для них значения y и помещая эти значения в список Y.
- Внутренний цикл представляет собой итерации вычисления значений y. k - количество итераций. Я задаю k=3. Можно взять и больше, конечно.
Ну, пока всё! Вычислительная математика в современном мире это наше всё.
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.