% Lösen eines linearen Gleichungssystems
% ----------------------------------------------------------------
 
clc;
close all;
clear all;
 
N = 150;
my = 0.00025;
 
% Eingabedaten, v verrauscht
% ----------------------------------------------------------------
ustar = [zeros(round(N/2),1); ones(N+1-round(N/2),1)];
v = ustar + 0.1*randn(N+1,1);
 
% Implementierung der Diagonalmatrix D
% ----------------------------------------------------------------
D = zeros(N+1,N+1);
D(1,1) = 1;
D(N+1,N+1) = 1;
D(1,2) = -1;
D(N+1,N) = -1;
 
for k = 2:1:N              % Zeilen  
    D(k,k-1) = -1;   
    D(k,k) = 2;
    D(k,k+1) = -1;  
end
 
h = 1/N;
I = eye(N+1); 
 
% Abschätzung
% ----------------------------------------------------------------
u = ((my/h^2)*D + I)\v;
 
 
% Gitter
% ----------------------------------------------------------------
x = linspace(0,1,N+1); % erzeugt einen zeilenvektor mit Einträgen zwischen 0 und 1 und Länge n+1
 
% Graphische Darstellung
% ----------------------------------------------------------------
figure()
 
plot(x, v, '-r', 'LineWidth', 1.5)
hold on
plot(x, u, '-b', 'LineWidth', 1.5)
plot(x, ustar, '-g', 'LineWidth', 2.5)
hold off
legend('v', 'u', 'u*')
title('Treppenfunktion mit Abschätzung und Verrauschung')
xlabel('Zeit/s')
ylabel('Amplitude/u.a.')


