%
% Approximation der 2D Poisson-Gleichung mit gemischten Randbedingungen
% mit dem F"unf-Punkte-Stern(Serie 4, Aufgabe 4).
%
% Die Neumann-Randbedingungen sind durch den ZENTRALEN 
% Differenzenquotienten approximiert.
%
% Copyright: T. Mitkova, Oktober 2009
%

clear all
close all

% Modellproblem
solution = inline(..);
f = inline(..);

N = 10; % Anzahl von inneren Gitterpunkten in jeder Richtung

hx = 3/(N+1);
x = ..; % Gitter in x-Richtung 

hy = 2/(N+1);
y = ..; % Gitter in y-Richtung 

% Auswertung der exakten Loesung
u_exact = zeros((N+2)*(N+2), 1);
for i = ..
   for j = ..
     u_exact(..) = ..;
   end
end

% Aufstellung der Matrix A im sparse-Format
A = spdiags(..);

% Aufstellung der rechten Seite
rhs = zeros((N+2)*(N+2), 1);   
for i = ..
    for j = ..
       rhs(..) = feval(..);
   end
end

% Beruecksichtigung der homogenen Dirichlet-Randbedingungen
for i = 1 : ..
    
    % Rand-Teil: x = 1
    A(..) = ..; 
    rhs(..) = ..;
    
    % Rand-Teil: x = 4
    A(..) = ..;
    rhs(..) = ..;
    
end

% Beruecksichtigung der inhomogenen Neumann-Randbedingungen
% durch den ZENTRALEN Differenzenquotienten
for i = ..
    
    % Rand-Teil: y = 0
    A(..) = ..;
    
    % Rand-Teil: y = 2
    A(..) = ..;
end

% Loesung des Gleichungssystem
uh = A\rhs;

err = norm(..)

% Graphische Darstellung der Loesungen
[X,Y] = meshgrid(x,y);

uh = reshape(uh, N+2, N+2);

subplot(2, 1, 1)
mesh(X, Y, uh')
title('Numerische Loesung');
xlabel('x');
ylabel('y');
zlabel('u_{h}')

subplot(2, 1, 2)
mesh(X, Y, solution(X, Y))
title('Exakte Loesung');
xlabel('x');
ylabel('y');
zlabel('u_{exact}')