1K подписчиков

Программирование на языке python. Решение нелинейного уравнения f(x)=0 методом Ньютона

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Решение нелинейных уравнений методом Ньютона на Python

Сегодня о методе Ньютона по вычислению корней уравнений типа f(x)=0. В прошлой статье по этой тематике уже познакомились с методом перебора и методом деления отрезка пополам. Мы будем использовать метод Ньютона в купе с методом перебора. С помощью последнего метода мы найдём отрезки с предполагаемыми корнями, а методом Ньютона получим значения корней высокой точности.

Метод Ньютона основывается на очень простой рекуррентной формуле, представленной на рисунке 1.

Рисунок 1. Рекуррентная формула вычисления корня уравнения f(x)=0
Рисунок 1. Рекуррентная формула вычисления корня уравнения f(x)=0

Последовательно подставляя значения, начиная с некоторой исходной точки x мы приближаемся к точке, в которой f(x)=0.

Ниже в программе мы опять решаем уравнение sin(x)=0 (как в предыдущей статье). В начале с помощью последовательного поиска мы находим отрезки, где находятся корни (get_ends(), см. предыдущую статью), а потом, используя метод Ньютона ищем уже корни с большой точностью. В качестве отправной точки нами берутся правые концы найденных отрезков.

Рисунок 2. Вычисление корней по методу Ньютона. Текст программы смотри по ссылке ниже
Рисунок 2. Вычисление корней по методу Ньютона. Текст программы смотри по ссылке ниже

Результат выполнения программы

-1.2547917381284872e-26
3.141592653589793
6.283185307179586
9.42477796076938

Сравните со значениями math.pi, math.pi*2, math.pi*3.

Обратим внимание на функцию der(), она взята из статьи, где мы говорили о вычислении производных.

Ну, пока всё!

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

Ваша любовь к яблокам ни о чём не говорит
Ваша любовь к яблокам ни о чём не говорит