function ssp
	clc;
	
	% 1D-Brownsche Bewegung als limit des simple random walk
	figure('Name','D-Brownsche Bewegung als Limes des simple random walk','NumberTitle','off')
	hold on
	[t zt] = SimpleRandomWalk(  10, 1);
	plot(t,zt,'r');
	[t zt] = SimpleRandomWalk( 100, 1);
	plot(t,zt,'g');
	[t zt] = SimpleRandomWalk(1000, 1);
	plot(t,zt,'b');
	title('Random Walk')
	xlabel('Zeit t')
	ylabel('RW')
	hold off
	
	disp('Weiter mit Tastendruck...');
	pause
	
	% Standard-Brownsche Bewegung
	[t B] = SBM(0, 1000, 1);
	figure('Name','Standard-Brownsche Bewegung','NumberTitle','off')
	plot(t,B)
	title('Standard-Brownsche Bewegung')
	xlabel('Zeit t')
	ylabel('SBM')
	
	disp('Weiter mit Tastendruck...');
	pause
	
	% 2D Brownsche Bewegung
	n=100;
	[Bx By] = SBM2d(n);
	figure('Name','2dim-Brownsche Bewegung (linear interpoliert)','NumberTitle','off')
	hold on
	plot(Bx,By,'-bo')
	title('Zweidimensionale Brownsche Bewegung')
	
	plot(Bx(1),By(1),'og','MarkerFaceColor','g','MarkerSize',6)
	plot(Bx(n),By(n),'or','MarkerFaceColor','r','MarkerSize',6)
	text(-0.05,0.05,'Start')
	text(Bx(n)-0.05,By(n)+0.05,'Ende')
	hold off
	
	disp('Weiter mit Tastendruck...');
	pause
	
	% SBM nach Levy
	LevyKonstruktion(10);
	
	disp('Weiter mit Tastendruck...');
	pause
	
	% Diffusionsprozess
	[t D] = diffusion(0,10000,5,-1, 1);
	figure('Name','Diffusionsprozess','NumberTitle','off')
	plot(t,D)
	title('Diffusionsprozess')
	xlabel('Zeit t')
	ylabel('D')
	
	disp('Weiter mit Tastendruck...');
	pause
	
	% means and bounds (Diffusionsprozess)
	D0=0;
	mu=-1;
	sigma=1;
	T=5; 
	n=10000;
	
	[t D1] = diffusion(D0,n,T,mu, sigma);
	[t D2] = diffusion(D0,n,T,mu, sigma);
	[t D3] = diffusion(D0,n,T,mu, sigma);
	
	mean = D0+mu*t;
	upbound = D0+mu*t+sigma*sqrt(t);
	lobound = D0+mu*t-sigma*sqrt(t);
	
	figure('Name','Diffusionsprozess','NumberTitle','off')
	hold on
	title('Diffusionsprozess')
	xlabel('Zeit t')
	ylabel('D')
	plot(t,D1,'b')
	plot(t,D2,'g')
	plot(t,D3,'k')
	
	plot(t,lobound,'-r')
	plot(t,upbound,'-r')
	plot(t,mean,'-b')

end

%% Definitionen der einzelnen Funktionen

function [t  zt] = SimpleRandomWalk(n, T)
    % Simple Random Walk
    % T Zeithorizont, n Anzahl der Zeitpunkte
    dt = T/n;
    t = [0:dt:T];
    z = 1/sqrt(n+1) * (2*( rand(1,n+1)>0.5 )-1);
    z(1) = 0;
    zt = cumsum(z);
end      

function [t  zt] = SBM(x0, n, T)
    % Simuliert den Pfad einer Standard Brownian Motion
    % T Zeithorizont, n Anzahl der Zeitpunkte
    % x0 Startpunkt
    dt = T/n;
    t = [0:dt:T];
    z = 1/sqrt(n+1)*normrnd(0, 1, 1, n+1);
    z(1) = x0;
    zt = cumsum(z);
end

function [Bx By] = SBM2d(n)
    % 2D Brownsche Bewegung
    x = normrnd(0,1/sqrt(n), 1, n);
    y = normrnd(0,1/sqrt(n), 1, n);
    Bx = zeros(1,n+1);
    By = zeros(1,n+1);
    Bx(2:n+1) = cumsum(x);
    By(2:n+1) = cumsum(y);
end

function LevyKonstruktion(H)  
    % Konstruktion einer SBM nach L�vy
    B=zeros(1,2);    
    B(2)=0+normrnd(0,1);
    
    figure('Name','Levy SBM','NumberTitle','off')
    hold on
    hold all
    colormap(jet);
    title('Levy-Konstruktion der  Brownsche Bewegung')
    xlabel('Zeit t')
    plot(linspace(0,1,2),B,'-')
    for i = 2:H   
        old=B;
        for t =1:(2^(i-2))   
            B(2*t-1)=old(t);
            B(2*t)  =normrnd(0.5*(old(t)+old(t+1)), (1/(sqrt(2)^i)));
        end
        B(2^(i-1)+1)=old(2^(i-2)+1);  
        plot(linspace(0,1,2^(i-1)+1),B,'-')
        pause(0.5)    
    end
    plot(linspace(0,1,2^(H-1)+1),B,'-r')
    hold off
end

function [t  zt] = diffusion( x0, n, T, mu, sigma)
	% Simuliert den Pfad von einem Diffusionsprozess
    dt = T/n;
    t = [0:dt:(n*dt)];
    z = mu*dt + sigma*sqrt(dt)*normrnd(0, 1, 1, n+1);
    z(1) = x0;
    zt = cumsum(z);
end 

