clear all;

%---Variablen festlegen
N=20;
h=1/N;
h_euler=(h^2)/5;

dim_A=(N-1)^2;
%------------------------

%---Endzeitpunkt der DGL
t_vorg=.08;
%----------------------

%---Definition der Finite-Differenzen-Matrix---
A=(1/h^2)*((-4*eye(dim_A))+diag(ones(dim_A-1,1),1)+diag(ones(dim_A-1,1),-1)+diag(ones(dim_A-(N-1),1),N-1)+diag(ones(dim_A-(N-1),1),-(N-1)));
for i=1:N-2
    A((N-1)*i+1,(N-1)*i)=0;
    A((N-1)*i,(N-1)*i+1)=0;
end
%---------------------------------------------

%---Setzen von u(0)----------
u = zeros(dim_A,1);
anf=round(.4/h);
ende=round(.6/h);
for i= anf:ende
    for j=anf:ende
        u((N-1)*(i-1)+j,1)=1;
    end
end
%---------------------------

%Erzeugung der Matrix M, in der der Film gespeichert wird:
bilder = length([0:h_euler:t_vorg]) %Anzahl der Bilder, die erzeugt werden;
M = moviein(bilder);
set(gca,'NextPlot','replacechildren');   %Ausgabe umlenken
%---------------------------------------------------------

t=0;
k=0; % Zaeher fuer die Anzahl der bilder im Film

while (t<t_vorg)
    k=k+1;
    %---Umspeichern des Vektors u in eine Matrix fuer die Ausgabe
    Z = zeros(21,21);
    for i=1:19
        for j=1:19
            Z(i+1,j+1)=u((i-1)*19+j,1);
        end
    end
    %---------------------------------------------------------------
    
    %Ausgabe:
    [X,Y]=meshgrid([0:.05:1],[0:.05:1]);
    surf(X,Y,Z)
    axis([0 1 0 1 0 1]) % X-, Y- und Z-Achse gehen von 0 bis 1
    caxis([0 1]) % Damit bleiben die durch eine Farbe dargestellten Werte konstant auf allen Bildern
    M(:,k)=getframe; %Das Bild wird in der Matrix gespeichert
    %-------------------------------------------------------------
    
    %---Loesung der DGL mit dem expliziten Euler
    u = (eye(dim_A)+h_euler.*A)*u;
    t = t + h_euler;
    %---------------------------------------------------------------
end

%Abspielen des 'Films':
movie(M);
%---------------------------

%--um eine AVI-Datei zu erstellen:
%movie2avi(M,'dateiname.avi');
%----------------------------------