Programmeringsuppgift Game of Life

Relevanta dokument
LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

Matriser och Inbyggda funktioner i Matlab

Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Mer om funktioner och grafik i Matlab

Grafik och Egna funktioner i Matlab

Introduktion till Matlab

AGENTBASERAD MODELLERING

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Grafritning och Matriser

Linjära ekvationssystem

Programmering. Analogt och med smårobotar. Nina Bergin

Linjär algebra. 1 Inledning. 2 Matriser. Analys och Linjär Algebra, del B, K1/Kf1/Bt1. CTH/GU STUDIO 1 TMV036b /2013 Matematiska vetenskaper

Geometriska transformationer

Linnéuniversitetet Matematik Hans Frisk

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

Matriser och Inbyggda funktioner i Matlab

Blockly är en av apparna som används för att styra roboten Dash. Den är väldigt enkel i sin utformning och kan med fördel användas av yngre barn.

Parametriserade kurvor

Matriser och vektorer i Matlab

Laboration: Grunderna i MATLAB

Transformationer i R 2 och R 3

Mer om funktioner och grafik i Matlab

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Beräkningsverktyg HT07

Datorövning 1 Fördelningar

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Introduktion till Matlab

Extramaterial till Matematik X

Matriser och vektorer i Matlab

Vetenskapsdagen 2016 SciLab för laborativa inslag i matematik eller fysik

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Introduktion till MATLAB

Funktioner och grafritning i Matlab

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Kort om programmering i Matlab

Linjära system av differentialekvationer

CTH/GU LABORATION 1 MVE /2013 Matematiska vetenskaper. Mer om grafritning

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 1-3. Maria Johansson, Ulrica Dahlberg

Programmering. Scratch - grundövningar

Laborationstillfälle 1 Lite mer om Matlab och matematik

Nonogram

Platonska kroppar med Matlab

Tynker gratisapp på AppStore

Minsta-kvadratmetoden

Flervariabelanlys och Matlab Kapitel 4

ENKEL Programmering 3

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Programmering eller Datalogiskt tänkande

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

Sphero SPRK+ Appen som används är Sphero Edu. När appen öppnas kommer man till denna bild.

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

MMA132: Laboration 2 Matriser i MATLAB

Matlabövning 1 Funktioner och grafer i Matlab

Introduktion till Matlab

Genetisk programmering i Othello

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

% Föreläsning 4 22/2. clear hold off. % Vi repeterar en liten del av förra föreläsningen:

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Optimeringsproblem. 1 Inledning. 2 Optimering utan bivillkor. CTH/GU STUDIO 6 TMV036c /2015 Matematiska vetenskaper

MATLAB. Introduktion. Syfte. Tips. Oktober 2009

Matlabövning 1 Funktioner och grafer i Matlab

Datorövning 1: Fördelningar

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 13:e januari klockan

Linjära ekvationssystem i Matlab

Numeriska metoder, grundkurs II. Dagens program. Gyllenesnittminimering, exempel Gyllenesnittetminimering. Övningsgrupp 1

Uppgift 1 ( Betyg 3 uppgift )

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

[][] Arrayer med två index

Studio 6: Dubbelintegral.

(a) Skriv en matlabsekvens som genererar en liknande figur som den ovan.

TDIU01 - Programmering i C++, grundkurs

4 Numerisk integration och av differentialekvationer

TANA17 Matematiska beräkningar med Matlab

Matriser och linjära ekvationssystem

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

Linjära ekvationssystem

Linjärisering och Newtons metod

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Grunderna i programmering loopar (lektion 2 av 5)

linjära ekvationssystem.

Programmering i Matlab

Matriser och linjära ekvationssystem

Integraler undersökande arbetssätt med GeoGebra. S. Mehanovic och P. Jönsson

JavaScript Block Editor:

Magnus Nielsen, IDA, Linköpings universitet

Flervariabelanalys och Matlab Kapitel 4

Tentamen Datastrukturer för D2 DAT 035

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Ordinära differentialekvationer (ODE) 1 1

Funktionsytor och nivåkurvor

Tränarguide del 2. Mattelek.

Introduktion till Matlab

Numeriska metoder, grundkurs II. Dagens program. Exempel Kubiska splines. Ögna igenom de gamla övningsanteckningarna.

Introduktion till Matlab

Newtons metod. 1 Inledning. 2 Newtons metod. CTH/GU LABORATION 6 MVE /2013 Matematiska vetenskaper

Transkript:

CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade mönster kan uppstå från väldigt enkla regler. Fenomenet som kallas emergens har betydelse inom fysikaliska och biologiska system. Det finns mycket material att finna på internet för den intresserade. Den engelske matematikern John Conway har utvecklat en välkänd cellulär automat som kallas Game of Life som har att göra med liv och död hos celler i en rektangulär värld. Uppgift Detta är en variant av Game of Life och syftet är att öva på programmering, inte att förstå cellulära automater. Vi tänker oss en kvadratisk värld beståe av ett rutnät med säg 0 0 rutor. Utgåe från en startgeneration, så bildas nästa generation enligt reglerna: En levande cell lever vidare om två eller tre av dess grannar är levande annars dör den. En tom cell blir levande om tre av cellens grannar är levande. Med grannar till en viss cell avses celler som har kant eller hörn gemensamt med cellen. Generera ett rutnät där du kan markera en startgeneration. Föl t.ex. 0 generationer, lägg in en kort paus mellan uppritning av de olika generationerna. Generation 0 Generation Generation Generation Skriv en funktionsfil som löser uppgiften på ett enkelt och bra sätt.

Redovisning Programmet skall visas upp för handledaren vid datorn och köras med någon rolig startgeneration. Man måste kunna förklara detaler i sitt program och visa förståelse av algoritmen och programmet. Detta gäller samtliga i gruppen. Däremot krävs ingen skriftlig redovisning. Förberedande övningar Vi tittar lite extra på generationsväxlingen. Nästa generation bildas enligt reglerna: En levande cell lever vidare om två eller tre av dess grannar är levande annars dör den. En tom cell blir levande om tre av cellens grannar är levande. Ta bilden nedan som hälp för att tänka igenom vilka celler som förblir levande, var liv uppkommer och vilka celler som dör. Generation 0 Generation Om vi tänker oss världen som en spelplan, där vi markerat liv som ovan, så kan vi inte ändra några markeringar för att visa nästa generation förrän vi vet hur hela världen ser ut (vid nästa generation). Detta beror på att en cell är granne till sina grannar. Här föler några övningar för att komma igång. Övning. Låt n = 0. Rita en vit n n kvadrat med ett rutnät på, som på bilden ovan. Använd fill, plot och axis på lämpligt sätt. Övning. Bilda lämpliga matriser för att lagra information om var det finns liv. Det behövs en för nuvarande generation och en för nästa. Övning. Gör en kommando-sekvens som gör det möligt att markera levande celler, för att ge en startgeneration. Använd ginput och fill. Övning. Gör en funktion som räknar en cells levande grannar. Använd sum. Efter de förberedande övningarna är det dags att sätta ihop dem och göra färdigt funktionen för Game of Life. En liten paus mellan generationsväxlingarna fås med pause, se hälptexten.

Lösningar till förberedande övningar Övning. Vi ritar en bild av världen cellerna figure(), clf fill([ n+ n+ ],[ n+ n+], w ) axis equal, axis([ n+ n+]) hold on for k=:n+ plot([ n+],[k k]) plot([k k],[ n+]) 9 8 7 6 6 8 När vi är klara med hela programmet kommer vi lägga till axis off efter axis equal så att skalorna på axlarna (siffrorna) inte syns. Övning. En matris V får sköta bokföringen av var det finns liv och inte. I bilden nedan till vänster har vi markerat liv i en cell, horisontell position i vertikal position. I matrisen V låter vi element V(i,) beskriva denna position. Vi låter värdet motsvara liv och värdet 0 motsvara avsaknad av liv. n+ n Cellerna cell (i,) n Matrisen V elementet V(i,) + i i+ n n+ i n Vi behöver en matris för nuvarande generation och en för den nya. Med zeros får vi matriser fyllda med nollor (dvs. avsaknad av liv). Vi börar u med en öde värld. V=zeros(n,n); Vny=zeros(n,n);

Övning. Ganska likt sista uppgiften på senaste studio-övningen. while [i,,knapp]=ginput(); i=floor(i); =floor(); if Knapp== V(i,)=; fill([i i+ i+ i],[ + +], k ) else break 9 8 7 6 6 8 Samtidigt som vi fyller cellen med svart för att markera liv, sätter vi in värdet på motsvarande plats i matrisen. Övning. Vi skall räkna antal grannar. Antag att vi ser på cell i,. Cellen är svart markerad i figuren och dess grannar är markerade med grönt. Om cellen är levande eller inte får vi veta genom att se på matriselemenet V(i,) Grannar Grannar olika fall i i i+ + Antag vi vill ta reda på hur många grannar till en cell V(i,) som har liv. Om vår cell ligger i det inre, dvs. om alla dess grannar ligger i världen, så gäller att blocket V(i-:i+,-:+) beskriver vår cell och dess grannar och vi får antal levande grannar med antal=sum(sum(v(i-:i+,-:+)))-v(i,)

För att klara av fallen med att vår cell ligger längs en kant eller i ett hörn gör vi två index-vektorer igrannar och grannar. T.ex. om i- ligger utanför till vänster om världen så skall vi bara gå till horisontell position. Vi tar därför gränsen åt vänster i horisontell riktning som max(,i-). På motsvarande sätt för de övriga riktningarna. Med dessa indexgränser klarar vi alla fall och vi beräknar antal grannar med igrannar=max(,i-):min(n,i+) grannar=max(,-):min(n,+) antal=sum(sum(v(igrannar,grannar)))-v(i,) Vi packeterar det hela i en funktion enligt function antal=raeknagrannar(v,i,,n) igrannar=max(,i-):min(n,i+); grannar=max(,-):min(n,+); antal=sum(sum(v(igrannar,grannar)))-v(i,);