Þessi grein mun leiða þig í gegnum hvernig á að teikna MandelBrot settið í Google Sheets, með því að nota aðeins formúlur og innbyggða grafatólið.

Hvað er MandelBrot settið?

Mandelbrot mengið er hópur sérstakra talna með nokkra undraverða eiginleika.
Þú hefur næstum örugglega séð mynd af Mandelbrot settinu áður.
Þetta er eitt frægasta stærðfræðihugtakið, jafnvel þekkt utan stærðfræðilegra hringa. Það er nefnt eftir franska stærðfræðingnum, Benoit Mandelbrot, sem var faðir brota rúmfræðinnar.
Mandelbrot settið er ótrúlega fallegt. Þetta er stórkostlegt listaverk, búið til með einfaldri jöfnu.
Meira formlega, Mandelbrot mengið er mengi tvinntölna c, þar sem jöfnan z² + c víkur ekki þegar hún er endurtekin frá z = 0.
Gosh, hvað þýðir það?
Jæja, það er auðveldara ef þú skoðar myndina efst í þessari grein. Svarta svæðið táknar punkta sem hverfa ekki út í hið óendanlega þegar þú heldur áfram að nota jöfnuna z² + c.
Lítum á c = -1.
Það endurtekur -1, 0, -1, 0, -1… að eilífu, svo það sleppur aldrei. Það er afmarkað þannig að það á heima í Mandelbrot settinu.
Íhugaðu nú c = 1.
Byrjar á z = 0, fyrsta endurtekningin er 1.
Önnur endurtekningin er 1² + 1 = 2.
Þriðja endurtekningin er 2² + 1 = 5.
Fjórða endurtekningin er 5² + 1 = 26.
Og svo framvegis 26, 677, 458330, 210066388901, … Það blæs upp!
Það víkur út í hið óendanlega, svo það er ekki í Mandelbrot settinu.
Áður en við getum teiknað Mandelbrot mengið þurfum við að hugsa um tvinntölur.

Ímyndaðar og flóknar tölur

Það er ómögulegt að teikna Mandelbrot mengið án grunnskilnings á tvinntölum.
Ef þú ert nýr í flóknum tölum skaltu lesa þessa grunngrein fyrst: Flókin tölur í Google Sheets
Það útskýrir hvað flóknar tölur eru og hvernig þú notar þær í Google Sheets.
Til upprifjunar eru flóknar tölur tölur á forminu
a + bi
þar sem i er kvaðratrótin af -1.
Við getum teiknað þau upp sem hnit á tvívíðu plani, þar sem raunstuðullinn „a“ er x-ásinn og ímyndaði stuðullinn „b“ er á y-ásnum.

Notaðu dreifisögu til að teikna Mandelbrot settið

Með því að taka hvern punkt á þessari 2-d flugvél á fætur öðrum, prófum við hann til að sjá hvort hann tilheyri Mandelbrot settinu. Ef það tilheyrir, fær það einn lit. Ef það á ekki heima fær það annan lit.
Þetta dreifingarrit af lituðum punktum er áætluð mynd af Mandelbrot settinu.
Eftir því sem við fjölgum punktum sem teiknaðir eru upp og fjölda endurtekninga fáum við í röð ítarlegri sýn á Mandelbrot mengið. Punktur sem gæti samt verið < 2 í endurtekningu 3 gæti verið greinilega utan þeirra marka með endurtekningu 5, 7 eða 10.

Þú getur séð útlínurnar líkjast Mandelbrot settinu miklu skýrari við hærri endurtekningar.
Hér er einföld nálgun á Mandelbrot settinu sem teiknað er í Google Sheets:

Við skulum fara í gegnum skrefin til að búa það til.
Þetta er dreifingarmynd með 289 stig (17 sinnum 17 stig).
Hver punktur er litaður til að sýna hvort hann er í Mandlebrot menginu eða ekki, eftir 3 endurtekningar.
Svartir punktar tákna tvinntölur, sem eru bara hnit (a,b) mundu, en stærðirnar eru enn minni en eða jafnar og 2 eftir 3 endurtekningar. Þannig að við erum með þá í Mandelbrot settinu okkar.
Ljósbláir punktar tákna flóknar tölur sem eru orðnar stærri en 2 og eru ekki í Mandelbrot menginu okkar. Með öðrum orðum, þeir eru að víkja.
Þrjár endurtekningar eru ekki mjög margar, þess vegna er þetta graf mjög gróf nálgun á Mandelbrot menginu. Sumir af þessum svörtu punktum munu að lokum víkja við hærri endurtekningar.
Og augljóslega þurfum við fleiri stig svo við getum fyllt í eyðurnar á milli punktanna og prófað þessar flóknu tölur.
En það er byrjun.

Búa til flókin töluhnit

Í dálki A þurfum við röðina að fara frá 0 til 2 og endurtaka { 0, 0,25, 0,5, 0,75, 1, 1,25, 1,5, 1,75, 2, 0, 0,25, 0,5, …}
Í dálki B þurfum við röðina 0, síðan 0,25, síðan 0,5 sem endurtekur sig 9 sinnum hver þar til við náum 2 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,25, 0,25, 0,25, …}
Þetta gefur okkur samsetningar x og y hnita fyrir tvinntölurnar okkar c sem við munum prófa til að sjá hvort þær liggi í menginu eða ekki.
Það er auðveldara að sjá í raunverulegu blaðinu:

Við höldum áfram þar til við náum númer 2 í dálki B. Við höfum 324 raðir af gögnum. Það eru nokkrar endurteknar línur (eins og 0,0) en það skiptir ekki máli í bili.
Dálkar A og B innihalda nú hnitin fyrir hnitanet okkar með tvinntölum. Nú þurfum við að prófa hvern og einn til að sjá hvort hann eigi heima í Mandelbrot settinu.

Formúlur fyrir Mandelbrot reiknirit

Við búum til reikniritskrefin í dálkum C til J.
Í reit C2 búum við til flóknu töluna með því að sameina raun- og ímyndaða stuðlana:
=COMPLEX(A2,B2)
Hólf D2 inniheldur fyrstu endurtekningu reikniritsins með z = 0, þannig að niðurstaðan er jöfn C, tvinntölunni í hólf C2, þess vegna:
=C2
Önnur endurtekningin er í reit E2. Jafnan að þessu sinni er z² + c, þar sem z er gildið í reit D2 og C er gildið frá C2:
=IMSUM(IMPOWER(D2,2),$C2)
Það er sama z² + c í F2, þar sem z í þessu tilfelli er frá E2 (fyrri endurtekning):
=IMSUM(IMPOWER(E2,2),$C2)
Taktu eftir „$“ tákninu fyrir framan C-ið í báðum formúlunum í dálkum E og F. Þetta er til að læsa formúlunni okkar aftur við C-gildið fyrir Mandelbrot-jöfnuna okkar.
Í reit G2:
=IMABS(D2)
Dragðu þessa formúlu yfir frumur H2 og I2 líka.
Í reit J2, notaðu IFERROR aðgerðina:
=IFERROR(IF(I2<=2,1,2),2)
Skildu síðan eftir nokkra auða dálka, áður en þú setur töflugögnin í dálka M, N og O, með eftirfarandi formúlum sem tákna x gildin og y röðina tvær með mismunandi litum:
=A2
=IF(J2=1,B2,"")
=IF(J2=2,B2,"")
Þannig lítur gagnasafn okkar núna svona út (smelltu til að stækka):

Lokaverkefnið er að draga fyrstu röð formúla niður í botn gagnasafnsins, þannig að hver röð er fyllt út með formúlunum (smelltu til að stækka):

Allt í lagi, nú erum við tilbúin að teikna nokkrar fallegar myndir!

Teikning Mandelbrot settið í Google Sheets

Auðkenndu dálka M, N og O í gagnasafninu þínu.
Smelltu á Setja inn > Myndrit .
Það opnast fyrir skrítið útlit sjálfgefið dálkarit, svo breyttu því í dreifingarrit undir Uppsetning > Myndritsgerð .
Breyttu litaröðinni ef þú vilt gera Mandelbrot settið svart og það sem ekki er Mandelbrot settið einhvern annan lit. Ég valdi ljósblátt.
Og að lokum skaltu breyta stærð töflunnar í ferningslaga lögun með því að nota svörtu handföngin á mörkum korthlutarins.
Búmm! Þarna er það í allri sinni dýrð:

Athugið: Þú gætir þurft að stilla handvirkt lágmarks- og hámarksgildi lárétta og lóðrétta ásanna á -2 og 2 í sömu röð í Customize valmyndinni í grafaritlinum.

Hvernig á að teikna betra MandelBrot sett í Google Sheets

Búa til gögn sjálfkrafa

Að búa til þessi xy hnit handvirkt er afar leiðinlegt og í raun ekki hagnýtt umfram einfalda dæmið hér að ofan.
Sem betur fer geturðu notað hina frábæru SEQUENCE aðgerð, UNIQUE aðgerðina og fylkisformúlur í Google Sheets til að hjálpa þér.
Þessi formúla mun búa til xy hnit fyrir 33 x 33 rist, sem gefur útfylltri mynd en einfalda dæmið hér að ofan.
=ArrayFormula(UNIQUE({
MOD(SEQUENCE(289,1,0,1),17)/8,
ROUNDDOWN(SEQUENCE(289,1,0,1)/17)/8;
-MOD(SEQUENCE(289,1,0,1),17)/8,
ROUNDDOWN(SEQUENCE(289,1,0,1)/17)/8;
MOD(SEQUENCE(289,1,0,1),17)/8,
-ROUNDDOWN(SEQUENCE(289,1,0,1)/17)/8;
-MOD(SEQUENCE(289,1,0,1),17)/8,
-ROUNDDOWN(SEQUENCE(289,1,0,1)/17)/8
}))

Dragðu síðan hinar formúlurnar niður í línurnar þínar til að klára gagnasafnið eins og við gerðum hér að ofan.
Síðan geturðu auðkennt dálka M, N og O til að teikna grafið þitt aftur.
Athugið: Þú gætir þurft að stilla handvirkt lágmarks- og hámarksgildi lárétta og lóðrétta ásanna á -2 og 2 í sömu röð í Customize valmyndinni í grafaritlinum.
Með þremur endurtekningum lítur grafið svona út:

Að auka endurtekningarnar

Við skulum skoða 5 endurtekningar og 10 endurtekningar og þú munt sjá hversu miklum smáatriðum þetta bætir við.
Til að fara úr 3 endurtekningum í 5 þurfum við að bæta nokkrum dálkum við blaðið okkar og endurtaka reikniritið tvisvar í viðbót.
Svo skaltu setja tvo auða dálka á milli F og G. Merktu fyrirsagnirnar 4 og 5.
Dragðu formúluna í F2 yfir nýju auðu dálkana G og H (þetta er j² + c jöfnan sem Google Sheet formúla):
Í G2:
=IMSUM(IMPOWER(F2,2),$C2)
Í H2:
=IMSUM(IMPOWER(G2,2),$C2)
Við þurfum að bæta við samsvarandi stærðarútreikningsdálkum. Á milli K og L, settu tvo nýja auða dálka inn og dragðu IMABS formúluna yfir.
Nú í L2:
=IMABS(G2)
Og í M2:
=IMABS(H2)
Að lokum skaltu uppfæra IF formúluna til að tryggja að það sé að prófa gildið í dálki M núna:
=IFERROR(IF(M2<=2,1,2),2)
Og þannig er það!
Myndritið okkar ætti að uppfæra og líta svona út:

Þú getur séð lögun Mandelbrot settsins miklu skýrari núna.
Að stækka úr 5 endurtekningum í 10 endurtekningar er nákvæmlega það sama. Bættu við 5 auðum dálkum og fylltu út formúlurnar aftur.
10 endurtekningarritið sem myndast er betra aftur:

Fjölgun gagnapunkta

Með því að auka fjölda punkta í 6.561 í 81 um 81 rist mun gefa „fullkomnari“ mynd en dæmin hér að ofan.
Þessi raðformúla mun búa til þessa gagnapunkta:
=ArrayFormula(UNIQUE({
MOD(SEQUENCE(1681,1,0,1),41)/20,
ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20;
-MOD(SEQUENCE(1681,1,0,1),41)/20,
ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20;
MOD(SEQUENCE(1681,1,0,1),41)/20,
-ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20;
-MOD(SEQUENCE(1681,1,0,1),41)/20,
-ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20
}))

Varað við því, þegar þú eykur fjölda formúla í blaðinu þínu og fjölda punkta til að teikna upp í dreifitöflunni, mun blaðið þitt byrja að hægja á sér!

Að bæta við litaböndum

Við getum bætt við litaböndum til að sýna hvaða endurtekningu tiltekinn punktur „slapp“ í átt að óendanleika.
Til dæmis fá allir punktar sem eru stærri en þröskuldurinn okkar við endurtekningu 5 annan lit en þeir sem eru minni en þröskuldurinn við endurtekningu 5, en verða stærri við endurtekningu 6.
Formúlurnar fyrir endurtekningarnar og stærð eru þær sömu og dæmin hér að ofan.
Þá ákveð ég hvort punkturinn sé enn í Mandelbrot settinu:
=IF(ISERROR(AG2),"No",IF(AG2<=2,"Yes","No"))
Og síðan hvaða endurtekningu það «sleppur» út í hið óendanlega, eða út fyrir þröskuldinn 2 í þessu dæmi:
=IF(AH2="Yes",0,MATCH(2,S2:AG2,1))
Þessar formúlur eru sýndar í Google Sheets sniðmátinu:
Næst búum við til röðina fyrir töfluna:
Í fyrsta lagi Mandelbrot settið:
=IF(AH2="Yes",B2,"")
Síðan röð 1 til 15:
=IF($AI2=AK$1,$B2,"")
Sviðið fyrir dreifingarmyndina er þá:
A1:A6562,AJ1:AY6562
þar sem dálkur A er x-ás gildin og dálkar AJ til AY eru y-ás röð.
Að teikna dreifingarfléttuna og stilla liti seríunnar gefur fallega mynd (þetta er 81 x 81 rist):

Að ná hagnýtu takmörkunum Google Sheets

Sem lokaæfing jók ég lóðarstærðina í 40.401 sem táknar 201 um 201 stig. Þetta hægði verulega á blaðinu og tók um hálftíma að skila dreifingarþræðinum, svo ekki eitthvað sem ég myndi mæla með.
Myndin er samt mjög falleg!

Hægt er að búa til 40.401 xy hnitin með þessari fylkisformúlu:
=ArrayFormula(UNIQUE({
MOD(SEQUENCE(10201,1,0,1),101)/50,
ROUNDDOWN(SEQUENCE(10201,1,0,1)/101)/50;
-MOD(SEQUENCE(10201,1,0,1),101)/50,
ROUNDDOWN(SEQUENCE(10201,1,0,1)/101)/50;
MOD(SEQUENCE(10201,1,0,1),101)/50,
-ROUNDDOWN(SEQUENCE(10201,1,0,1)/101)/50;
-MOD(SEQUENCE(10201,1,0,1),101)/50,
-ROUNDDOWN(SEQUENCE(10201,1,0,1)/101)/50
}))

Aðdráttur inn á Mandelbrot settið


Mandelbrot setur hafa þann eiginleika að vera sjálfslíkur.
Það er að segja, við getum þysjað inn á hvaða hluta töflunnar sem er og séð sömu brota rúmfræðina spila út á óendanlega minni mælikvarða. Þetta er aðeins einn af undraverðum eiginleikum Mandelbrot settsins.
Google Sheets er örugglega ekki besta tólið til að kanna Mandelbrot settið með vaxandi upplausn. Það er of seinlegt í myndrænni framsetningu og of handvirkt til að gera breytingar á formúlum og ásmörkum.
Hins vegar, eins og orðatiltækið segir: besta verkfærið er það sem þú hefur við höndina.
Svo ef þú vilt kanna í Google Sheets er það mögulegt:

Búa til aðdráttargögn

Ég ætla að stækka punktinn: -0.17033700000, -1.06506000000
(Þökk sé þessari grein, The Mandelbrot at a Glance eftir Paul Bourke, sem benti á nokkra áhugaverða punkta til að skoða.)
Byrjaðu á þessari formúlu í reit A2 til að búa til 6.561 gagnapunkta (ég myndi ekki mæla með því að fara yfir þetta vegna þess að það verður of hægt):
=ArrayFormula(UNIQUE({
MOD(SEQUENCE(1681,1,0,1),41)/20,
ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20;
-MOD(SEQUENCE(1681,1,0,1),41)/20,
ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20;
MOD(SEQUENCE(1681,1,0,1),41)/20,
-ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20;
-MOD(SEQUENCE(1681,1,0,1),41)/20,
-ROUNDDOWN(SEQUENCE(1681,1,0,1)/41)/20
}))

Í dálkum C og D umbreytti ég þessum gögnum með því að breyta 0,0 miðju í -0,17033700000, -1,06506000000 og bæta svo gildunum frá A og B við C og D í sömu röð, deilt með 100 til að þysja inn.
=C$2+A3/100
=D$2+B3/100
Restin af ferlinu er eins.
Ég stillti lágmarks- og hámarksgildin á töfluásunum til að passa við lágmarks- og hámarksgildin í hverjum dálki C (x-ás) og D (y-ás).

Þetta lítur út fyrir að vera samfellt vegna þess að grafið er með punktastærð 10px til að láta það líta betur út.
Ef ég endurstilla það í 2px, sérðu greinilega að þetta er enn dreifimynd:

Ég vona að þú hafir haft gaman af þeirri könnun á Mandelbrot settinu í Google Sheets! Láttu mig vita af hugsunum þínum í athugasemdunum hér að neðan.

Sjá einnig

Hvernig á að teikna Cantor settið í Google Sheets
Hvernig á að teikna Sierpiński þríhyrninginn í Google Sheets
Kannaðu mannfjöldavöxt og óreiðukenningu með flutningakortinu, í Google Sheets


Þegar ég var 12 eða 13 ára sá ég vísindaáætlun um brottölur og óreiðukenningar. Ég var hrifinn af flóknum lífrænum formum og skærum litum, sérstaklega Mandelbrot settinu, og ákvað að mig langaði að læra að búa þau til. Þannig fékk ég fyrst og fremst áhuga á stærðfræði og forritun. Að teikna Mandelbrot settið er gefandi æfing fyrir byrjandi forritara, sem nær yfir mörg mikilvæg efni eins og lykkjur og skilyrtar staðhæfingar.

Aðdráttur smáatriði af Mandelbrot settinu. Skerið af Wikipedia
Stærðfræðilega er Mandelbrot mengið skilgreint á fleti tvinntölna með því að velja upphafspunkt \(c\) og endurtaka formúluna \(z_{k+1} = z_k^2 + c\). Endurtekningin gefur þér röð talna sem annaðhvort helst afmörkuð eða spírast úr böndunum lengra og lengra frá upphafspunktinum. Flókin tala \(c\) tilheyrir Mandelbrotsmenginu ef röðin helst innan radíus 2 frá uppruna.
Auðvelt er að plotta Mandelbrot settið: kortleggðu hvern pixla á skjánum í flókna tölu, athugaðu hvort hann tilheyri menginu með því að endurtaka formúluna og litaðu pixlann svartan ef hann gerir það og hvítan ef hann gerir það ekki. Þar sem endurtekningin gæti aldrei endað, setjum við hámark
Fyrst af öllu þurfum við leið til að tákna flóknar tölur. Sum forritunarmál eins og Python innihalda innbyggða flókna tölutegund sem við gætum notað til að útfæra endurtekninguna með því að nota ofangreinda formúlu beint. Önnur tungumál eins og Java eða JavaScript innihalda ekki flóknar tölur, en ekki að hafa áhyggjur: við getum táknað tvinntöluna \(z = x+iy\) sem par af rauntölum \((x,y)\). Í þessari framsetningu verður endurtekning Mandelbrot setts:
\[
\begin{align}
x_{k+1} &= x_k^2 – y_k^2 + \mathrm{Re}\ c \\
y_{k+1} &= 2 x_k y_k + \mathrm{Im}\ c
\end{align}
\]
Allt sem er eftir núna er að finna út hvernig á að kortleggja pixla á flóknar tölur. Það er auðvelt verkefni: við viljum að miðpunktur myndarinnar sé kortlagður á (0,0), þannig að miðað við pixla drögum við helming myndhæðarinnar frá lóðréttu hnitinu og helminginn af breiddinni frá láréttu hnitinu. Næst, kvarðinn: við vitum að Mandelbrot mengið liggur innan hrings með radíus 2, þannig að öll breidd myndarinnar ætti að vera lengd 4. Þetta gefur okkur eftirfarandi forrit til að plotta Mandelbrot mengið á C-líku tungumáli:

fyrir (inn röð = 0; röð < hæð; röð++) {
fyrir (int col = 0; col < width; col++) {
tvöfaldur c_re = (col - width/2.0)*4.0/width;
tvöfaldur c_im = (röð - hæð/2.0)*4.0/breidd;
tvöfaldur x = 0, y = 0;
int endurtekning = 0;
while (x*x+y*y <= 4 && endurtekning < max) {
tvöfalt x_nýtt = x*x - y*y + c_re;
y = 2*x*y + c_im;
x = x_nýtt;
endurtekning++;
}
if (endurtekning < max) putpixel(col, row, white);
else putpixel(col, row, black);
}
}

(Þú getur fundið raunverulega útfærslu í Java í GitHub.) Hér er söguþráðurinn framleiddur af því:
Það er ekkert sérstaklega áhrifamikið, er það? Hvar eru fallegu litirnir?
Þar sem Mandelbrot settið hefur mjög fína uppbyggingu, með því að plotta aðeins svart eða hvítt, fáum við enga hugmynd um hversu nálægt pixla er settinu. Fjöldi endurtekningar gefur okkur nokkra hugmynd um það, svo við skulum nota það til að lita pixla sem tilheyra ekki settinu. Breytingin sem þarf á kóðanum er léttvæg: skilgreindu litakort og notaðu það í stað hvíts:

if (endurtekningar < max) putpixel(col, row, colors[endurtekningar]);

(Framkvæmd í Java.) Myndin sem þetta forrit framleiðir er miklu fallegri og gefur betri hugmynd um uppbyggingu leikmyndarinnar, þar sem fínar tendrs spretta upp úr perunum.
Þetta grunnforrit er hægt að bæta mikið. Helst ætti það að vera gagnvirkt, sem gerir notandanum kleift að þysja að mismunandi hlutum söguþræðisins og framleiða glæsilega mynd. Hægt er að auka fagurfræði myndanna: Sérstaklega sýnir litakortlagningin sem við höfum valið ósamfelld bönd þar sem endurtekningarfjöldi breytist. Einnig er hægt að gera nokkrar fínstillingar til að gera forritið hraðar til að búa til myndirnar. Ég mun fjalla um sum þessara mála í næstu færslum.

Calcpad hefur áhugaverðan og óskráðan eiginleika sem ég ætla að sýna í þessari færslu. Þú getur notað það til að plotta Mandelbrot settið fljótt. Þetta er mengi tvinntölna c , þar sem endurtekningarjöfnan z n+1 = z n 2 + c fer ekki út í óendanlega. Það fallegasta er að það sýnir brotahegðun við mörk sín. Ef þú teiknar það með viðeigandi litum geturðu búið til töfrandi myndir og hreyfimyndir. Mér líkar mjög við þá á YouTube rás Maths Town:

Mandelbrot fractal zoom myndbönd á YouTube
Venjulega eru slík myndbönd búin til með flóknum hugbúnaði sem er sérstaklega þróaður í þeim tilgangi. Hins vegar geturðu líka plottað Mandelbrot settið með Calcpad og nokkrum línum af kóða. Það eru tvær leiðir til þess. Sá fyrsti er að nota Calcpad hæfileikana fyrir flókna reikning, sem hér segir:

„Mandelbrot sett
'Skilgreindu fallið
MandelbrotSet(z; c) = $Repeat{z = z^2 + c @ i = 1 : n}
#fela
'Stilltu teiknibreytur
PlotStep = 1', 'PlotWidth = 500', 'PlotHeight = 500
#sýna
'Plot for'n = 50'endurtekningar
$Map{abs(MandelbrotSet(0; x + 1i*y)) @ x = -1.5 : 0.5 & y = -1 : 1}

Opnaðu Calcpad, skiptu yfir í „flókinn“ ham, límdu ofangreindan kóða inn í og ​​keyrðu útreikningana. Þú færð eftirfarandi niðurstöðu:
Mandelbrot settur samsæri með Calcpad flóknum reikningi
Það er ekki svo slæmt, en samt ekki mjög áhrifamikið. Það vantar allavega liti á ytra byrðina. Þá, hvernig getum við litað? Fræðilega séð er það uppfyllt fyrir allar tölur í menginu sem | z n | < 2 fyrir hvaða n sem er . Utan fer ferlið í sundur og stuðullinn fer í óendanlegt, þegar n eykst. Þú getur notað það á eftirfarandi hátt:
1. Fyrir hvern punkt, reiknaðu fjölda endurtekninga n , þar sem | z n | verður stærri en 2.
2. Settu þessi gildi við liti.
3. Teiknaðu litina við viðkomandi hnit.
Ef þú spilar með fjölda endurtekninga n í dæminu hér að ofan muntu sjá að söguþráðurinn breytist. Skyggða svæðið er þar sem | z n | rennur saman fyrir viðkomandi n .
Mandelbrot sett, teiknað með mismunandi gildum n
Ef þú sameinar ofangreindar söguþræðir og notar nokkra liti geturðu fengið virkilega fallega listræna mynd eins og hér að neðan:
Mandelbrot sett með Calcpad + GIMP
Eina vandamálið við þessa aðferð er að það er hægt og vandað. Þess vegna setti ég sérstaka fall Mandelbrot(x; y) inn í Calcpad. Það reiknar út fjölda endurtekninga sem þarf til að stuðullinn fari yfir 2. Þú getur teiknað þessa aðgerð beint með valinn litakvarða:
Mandelbrot fall plot Mandelbrot fall hluta plot
Til að gera það notaði ég enn styttri kóða:

„Mandelbrot sett
#fela
'Stilltu teiknibreytur
PlotStep = 1', 'PlotWidth = 500', 'PlotHeight = 500
#sýna
'Plot for'n = 50'endurtekningar
$Map{Mandelbrot(x; y) @ x = -1.5 : 0.5 & y = -1 : 1}
'Plot for'n = 70'endurtekningar
$Map{Mandelbrot(x; y) @ x = -0,59 : -0,58 & y = 0,55 : 0,56}

Hér getur þú fundið C# kóða Mandelbrot fallsins sem virkar inni í Calcpad:

private static readonly double Log2Inv = 1 / Math.Log(2);       
//Reiknar fjölda endurtekningar þar sem z = z^2 + c uppfyllir |z| > 2
//Breytir því svo í sléttan log mælikvarða og skilar niðurstöðunni
varið kyrrstætt tvöfalt MandelbrotSet (tvöfalt x, tvöfalt y)
{
// Athugar hvort punkturinn sé inni í menginu og skilar NaN beint
ef (x > -1,25 && x < 0,375)
{
ef (x < -0,75)
{
ef (y > -0,25 && y < 0,25)
{
tvöfaldur x1 = x + 1,
y2 = y * y,
x2 = x1 * x1;
ef (x2 + y2 <= 0,0625)
skila tvöfalt.NaN;
}
}
annað ef (y > -0,65 && y < 0,65)
{
tvöfaldur x1 = x - 0,25,
y2 = y * y,
q = x1 * x1 + y2;
ef (q * (q + x1) <= 0,25 * y2)
skila tvöfalt.NaN;
}
}
//Fyrir alla aðra punkta framkvæmir nákvæma útreikninga
tvöfaldur re = x, im = y;
fyrir (int i = 1; i <= 1000; ++i)
{
tvöfaldur reSq = re * re,
imSq = im * im,
sumSq = reSq + imSq;
//Til að forðast sqrt aðgerðina skaltu haka við |z| > 2 er skipt út fyrir z^2 > 4
ef (summaSq > 4)
{
var logZn = Math.Log(sumSq) / 2;
var nu = Math.Log(logZn * Log2Inv) * Log2Inv;
skila (1,01 - Math.Pow(i - nú, 0,001)) * 1000;
}
//Reiknar z = z^2 + c
im = 2 * re * im + y;
re = reSq - imSq + x;
}
skila tvöfalt.NaN;
}
}

Allur frumkóði er fáanlegur á GitHub.