Newton fractal - Newton fractal

Julia a stabilit funcția rațională asociată metodei lui Newton pentru .

Newton fractal este un set de delimitare în planul complex care se caracterizează prin metoda lui Newton aplicată la un fix polinomială sau funcția transcendentală . Este setul Julia a funcției meromorfe , care este dată de metoda lui Newton. Când nu există cicluri atractive (de ordin mai mare de 1), acesta împarte planul complex în regiuni , fiecare dintre acestea fiind asociată cu o rădăcină a polinomului ,. În acest fel, fractala Newton este similară cu setul Mandelbrot și, ca și alte fractale, prezintă un aspect complicat care rezultă dintr-o descriere simplă. Este relevantă pentru analiza numerică, deoarece arată că (în afara regiunii convergenței pătratice ) metoda Newton poate fi foarte sensibilă la alegerea punctului său de pornire.

Multe puncte ale planului complex sunt asociate cu una dintre rădăcinile polinomului în felul următor: punctul este folosit ca valoare de pornire pentru iterația lui Newton , rezultând o secvență de puncte Dacă secvența converge la rădăcină , atunci a fost un element al regiunea . Cu toate acestea, pentru fiecare polinom de grad cel puțin 2 există puncte pentru care iterația Newton nu converge la nicio rădăcină: exemplele sunt limitele bazinelor de atracție ale diferitelor rădăcini. Există chiar polinoame pentru care seturile deschise de puncte de pornire nu reușesc să convergă la orice rădăcină: un exemplu simplu este , în care unele puncte sunt atrase de ciclul 0, 1, 0, 1 ... mai degrabă decât de o rădăcină.

Un set deschis pentru care iterațiile converg către o anumită rădăcină sau ciclu (care nu este un punct fix), este un set Fatou pentru iterație. Setul complementar la unirea tuturor acestora este setul Julia. Mulțimile Fatou au graniță comună, și anume mulțimea Julia. Prin urmare, fiecare punct al mulțimii Julia este un punct de acumulare pentru fiecare dintre mulțimile Fatou. Această proprietate este cea care determină structura fractală a mulțimii Julia (când gradul polinomului este mai mare de 2).

Pentru a trasa imagini interesante, se poate alege mai întâi un număr specificat de puncte complexe și să se calculeze coeficienții polinomului

.

Apoi , pentru un grilaj dreptunghiular , , de puncte în , o găsește indicele rădăcinii corespunzătoare și o utilizează pentru a umple un x grila raster atribuind fiecărui punct o culoare . În plus sau alternativ, culorile pot depinde de distanță , care este definită ca fiind prima valoare astfel încât pentru unele mici fixate anterior .

Generalizarea fractalelor Newton

O generalizare a iterației lui Newton este

unde este orice număr complex. Alegerea specială corespunde fractalului Newton. Punctele fixe ale acestei hărți sunt stabile atunci când se află în interiorul discului de rază 1 centrat la 1. Când se află în afara acestui disc, punctele fixe sunt instabile la nivel local, totuși harta prezintă încă o structură fractală în sensul mulțimii Julia . Dacă este un polinom de grad , atunci secvența este delimitată cu condiția să se afle în interiorul unui disc de rază centrat la .

Mai general, fractala lui Newton este un caz special al unui set Julia .

Nova fractală

Fractala Nova inventată la mijlocul anilor 1990 de Paul Derbyshire este o generalizare a fractalei Newton cu adăugarea unei valori la fiecare pas:

Varianta „Julia” a fractalei Nova se menține constantă peste imagine și se inițializează la coordonatele pixelilor. Varianta „Mandelbrot” a fractalei Nova inițializează la coordonatele pixelilor și se setează într-un punct critic, unde . Polinoamele utilizate frecvent ca sau duc la un punct critic la .

Implementare

Pentru a implementa Newton Fractal, este necesar să aveți o funcție de pornire, precum și funcția sa derivată:

Rădăcinile funcției sunt

Funcțiile definite mai sus pot fi traduse în pseudocod după cum urmează:

//z^3-1 
float2 Function (float2 z)
{
	return cpow(z, 3) - float2(1, 0); //cpow is an exponential function for complex numbers
}

//3*z^2
float2 Derivative (float2 z)
{
	return 3 * cmul(z, z); //cmul is a function that handles multiplication of complex numbers
}

Acum este doar o chestiune de implementare a metodei Newton folosind funcțiile date.

float2 roots[3] = //Roots (solutions) of the polynomial
{
	float2(1, 0), 
	float2(-.5, sqrt(3)/2), 
	float2(-.5, -sqrt(3)/2)
};
	
color colors[3] =  //Assign a color for each root
{
    red,
    green,
    blue
}

For each pixel (x, y) on the target, do:
{
	zx = scaled x coordinate of pixel (scaled to lie in the Mandelbrot X scale (-2.5, 1))
    zy = scaled y coordinate of pixel (scaled to lie in the Mandelbrot Y scale (-1, 1))

    float2 z = float2(zx, zy); //Z is originally set to the pixel coordinates

	for (int iteration = 0;
	     iteration < maxIteration;
	     iteration++;)
	{
		z -= cdiv(Function(z), Derivative(z)); //cdiv is a function for dividing complex numbers

        float tolerance = 0.000001;
        
		for (int i = 0; i < roots.Length; i++)
		{
		    float2 difference = 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)
			{
				return colors[i]; //Return the color corresponding to the root
			}
		}
		
    }
    
    return black; //If no solution is found
}

Vezi si

Referințe

Lecturi suplimentare