Programmering (forts), ett simuleringsexempel
Contents
Ett simuleringsexempel
T0 = zeros(5);
T0(2:4,1) = 80; T0(2:4,5) = 100;
T0(1,2:4) = 40; T0(5,2:4) = 20;
T0
T0 =
0 40 40 40 0
80 0 0 0 100
80 0 0 0 100
80 0 0 0 100
0 20 20 20 0
[m,n] = size(T0);
T1 = T0;
for i = 2:m-1
for j = 2:n-1
T1(i,j) = (T0(i-1,j) + T0(i,j+1) + T0(i+1,j) + T0(i,j-1))/4;
end
end
T1
T1 =
0 40 40 40 0
80 30 10 35 100
80 20 0 25 100
80 25 5 30 100
0 20 20 20 0
T = T0;
T = pTemp(T)
T =
0 40 40 40 0
80 30 10 35 100
80 20 0 25 100
80 25 5 30 100
0 20 20 20 0
T1 = T0; T = pTemp(T1);
while max(max(abs(T-T1)))>1e-3
T1 = T;
T = pTemp(T1);
end
T
T =
0 40.0000 40.0000 40.0000 0
80.0000 59.9986 56.7839 67.1415 100.0000
80.0000 63.2125 59.9973 71.7839 100.0000
80.0000 52.8558 48.2125 59.9986 100.0000
0 20.0000 20.0000 20.0000 0
e = ones(9,1);
A = spdiags([-e -e 4*e -e -e],[-3 -1 0 1 3],9,9);
A(4,3) = 0; A(7,6) = 0; A(3,4) = 0; A(6,7) = 0;
b = [120; 40; 140; 80; 0; 100; 100; 20; 120];
x=A\b
x =
60.0000
56.7857
67.1429
63.2143
60.0000
71.7857
52.8571
48.2143
60.0000
imagesc(T0)
imagesc(T0); colorbar
T1 = T0; T = pTemp(T1);
while max(max(abs(T-T1)))>1e-3
imagesc(T,[0 100]);
T1 = T;
T = pTemp(T1);
pause(0.2);
end
disp('Klart');
Klart
clear all; clc; clf;
n = 30;
T0 = zeros(n);
T0(2:n-1,1) = 80; T0(2:n-1,n) = 100;
T0(1,2:n-1) = 40; T0(n,2:n-1) = 20;
T1 = T0; T = pTemp(T1);
p = imagesc(T,[0,100]); colorbar;
while max(max(abs(T-T1)))>1e-1
p.CData = T;
T1 = T;
T = pTemp(T1);
pause(0.1);
end
disp('Klart');
Klart
Ledning till Lab4
type antalgrannar
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
clear all
A = [1 0 2;1 0 0;1 1 1]
A =
1 0 2
1 0 0
1 1 1
antalgrannar(A,2,2,3)
ans =
1
antalgrannar(A,3,1,3)
ans =
0
Rita en startskog
figure(1); clf; hold on
n = 5;
for i = 1:n
for j = 1:n
F(i,j)=fill([i i+1 i+1 i],[j j j+1 j+1],'green');
end
end
A = ones(n,n);
En svart och en gul ruta
A(1,1) = 0;
F(1,1).FaceColor='black';
A(3,4) = 2;
F(3,4).FaceColor='yellow';
Markera brinnande rutor
while 1
[x,y,knapp] = ginput(1);
if knapp ~= 1
break;
end
x = floor(x); y = floor(y);
F(x,y).FaceColor = 'yellow';
A(x,y) = 2;
end
Simulera spridning av branden:
"loopa" igenom alla element i matrisen
Uppdatera till nästa tillstånd i en annan matris, B