Per Holm Inlämningsuppgift 2, PTDC 2014/15 2 / 19. Med c = i konvergerar inte talföljden:

Relevanta dokument
Inlämningsuppgift 3 Mandelbrot

Inlämningsuppgifter. Varje inlämningsuppgift ska redovisas med en skriftlig rapport och med de Javaprogram som ni har skrivit.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Complex numbers. William Sandqvist

Laboration 4: Digitala bilder

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Explorativ övning 7 KOMPLEXA TAL

Föreläsning 3-4 Innehåll

Övningshäfte 2: Komplexa tal

TATM79: Föreläsning 3 Komplexa tal

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Typkonvertering. Java versus C

Parallellism, återblick

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Exempel på användning av arv: Geometriska figurer

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Föreläsning 3. Iteration while-satsen

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Grundläggande programmering med C# 7,5 högskolepoäng

Iteration while-satsen

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

OOP Objekt-orienterad programmering

Malmö högskola 2012/2013 Teknik och samhälle

OOP Objekt-orienterad programmering

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Övningshäfte 2: Komplexa tal (och negativa tal)

Lösningsförslag övning 2.

Laboration 3. Redovisning Uppgifterna skall vara demonstrerade och godkända av en handledare senast måndag 22/2.

Malmö högskola 2007/2008 Teknik och samhälle

Introduktion till Komplexa tal

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

JAVA Mer om klasser och objektorientering

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Mål Förklaring av termer

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Malmö högskola 2008/2009 CTS

Laboration 3. I1 Programmerade system, HT15

Användarhandledning Version 1.2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Elteknik. Komplexa tal

Del A (obligatorisk för alla)

Laboration 3 GUI-programmering

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

JAVAUTVECKLING LEKTION 3

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

1.1 Den komplexa exponentialfunktionen

Laboration 3: Rekursiva definitioner, listor och ett olöst problem

Mål Förklaring av termer

TATM79: Föreläsning 7 Komplexa exponentialfunktionen och binomiska ekvationer

TENTAMEN I DATAVETENSKAP

Komplexa tal: Begrepp och definitioner

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11

Föreläsning 1 & 2 INTRODUKTION

Föreläsningar 11, 12 (okt 08, okt 12 v 40). Poster och Abstrakta datatyper.

Föreläsning 9-10 Innehåll

Föreläsning 3: Booleans, if, switch

JAVAUTVECKLING LEKTION 4

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Föreläsning 1 & 2 INTRODUKTION

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Uppföljning av diagnostiskt prov Repetition av kursmoment i TNA001-Matematisk grundkurs.

Malmö högskola 2008/2009 CTS

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

x f (x) dx 1/8. Kan likhet gälla i sistnämnda relation. (Torgny Lindvall.) f är en kontinuerlig funktion på 1 x sådan att lim a

Lite logik. Kap 6: Sid 2

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

JAVAUTVECKLING LEKTION 11

Programmering A. Johan Eliasson

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

LyckaTill önskar Anna

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen i Komplex analys, SF1628, den 21 oktober 2016

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Programmering för språkteknologer II, HT2011. Rum

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Laboration 1. Objektorienterad programmering, Z1. Syfte

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Transkript:

Inlämningsuppgift 2, Mandelbrot Mandelbrots talföljd Beräkna och rita bild av Mandelbrotmängden. Färdigskrivet användargränssnitt. Ganska mycket och ganska komplext börja i tid! 0, k = 0 z k = + c, k = 1, 2,... z 2 k 1 c och z är komplexa tal. Starta med z 0 = 0. Beräkna z 1 genom att kvadrera z 0 och addera c. Beräkna z 2 genom att kvadrera z 1 och addera c.... och så vidare. Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 1 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 2 / 19 Talföljden, c = 0.4 + 0.4i Talföljden, c = 0.4 + 0.4i z 0 = 0 z 1 = 0.4 + 0.4i z 2 = 0.4 + 0.08i z 3 = 0.246 + 0.336i z 4 = 0.452 + 0.234i z 5 = 0.250 + 0.188i z 6 = 0.373 + 0.306i z 7 = 0.355 + 0.172i Med c = 0.4 + 0.4i konvergerar inte talföljden: z 0 = 0 z 1 = 0.4 + 0.4i z 2 = 0.4 + 0.72i z 3 = 0.042 + 0.976i z 4 = 0.551 + 0.481i z 5 = 0.472 0.130i z 6 = 0.606 + 0.277i z 7 = 0.690 + 0.736i z 8 = 0.335 + 1.412i z 9 = 1.492 + 1.348i z 10 = 0.808 3.621i z 11 = 12.06 5.452i z 12 = 116.1 + 131.9i z 13 = 3920 + 30613i... Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 3 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 4 / 19

Mandelbrotmängden Algoritm Mandelbrotmängden M är en delmängd av de komplexa talen. Definition Ett komplext tal c tillhör M om Mandelbrotföljden med c som startvärde inte divergerar. Exempel: c = 0.4 + 0.4i 2 M. c = 0.4 + 0.4i /2 M. Men hur vet man om talföljden konvergerar eller inte? Sats Om det för något k gäller att z k > 2sådivergerarMandelbrotföljden. Man bestämmer ett heltal MAX_ITER, 200 kan vara lagom. 1 Välj ett komplext tal c 2 k = 0, z 0 = 0 + 0i 3 så länge k < MAX_ITER och z k apple 2: Öka k Beräkna z k 4 Om k < MAX_ITER Följden är divergent (säkert) annars Följden är konvergent och c tillhör M (nästan säkert) Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 5 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 6 / 19 Vi behöver komplexa variabler /** Skapar en komplex variabel med realdelen re och imaginärdelen im */ Complex(double re, double im); /** Tar reda på realdelen */ double getre(); /** Tar reda på imaginärdelen */ double getim(); /** Tar reda på talets absolutbelopp i kvadrat */ double getabs2(); /** Adderar det komplexa talet c till detta tal */ void add(complex c); Kommentarer till Complex Man kan alltså skriva så här: Complex a = new Complex(0.4, -0.8); Complex b = new Complex(1, 2); b.add(a); // b = 1.4 + 1.2i b.mul(a); // b = (1.4 + 1.2i) * (0.4-0.8i) = 1.52-0.64i Skriv ett eget testprogram för att kontrollera att klassen fungerar. Tänk särskilt på z.mul(z). getabs2 för att man ska slippa att dra kvadratrot. Mandelbrotalgoritmen måste modifieras något. /** Multiplicerar detta tal med det komplexa talet c */ void mul(complex c); Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 7 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 8 / 19

MandelbrotGUI Huvudprogram (ofullständigt) class Mandelbrot { public static void main(string[] args) { MandelbrotGUI gui = new MandelbrotGUI(); while (true) { switch (gui.getcommand()) { case MandelbrotGUI.RENDER:...; break; case MandelbrotGUI.RESET:...; break; case MandelbrotGUI.QUIT:...; break; case MandelbrotGUI.ZOOM:...; break; Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 9 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 10 / 19 Koordinatsystem: talplanet Koordinatsystem: ritsystemet maxim (0, 0) width 1 minre minim maxre height 1 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 11 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 12 / 19

Samband mellan koordinatsystem Samband mellan koordinatsystem, bild Vi ska åskådliggöra det komplexa talplanet (den del som syns i användargränssnittet) med en bild. Varje punkt i ritsystemet motsvaras av ett komplext tal (man lägger koordinatsystemen ovanpå varandra): (0, 0) motsvaras av (minre, maxim) (width-1, height-1) motsvaras av (maxre, minim) maxim (0, 0) width 1 Skapa en matris och fyll den med komplexa tal: Complex[][] complex = new Complex[height][width]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { complex[i][j] = new Complex(<re>, <im>); minre height 1 minim maxre där <re> och <im> räknas ut med formler så att värdena blir korrekta. Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 13 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 14 / 19 Rita enkel bild Skapa en bildmatris och fyll den med Color-objekt, visa bilden: Color[][] picture = new Color[height][width]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { picture[i][j] = <någon snygg färg som beräknas utgående från värdet på complex[i][j]>; gui.putdata(picture, 1, 1); Börja med att rita en färgad cirkel med olika färger i de olika kvadranterna. Det ger en kontroll av att du har räknat rätt. Rita med olika upplösning Användaren kan välja upplösning (VERY_HIGH, HIGH, MEDIUM, LOW, VERY_LOW). När VERY_HIGH används motsvaras varje pixel i picture-matrisen av en punkt i complex-matrisen. (Det är detta vi använt tidigare.) Med andra upplösningar ska picture-matrisen vara mindre än complex-matrisen. En pixel i picture-matrisen motsvarar till exempel 3 3(HIGH), 5 5(MEDIUM), 7 7(LOW), 9 9(VERY_LOW) punkter i complex-matrisen. Bilden av cirkeln ska bli taggig. Alltså: Hämta upplösningen från användargränssnittet. Beräkna pixelsize (1, 3, 5, 7, 9). Skapa lagom stor picture-matris. Välj rätt punkter i complex-matrisen (se nästa bild). Rita bilden: gui.putdata(picture, pixelsize, pixelsize); Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 15 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 16 / 19

Upplösningsbild, pixelsize = 5 Rita bild av Mandelbrotmängden Bildmatrisen picture Komplexmatrisen complex Välj det mittersta komplexa talet för varje bildelement Generering av bild: for (int i = 0; i <...; i++) { for (int j = 0; j <...; j++) { picture[i][j] = <någon snygg färg som beräknas utgående från värdet på complex[i][j]>; För att rita en svartvit bild av Mandelbrotmängden använder man complex[i][j] som startvärdet c och itererar Mandelbrot-följden. Om följden konvergerar sätter man punkten till svart, annars till vit. Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 17 / 19 Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 18 / 19 Rita färgbild, utökning Bilden blir mycket snyggare om man inte markerar alla punkter där Mandelbrotföljden divergerar med vitt utan med en färg som talar om hur snabbt följden divergerar. Skapa en färgkarta. Jämför med graylevels i laboration 8. Iterera Mandelbrotföljden i varje punkt. Välj färg ur färgkartan utgående från hur många steg man itererade innan man kunde avgöra att följden divergerar. Valfri utökning: Använd Extra-rutan för att mata in data till programmet, till exempel antalet iterationer. Per Holm (Per.Holm@cs.lth.se) Inlämningsuppgift 2, PTDC 2014/15 19 / 19