%% Simulation der (abgebrochenen) Karhunen-Loeve-Entwicklung der Brownschen Brücke
%
clear all; clc;

%% (c) Simulation der (abgebrochenen) Karhunen-Loeve-Entwicklung der Brownschen Brücke
dx = 0.0001;
x = 0:dx:1;
nx = length(x);

% Erzeugen von 3 Realisierungen der 1000 Zufallsvariablen aus der KL
Xi = randn(3, 1000);
figure();
for i = 1:3,
    % Anzahl der Terme in der KL
    M = 10^i;
    
    % 3 Realisierungen erzeugen
    BM = zeros(3,nx);
    for m = 1:M,
       BM = BM + sqrt(2)/m/pi * Xi(:,m) * sin(m*pi*x); 
    end
    
    subplot(3,1,i);
    plot(x, BM,'-','LineWidth',2)
    title(sprintf('Realisierungen mit M = %i KL-Termen',M))
    set(gca,'FontSize',22)
end


%% (e) Simulation der (abgebrochenen) Karhunen-Loeve-Entwicklung von C = Laplace^{-\alpha}
dx = 0.0001;
x = 0:dx:1;
nx = length(x);

% Erzeugen von 3 Realisierungen der 1000 Zufallsvariablen aus der KL
Xi = randn(3, 1000);

figure();
alphas = [0.75, 1, 1.5, 2];
for i = 1:4,
    alpha = alphas(i);
    for j = 1:3,
        % Anzahl der Terme in der KL
        M = 10^j;

        % 3 Realisierungen erzeugen
        BM = zeros(3,nx);
        for m = 1:M,
           BM = BM + sqrt(2)/( (m*pi)^alpha ) * Xi(:,m) * sin(m*pi*x); 
        end

        subplot(3, 4, i+4*(j-1));
        plot(x, BM,'-','LineWidth',2)
        title(sprintf('Realisierungen mit M = %i KL-Termen, alpha = %.2f',M,alpha))
%        set(gca,'FontSize',22)
    end
end

% Kovarianzfunktionen
dx = 0.01;
x = 0:dx:1;
nx = length(x);
[XX,YY] = meshgrid(x,x);

figure();
alphas = [0.75, 1, 1.5, 2];
for i = 1:4,
    alpha = alphas(i);
    C = zeros(nx,nx);
    for m = 1:1000,
        C = C + 2 * (m*pi)^(-2*alpha) * sin(m*pi*XX) .* sin(m*pi*YY); 
    end
    subplot(2, 2, i);
    surf(XX, YY, C,'LineStyle','none')
    title(sprintf('Kovarianzfunktion fuer alpha = %.2f',alpha))
    xlabel('x'); ylabel('y')
    colorbar();
    %view(2)
    set(gca,'FontSize',22)
end

    
