Фрактал Ньютона — это граничное множество в комплексной плоскости , которое характеризуется методом Ньютона, примененным к фиксированному полиному p ( z ) ∈ [ z ] или трансцендентной функции . Это множество Жюлиа мероморфной функции z ↦ z − п ( з )/р′ ( z ) который дается методом Ньютона. Когда нет притягивающих циклов (порядка больше 1), он делит комплексную плоскость на области G k , каждая из которых связана с корнем ζ k многочлена, k = 1, …, deg( p ) . Таким образом, фрактал Ньютона похож на множество Мандельброта , и, как и другие фракталы, он демонстрирует сложный вид, возникающий из простого описания. Он имеет отношение к численному анализу , поскольку показывает, что (вне области квадратичной сходимости ) метод Ньютона может быть очень чувствителен к выбору начальной точки.
Почти все точки комплексной плоскости связаны с одним из корней deg( p ) заданного полинома следующим образом: точка используется как начальное значение z 0 для итерации Ньютона z n + 1 := z n − п ( з н )/п' ( з н ) , что дает последовательность точек z 1 , z 2 , …, Если последовательность сходится к корню ζ k , то z 0 был элементом области G k . Однако для каждого многочлена степени не ниже 2 существуют точки, для которых итерация Ньютона не сходится ни к какому корню: примерами являются границы бассейнов притяжения различных корней. Существуют даже многочлены, для которых открытые множества начальных точек не сходятся ни к какому корню: простой пример — z 3 − 2 z + 2 , где некоторые точки притягиваются циклом 0, 1, 0, 1… , а не корнем.
Открытое множество, для которого итерации сходятся к заданному корню или циклу (который не является неподвижной точкой), является множеством Фату для итерации. Дополнительным множеством к объединению всех этих множеств является множество Жюлиа. Множества Фату имеют общую границу, а именно множество Жюлиа. Поэтому каждая точка множества Жюлиа является точкой накопления для каждого из множеств Фату. Именно это свойство обуславливает фрактальную структуру множества Жюлиа (когда степень многочлена больше 2).
Чтобы построить изображения фрактала, можно сначала выбрать заданное число d комплексных точек ( ζ 1 , …, ζ d ) и вычислить коэффициенты ( p 1 , …, p d ) полинома
Тогда для прямоугольной решетки
точек в , находят индекс k ( m , n ) соответствующего корня ζ k ( m , n ) и используют его для заполнения растровой сетки M × N , назначая каждой точке ( m , n ) цвет f k ( m , n ) . Дополнительно или альтернативно цвета могут зависеть от расстояния D ( m , n ) , которое определяется как первое значение D такое, что | z D − ζ k ( m , n ) | < ε для некоторого заранее фиксированного малого ε > 0 .
Обобщением итерации Ньютона является
где a — любое комплексное число . [1] Специальный выбор a = 1 соответствует фракталу Ньютона. Неподвижные точки этого отображения устойчивы, когда a лежит внутри круга радиуса 1 с центром в точке 1. Когда a находится вне этого круга, неподвижные точки локально неустойчивы, однако отображение по-прежнему демонстрирует фрактальную структуру в смысле множества Жюлиа . Если p — многочлен степени d , то последовательность z n ограничена при условии, что a находится внутри круга радиуса d с центром в точке d .
В более общем смысле фрактал Ньютона является частным случаем множества Жюлиа .
Серия: p ( z ) = zn - 1
Другие фракталы, в которых потенциальные и тригонометрические функции перемножаются. p ( z ) = z n *Sin(z) - 1
Фрактал Нова, изобретенный в середине 1990-х годов Полом Дербиширом, [2] [3] является обобщением фрактала Ньютона с добавлением значения c на каждом шаге: [4]
Вариант фрактала Nova "Julia" сохраняет c постоянным по всему изображению и инициализирует z 0 в пиксельных координатах. Вариант фрактала Nova "Mandelbrot" инициализирует c в пиксельных координатах и устанавливает z 0 в критическую точку, где [5]
Обычно используемые полиномы, такие как p ( z ) = z 3 − 1 или p ( z ) = ( z − 1) 3, приводят к критической точке при z = 1 .
Для реализации фрактала Ньютона необходимо иметь начальную функцию, а также ее производную функцию:
Три корня функции:
Определенные выше функции можно перевести в псевдокод следующим образом:
//z^3-1 float2 Function ( float2 z ) { return cpow ( z , 3 ) - float2 ( 1 , 0 ); //cpow - экспоненциальная функция для комплексных чисел } //3*z^2 float2 Derivative ( float2 z ) { return 3 * cmul ( z , z ); // cmul — это функция, которая обрабатывает умножение комплексных чисел }
Теперь дело за малым — реализовать метод Ньютона с использованием заданных функций.
float2 roots [ 3 ] = //Корни (решения) многочлена { float2 ( 1 , 0 ), float2 ( -.5 , sqrt ( 3 ) / 2 ), float2 ( -.5 , - sqrt ( 3 ) / 2 ) }; color colors [ 3 ] = //Назначаем цвет для каждого корня { red , green , blue } Для каждого пикселя ( x , y ) на цели выполните : { zx = масштабированная x - координата пикселя ( масштабированная так , чтобы соответствовать шкале Мандельброта X ( -2,5 , 1 ) ) zy = масштабированная y - координата пикселя ( масштабированная так , чтобы соответствовать шкале Мандельброта Y ( -2 , 1 ) ) float2 z = float2 ( zx , zy ); //z изначально установлено в пиксельных координатах for ( int iteration = 0 ; iteration < maxIteration ; iteration ++ ;) { z -= cdiv ( Function ( z ), Derivative ( z )); //cdiv — функция для деления комплексных чисел float допуск = 0.000001 ; for ( int i = 0 ; i < roots . Length ; i ++ ) { float2 разница = z - корни [ i ]; // Если текущая итерация достаточно близка к корню, раскрашиваем пиксель. if ( abs ( разница . x ) < допуск && abs ( разница . y ) < допуск ) { return colors [ i ]; // Возвращаем цвет, соответствующий корню } } } return black ; // Если решение не найдено }