Lösningar till förberedande övningar
Contents
Övning 1
n = 25; figure(1); clf; hold on fill([1, n+1, n+1, 1],[1, 1, n+1, n+1],'green') axis equal, axis([1,n+1,1,n+1]) for k = 1:n+1 plot([1 n+1],[k k],'black') plot([k k],[1 n+1],'black') end % När vi är klara med hela programmet kommer vi lägga till % axis off efter axis equal, så att skalorna på axlarna inte syns

Övning 2
% En matris A får sköta bokföringen av cellernas status, vi låter % element A(i,j) beskriva status för cellen på position (i,j) i skogen. % Vi låter 0 motsvara 'ingeting som kan brinna', 1 motsvarar att 'cellen % kan börja brinna och 2 motsvarar 'cellen brinner'. Vi behöver två % matriser, en för nuvarande tidssteg och en för nästa. % Med ones får vi matriser fyllda med 1:or, sedan kan vi fylla på med % några 0:or för att markera var det inte kan börja brinna. A = ones(n,n); Any = A;
Övning 3
% Med [x,y,b] = ginput(1) läser man in koordinater för en punkt och får % samtidigt reda på vilken musknapp det trycktes på. Vänster musknapp ger b % värdet 1, mellersta ger b värdet 2, osv. Trycker vi på vänster musknapp % ska vi markera att cellen brinner, annars bryter vi. Vi ser också till % att bara celler som kan börja brinna brinner. while 1 [x,y,b] = ginput(1); x = floor(x); y = floor(y); if b == 1 if A(x,y)~=0 A(x,y) = 2; fill([x, x+1, x+1, x],[y, y, y+1, y+1],'yellow') end else break; end end

Övning 4
% Vi ska räkna antalet brinnande grannar (antalet grannar som har värdet % 2). Antag vi ser på cell (i,j). Om cellen kan börja brinna får vi reda på % genom att se på matriselementet A(i,j). Nu vill vi veta hur många grannar % till en cell A(i,j) som har värdet 2. Om vår cell ligger i det inre, dvs % om alla grannar finns representerade i matrisen, så gäller att blocket % (delmatrisen) A(i-1:i+1,j-1:j+1) innehåller vår cell och dess grannar, vi % antalet brinnande grannar med % antal = sum(sum(A(i-1:i+1,j-1:j+1)==2))-1 om A(i,j) == 2 % antal = sum(sum(A(i-1:i+1,j-1:j+1)==2)) om A(i,j) ~= 2 % 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å indexvektorer, igrannar och jgrannar. Tex om i-1 % ligger utanför eller till vänster om skogen ska vi bara gå till % horisontell position 1. Vi tar därför gränsen åt vänster i horisontell % riktning som max(1,i-1). På motsvarande sätt för de övriga riktningarna. % Med dessa indexgränser klarar vi alla fall och vi beräknar antalet % grannar med % %igrannar = max(1,i-1):min(n,i+1); %jgrannar = max(1,j-1):min(n,j+1); %if A(i,j) == 2 % antal = sum(sum(A(igrannar, jgrannar)==2))-1; %else % antal = sum(sum(A(igrannar, jgrannar)==2)); %end % Vi skriver det hela fom en funktion enligt type antalgrannar.m
function antal = antalgrannar(A,i,j,n) igrannar = max(1,i-1):min(n,i+1); jgrannar = max(1,j-1):min(n,j+1); if A(i,j) == 2 antal = sum(sum(A(igrannar, jgrannar)==2))-1; else antal = sum(sum(A(igrannar, jgrannar)==2)); end