5.5: Набір Мандельброта
- Page ID
- 62658
По суті, множина Мандельброта генерується ітерацією простої функції на точках комплексної площини. Точки, що виробляють цикл (одне і те ж значення знову і знову), потрапляють у множину, тоді як точки, які розходяться (дають постійно зростаючі значення) лежать поза ним. При нанесенні на екран комп'ютера в багатьох кольорах (різні кольори для різної швидкості розбіжності), точки за межами набору можуть виробляти знімки величезної краси. Межа множини Мандельброта - це фрактальна крива нескінченної складності, будь-яку частину якої можна підірвати, щоб виявити все більш видатні деталі, включаючи мініатюрні репліки всього набору.
Набір Мандельброта, безумовно, найпопулярніший фрактал, і, мабуть, найпопулярніший об'єкт сучасної математики з усіх. Оскільки Benoit B. Mandelbrot (1924-2010) виявив його в 1979-1980 роках\(z \rightarrow z ^2+c\), поки він досліджував відображення, його дублювали десятки тисяч людей по всьому світу (включаючи мене).
Побудова набору Мандельброта
Ось як будується набір Мандельброта. Візьміть відправну точку\(z_0\) в складній площині. Потім використовуємо квадратичне рівняння рекурренції.
\(z_{n+1}=z_{n}^2+z_0\)
отримати послідовність комплексних чисел\(z_n\) с\(n=0, 1, 2, \ldots\). Кажуть,\(z_n\) що точки утворюють орбіту\(z_0\), а набір Мандельброта, позначається\(M\), визначається наступним чином:
- Якщо орбіта\(z_n\) не вдається перейти до нескінченності, ми говоримо, що\(z_0\) міститься в безлічі\(M\). Якщо орбіта\(z_n\) дійсно йде до нескінченності, ми говоримо, що точка\(z_0\) знаходиться зовні\(M\).
Візьмемо, наприклад,\(z_0=1\). Тоді у нас є
\ (\ begin {масив} {rcl}
%\ hline%\ текст {} & z_ {n+1} =z_ {n} ^2+z_0\
%\ hline
z_0 &=& 1\
%\ hline
z_1 &= 1 ^ 2 + 1 = 2\\
%\ hline
z_2 & amp; = & 2 ^ 2 + 1 = 5\\
%\ hline
z_3 &= & 5 ^ 2 + 1 = 26\\
%\ hline
z_4 &=& 26^2 + 1 = 677\\
%\ hline
&\ vdots&
\ end {масив}\)
Як бачите,\(z_n\) просто продовжує ставати все більше і більше. Таким чином\(z_0=1\) немає в наборі Мандельброта. Але якщо ми виберемо різні значення для\(z_0\) цього не завжди буде так. Розглянемо тепер значення\(z_0=i\). В цьому випадку отримуємо:
\ (\ begin {масив} {rcl}
%\ hline%\ текст {} &=& z_ {n+1} =z_ {n} ^2+z_0\
%\ hline
z_0 &=I\\
%\ hline
z_1 &=I ^2 + i = -1 + i\\
%\ hline
z_2 &= & (-1+i) ^2 + i = -2i+i = -i\\
%\ hline
z_3 &=& (-i) ^2 + i = -1+i\\
%\ hline
z_4 &=& (-1+i) ^2 + i = -i\\
%\ hline
&\ vdots&
\ кінець { масив}\)
Зрозуміло, що в цьому випадку подальші ітерації будуть просто повторювати значення\(−1+i\) і\(−i\). Всі ці комплексні числа лежать на відстані 3 від початку. Таким чином, вони залишаються в обмеженій підмножині площини; вони не закінчуються до нескінченності. Отже, число\(z_0=i\) - це\(in\) набір Мандельброта.
Дуже весело розраховувати елементи набору Мандельброта і будувати їх сюжет. Отриманий набір нескінченно складний. І для цього ми можемо використовувати потужність комп'ютера. У аплеті нижче визначена\(z_0\) точка на комплексній площині. Так як комп'ютер не може впоратися з нескінченністю, досить буде обчислити 500 ітерацій і використовувати число\(10^8\) (замість нескінченності) для генерації множини Мандельброта:
- Якщо орбіта\(z_n\) знаходиться за межами диска радіусу\(10^8\), то\(z_0\) немає в наборі Мандельброта і його колір буде БІЛИЙ. Якщо орбіта\(z_n\) знаходиться всередині цього диска, то\(z_0\) знаходиться в наборі Мандельброта і його колір буде ЧОРНИЙ.
Тепер вивчіть ітераційні орбіти в аплеті. Спостерігайте за його поведінкою під час перетягування точки. Активуйте поле «Трасування», щоб намалювати набір Мандельброта, або перетягніть повзунок.
Барвисті Мандельброт Set
У попередньому аплеті множина Мандельброта накидається лише з однією точкою. Однак його можна побудувати з урахуванням певної області пікселів на екрані. Найпростіший алгоритм генерації подання множини Мандельброта відомий як алгоритм часу евакуації. Повторюваний розрахунок виконується для кожної\(y\) точки в області ділянки\(x\), і на основі поведінки цього обчислення вибирається колір для цього пікселя.
У наступному аплеті використовується колірна схема HSV і залежить від відстані від точки\(z_0\) (зовні або всередині) до найближчої точки на межі множини Мандельброта. Іншими словами, за умови, що максимальна кількість ітерацій досить велика, ми можемо отримати картину множини Мандельброта з наступними властивостями:
- Кожен піксель, який містить точку набору Мандельброта, пофарбований у чорний колір.
- Кожен піксель, який не містить точки множини Мандельброта, забарвлюється за допомогою значень відтінку залежно від того, наскільки ця точка близька до множини Мандельброта.
Тепер досліджуйте набір Мандельброта. Збільшення або зменшення масштабу в різних регіонах. Змініть кількість ітерацій і спостерігайте за тим, що відбувається з сюжетом. Також можна побудувати графік орбіти.
+: Збільшити масштаб -: Зменшити R = Скинути вигляд O = Орбіта I = Інформація та кадр
Подальше читання
Хоча набір Мандельброта визначається дуже простим правилом, він володіє цікавими і складними властивостями, які можна побачити графічно, якщо звернути пильну увагу на зображення, створені комп'ютером. Наприклад, геометричне питання, яке ми можемо задати: чи це пов'язано? Тобто, це всього лише одна штука? Це виявляється правдою, і було доведено Адріеном Дуаді і Джоном Хаббардом у 80-х роках.
Набір Мандельброта широко вивчений, і я не маю наміру висвітлювати тут всі його захоплюючі властивості. Однак, якщо ви хочете дізнатися більше деталей, я рекомендую вам проконсультуватися з роботами Б.Б. Мандельброта:
- Фрактальна геометрія природи. Нью-Йорк: У.Х. Фрімен, 1983.
- Фрактали і хаос: Набір Мандельброта і далі. Нью-Йорк: Спрінгер-Верланг, 2004.
Я також рекомендую вам ці відео Numberphilie:
Аплети були зроблені з GeoGebra і p5.js. Вихідний код доступний за наступними посиланнями:
Якщо ви хочете навчитися програмувати його самостійно, рекомендую вам цей підручник
Нарешті, якщо ви вмієте програмувати, то ви можете легко перевести псевдокод нижче на C ++, Python, JavaScript або будь-яку іншу мову. Для кожного пікселя на екрані виконуємо таку операцію:
{
x0 = x co-ordinate of pixel
y0 = y co-ordinate of pixel
x = 0
y = 0
iteration = 0
max_iteration = 1000
while ( x*x + y*y <= (2*2) AND iteration < max_iteration )
{
xtemp = x*x - y*y + x0
y = 2*x*y + y0
x = xtemp
iteration = iteration + 1
}
if ( iteration == max_iteration )
then
color = black
plot(x0,y0,color)
else
color = iteration
plot(x0,y0,color)
}