% Musterlösung
%
% Numerische Mathematik, SS 2013
%
% Momente für kubischen Spline berechnen
%
% Ingolf Busch, Juli 2013

% Input:  x Vektor der Stützstellen [x_0 x_1 ... x_n]
%         y Vektor der Funktionswerten [y_0 y_1 ... y_n]



% Output: mu  Vektor der Momente 

function mu = my_spline_kub(x,y,mode,f0s,fns)

h = x(2:end)-x(1:(end-1));

A = zeros(length(x));
d = zeros(length(x),1);

for i=2:(length(x)-1)
    A(i,i-1) = h(i-1)/6;
    A(i,i)   = (h(i-1)+h(i))/3;
    A(i,i+1) = h(i)/6;
    d(i) = (y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1);
end

switch(mode)
    case 'N'
        A(1,1)=1;
        A(end,end)=1;
    case 'H'
        A(1,1)=h(1)/3;
        A(1,2)=h(1)/6;
        d(1)=(y(2)-y(1))/h(1)-f0s;
        A(end,end-1)=h(end)/6;
        A(end,end)=h(end)/3;
        d(end) = fns - (y(end)-y(end-1))/h(end);
    case 'P'
        A(1,1) = 1;
        A(1,end)=-1;
        A(end,1) = h(1)/6;
        A(end,end-1) = h(end)/6;
        A(end,end) = (h(1)+h(end))/3;
        d(end) = (y(2)-y(1))/h(1)-(y(end)-y(end-1))/h(end);
    otherwise
        A(1,1)=1;
        A(end,end)=1;
end

mu=A\d;