%%%%%%%%%%%%%%%%%%%%%%% Aufgabe 5 ->function heat.m <-%%%%%%%%%%%%%%%%%%%%%%%%%%

function [A,q,x] = heat(fun,N)
% Funktion erzeugt Matrix A, rechte Seite q und Stuetzstellen x,
% die bei der Diskretisierung von d^2 T / dx^2 = -q mit T(0)=T(1)=0
% auf dem Intervall [0,1] mit N Stuetzstellen entsteht, dh.
%    0 = x_1 < x_2 < .... < x_N = 1.
% Aufruf:
%   [A,q,x] = heat(fun,N)
%   fun ist der Functionsname in einfachen Anfuehrungszeichen, z.B.
%       'sin' oder fuer die Aufgabe 'quelle1', 'quelle2'.
%   N   ist die Anzahl der Stuetzstellen MIT Randpunkten!

dx = 1/(N-1);			% Bei N Stuetzstellen (N-1) Zwischenraeume!
x  = [0:dx:1];         
                                % Matrix aufbauen:
                                
A = (diag(-2*ones(N,1))+diag(ones(N-1,1),1)+diag(ones(N-1,1),-1)) / (dx*dx);

%e = ones(N,1)/ (dx*dx);                  % 'sparse'
%A = spdiags([e -2*e e], -1:1, N, N);     %  Aufbau

q = -feval(fun, x)';             % rechte Seite als Spaltenvektor aufbauen

A(1,1:2)     = [1 0];  q(1) = 0; % Randbedingungen beruecksichtigen
A(N,[N-1:N]) = [0 1];  q(N) = 0;
