function coeff=coeff_spline(t,y,kind,param)

n=length(t);

% Berechnung des "Kerns" von A und b
h1=t(2:n)-t(1:n-1);
h2=t(3:end)-t(1:end-2);
h1 = h1(:);
h2 = h2(:);
y = y(:);

B=[h1,[2*h2;0],[h1(2:end);0]];



A=sparse(n,n);
b=zeros(n,1);

% TO DO: 
% Matrix A fuellen(spdiags, nur Zeile 2 bis n-1)
% Vektor b fuellen (nur Zeilen 2 bis n-1)
% Siehe Bem. 4.4.3



% Erweiterung von A und b fuer unterschiedliche Randbedingungen
switch kind
    case 'nat'
      % TO DO: Rest von A und b fuellen 
    case 'per'
    if y(1)~=y(end)
        error('This data is not applicable for periodic splines')
    end
    % TO DO: Rest von A und b fuellen 
        A(1,1) = 2*(h1(1)+h1(end));
        A(1,2) = h1(1);
        A(1,end) = h1(end);
        A(end,1) = h1(1);
        A(end,end-1) = h1(end-1);
        A(end,end) = 2*(h1(end-1)+h1(end));
        b(1) = 6/(h1(1))*(y(2)-y(1)) - 6/h1(end)*(y(1)-y(end));
        b(end) = 6/h1(end)*(y(1)-y(end)) - 6/h1(end-1)*(y(end)-y(end-1));
    case 'compl'
    % TO DO: Rest von A und b fuellen 
        A(1,1) = 2*h1(1);
        A(1,2) = h1(1);
        b(1)   = 6/h1(1)*(y(2)-y(1)) - 6*param(1); %param(1) = f'(a)
        A(end,end-1) = h1(end);
        A(end,end)   = 2*h1(end);
        b(end)       = -6/h1(end)*(y(end)-y(end-1)) + 6*param(2); %param(2) = f'(b)
    otherwise
    error('This kind does not exist!')
end

full(A)
b

% Berechnung der y''
y2d=A\b;

% Berechnung der Koeffizienten a,b,c,d
% TO DO: Berechne Matrix A aus Aufgabenteil (i)

coeff = zeros(4,n-1);
for i = 1:n-1
    coeff(1,i) =  y(i); %di
    coeff(2,i) =  (y(i+1)-y(i))/h1(i) - h1(i)/6*(y2d(i+1)+2*y2d(i)); % ci
    coeff(3,i) =  0.5*(y2d(i)); %bi
    coeff(4,i) =  1/(6*h1(i)) * (y2d(i+1)-y2d(i)); %ai 
end

