a = [4 4 4 4 4 4 4];
c = [-1 -1 -1 -1 -1 -1];
d = [-1 -1 -1 -1 -1 -1];
[a,c,d] = Hausaufgabe4a(a,c,d);

fprintf('Elemente auf der Hauptdiagonale von R\n\n');
disp(a);
fprintf('Elemente über der Hauptdiagonale von R\n\n');
disp(c);
fprintf('Elemente unter der Hauptdiagonale von L\n\n');
disp(d);

b = [2 4 6 8 10 12 22]';
x = Hausaufgabe4b(a,c,d,b);

fprintf('Lösung x=\n\n');
disp(x)

fprintf('\nProbe: A*x-b = \n\n');
a = [4 4 4 4 4 4 4];
c = [-1 -1 -1 -1 -1 -1];
d = [-1 -1 -1 -1 -1 -1];
A = diag(d,-1) + diag(a,0) + diag(c,1);
disp(A*x'-b);
  

% Algorithmus I
% führt LR-Zerlegung einer Tridiagonalmatrix aus
% Eingabe: a: Elemente auf der Hauptdiagonale   
%          c: Elemente über der Hauptdiagonale
%          d: Elemente unter der Hauptdiagonale
% Ausgabe: a: Elemente auf der Hauptdiagonale von R
%          c: Elemente über der Hauptdiagonale von R
%          d: Elemente unter der Hauptdiagonale von L        

function [a,c,d] = Hausaufgabe4a(a,c,d)
% Schleife zum Berechnen der Elemente von L und R
% c muss bei der LR-Zerlegung von Tridiagonalmatrizen nicht
% verändert werden
for i = 2:(length(a))
  d(i-1) = d(i-1)/a(i-1);
  a(i) = a(i) - d(i-1)*c(i-1);
end
end


% Algorithmus II
% berechnet mithilfe der LR-Zerlegung einer Tridiagonalmatrix A
% zu gegebener rechter Seite b die Lösung des Gleichungssystems Ax=b
% Eingabe: Für LR-Zerlegung einer Tridiagonalmatrix A ist
%          a: Elemente auf der Hauptdiagonale von R
%          c: Elemente über der Hauptdiagonale von R
%          d: Elemente unter der Hauptdiagonale von L

%          b: rechte Seite des zu lösenden Gleichungssystems
%
% Ausgabe: x: Lösung des Gleichungssystems

function x=Hausaufgabe4b(a,c,d,b)
% Vorwärtssubstitution durchführen
  y(1) = b(1);
  n = length(a);
  for i = 2:n
    y(i) = b(i) - d(i-1)*y(i-1);
  end;
% Rückwärtssubstitution durchführen
  x(n) = y(n)/a(n);
  for i = (n-1):-1:1
    x(i) = (y(i) - c(i)*x(i+1))/a(i);
  end;
end

% Protokoll der Ausgabe:
% Hausaufgabe4
% Elemente auf der Hauptdiagonale von R
% 
%     4.0000    3.7500    3.7333    3.7321    3.7321    3.7321    3.7321
% 
% Elemente über der Hauptdiagonale von R
% 
%     -1    -1    -1    -1    -1    -1
% 
% Elemente unter der Hauptdiagonale von L
% 
%    -0.2500   -0.2667   -0.2679   -0.2679   -0.2679   -0.2679
% 
% Lösung x=
% 
%     1.0000    2.0000    3.0000    4.0000    5.0000    6.0000    7.0000
% 
% 
% Probe: A*x-b = 
% 
%    1.0e-14 *
% 
%          0
%          0
%    -0.1776
%          0
%          0
%          0
%     0.3553
