function [pp]=cspliner(x,y,ypn)
n = length(x);
g = zeros(n,1);
h = zeros(n,1);
s1= zeros(n,1);
s2= zeros(n,1);
dh= ones(n,1);
dn1= zeros(n-1,1);
t =1;
s= y';
v = x';
for j=2:n
h(j) = x(j)-x(j-1);
end

dn = h(2:n)./6; %untere Nebendiagonale
dn1(2:n-1) = h(3:n)./6 ; % obere Nebendiagonale
dh(2:n-1) = (h(2:n-1) + h(3:n))./3;  dh(n)= h(n)./3;  %Hauptdiagonale

M = diag(dn,-1) + diag(dh) + diag(dn1,1);  %Matrix zur Bestimmung der s''
for i=2:n-1
g(i) = (((s(i+1)- s(i))/h(i+1))-((s(i)-s(i-1))/h(i)));  %Rechter Teil des Gleichungssystems M*s2=g
end
g(n)= ypn - ((s(n)-s(n-1))/h(n));  g(1) = 0; % geben das dn, sowie s''(x0)=0  

s2 = M\g;  %Lösen des Gleichungssystems

s1(n)= ypn;    
s1(2:n-1) = (s(2:n-1)-s(1:n-2))./h(2:n-1) + s2(1:n-2).*h(2:n-1)./6 + s2(2:n-1).*h(2:n-1)./3;  % Bestimmen der s'

a = ((s2(2:n)-s2(1:n-1))./(6.*h(2:n))); %Bestimmen der Koeffizienten in Klammern der s(x) steht (x-h(i)) zwecks anpassung für mkpp durch addition von x(i-1) 
b = (s2(2:n)./2 - ((s2(2:n)-s2(1:n-1))./(2.*h(2:n))).*h(2:n));
c = (s1(2:n) - s2(2:n).*h(2:n) + ((s2(2:n)-s2(1:n-1))./(2.*h(2:n))).*((h(2:n)).^2));
d = (s(2:n) - s1(2:n).*h(2:n) + (s2(2:n)./2).*((h(2:n)).^2) - ((s2(2:n)-s2(1:n-1))./(6.*h(2:n))).*((h(2:n)).^3));

pp = mkpp(x,[a b c d]);
end
