כמעט כל הנקודות של המישור המורכב משויכות לאחד משורשי deg(p) של פולינום נתון באופן הבא: הנקודה משמשת כערך התחלתי z0 עבור איטרציה של ניוטון zn + 1 := zn − p(zn)
קבוצה פתוחה שעבורה האיטרציות מתכנסות לכיוון שורש או מחזור נתון (שאיננה נקודה קבועה), היא קבוצת ז'וליה עבור האיטרציה. הסט המשלים לאיחוד של כל אלה, הוא סט ג'וליה. לקבוצות הפאטו יש גבול משותף, כלומר לסט ג'וליה. לכן, כל נקודה מקבוצת ג'וליה היא נקודת צבירה עבור כל אחת מקבוצות הפאטו. תכונה זו היא שגורמת למבנה הפרקטלי של קבוצת יוליה (כאשר מידת הפולינום גדולה מ-2).
כדי לשרטט תמונות של הפרקטל, אפשר לבחור תחילה מספר d מסוים של נקודות מורכבות (ζ1, …, ζd) ולחשב את המקדמים (p1, …, pd) של הפולינום.
.
על הנקודות ב- ℂ, מוצאים את האינדקס k(m,n) של השורש המקביל ζk(m,n) ומשתמשים בזה כדי למלא רשת רסטר M × N על ידי הקצאת לכל נקודה (m,n) צבע fk(m,n). בנוסף או לחלופין הצבעים עשויים להיות תלויים במרחק D(m,n), המוגדר כערך הראשון D כך ש- zD − ζk(m,n) < ε עבור כמה ε > 0.
הכללה של פרקטלים של ניוטון
הכללה של האיטרציה של ניוטון היא:
כאשר a הוא כל מספר מרוכב[1] הבחירה המיוחדת a = 1 מתאימה לפרקטל ניוטון. הנקודות הקבועות של מפה זו יציבות כאשר a שוכנת בתוך הדיסקה ברדיוס 1 שבמרכזה 1. כאשר a נמצא מחוץ לדיסק זה, הנקודות הקבועות אינן יציבות מקומית, אולם המפה עדיין מציגה מבנה פרקטלי במובן של קבוצת ז'וליה. אם p הוא פולינום בדרגה d, אזי הרצף znמוגבל בתנאי ש-a נמצא בתוך דיסק ברדיוס d שמרכזו ב-d.
באופן כללי יותר, הפרקטל של ניוטון הוא מקרה מיוחד של קבוצת ג'וליה.
נובה פרקטל
פרקטל נובה שהומצא באמצע שנות ה-90 על ידי פול דרבישייר[2][3] הוא הכללה של פרקטל ניוטון בתוספת ערך c בכל שלב[4]:
גרסת "ג'וליה" של פרקטל נובה שומרת על c קבוע על פני התמונה ומאתחלת את z0 לקואורדינטות הפיקסלים, גרסת ה"מנדלברוט" של פרקטל נובה מאתחלת c לקואורדינטות הפיקסלים ומגדירה את z0 לנקודה קריטית, כאשר[5]
פולינומים נפוצים כמו p(z) = z3 − 1 או p(z) = (z − 1)3 מובילים לנקודה קריטית ב- z = 1.
יישום
כדי ליישם את פרקטל ניוטון, יש צורך בפונקציית התחלה וכן פונקציית הנגזרת שלה:
שלושת השורשים של הפונקציה הם:
ניתן לתרגם את הפונקציות שהוגדרו לעיל בפסאודו קוד באופן הבא:
//z^3-1float2Function(float2z){returncpow(z,3)-float2(1,0);//cpow is an exponential function for complex numbers}//3*z^2float2Derivative(float2z){return3*cmul(z,z);//cmul is a function that handles multiplication of complex numbers}
עכשיו זה רק עניין של יישום שיטת ניוטון באמצעות הפונקציות הנתונות:
float2roots[3]=//Roots (solutions) of the polynomial{float2(1,0),float2(-.5,sqrt(3)/2),float2(-.5,-sqrt(3)/2)};colorcolors[3]=//Assign a color for each root{red,green,blue}Foreachpixel(x,y)onthetarget,do:{zx=scaledxcoordinateofpixel(scaledtolieintheMandelbrotXscale(-2.5,1))zy=scaledycoordinateofpixel(scaledtolieintheMandelbrotYscale(-2,1))float2z=float2(zx,zy);//z is originally set to the pixel coordinatesfor(intiteration=0;iteration<maxIteration;iteration++;){z-=cdiv(Function(z),Derivative(z));//cdiv is a function for dividing complex numbersfloattolerance=0.000001;for(inti=0;i<roots.Length;i++){float2difference=z-roots[i];//If the current iteration is close enough to a root, color the pixel.if(abs(difference.x)<tolerance&&abs(difference.y)<tolerance){returncolors[i];//Return the color corresponding to the root}}}returnblack;//If no solution is found}
JH Hubbard, D. Schleicher, S. Sutherland : כיצד למצוא את כל השורשים של פולינומים מורכבים בשיטת ניוטון, Inventiones Mathematicae vol. 146 (2001) - עם דיון במבנה הגלובלי של פרקטלי ניוטון