clear all; close all; clf
n=100;
x=linspace(0,1,n);
h=rand(n-1,1)+0.001;
h=h/sum(h);
for i=1:n-1
    x(i+1)=x(i)+h(i);
end;

for i=1:n-2
    for j=1:n-2
        if i==j
            A(i,j)=(1/h(i))+(1/h(i+1));
        elseif i==j+1 || i==j-1
            A(i,j)=-1/h(max(i,j));
        end
    end
end
for i=1:n-2
    s(i) = h(i)*sin(pi*x(i))/2 + h(i)*sin(pi*x(i+1))/2 + h(i+1)*sin(pi*x(i))/2 + h(i+1)*sin(pi*x(i+1))/2;
    %    s(i)=pi^2*(h(i)+h(i+1))*(sin(x(i+1)))/2
end
s=pi^2*s/2;
u=inv(A)*s';

for i=1:n-2
    y(i)=hat(x(i+1),x(i),x(i+1),x(i+2));
end
y = [0 y 0];
u=[0 u' 0];
for i=1:n
 f(i)=(u(i)*y(i));
end
t=linspace(0,1,20);
plot(t,sin(pi*t),'go-',x(1:end),f(1:end),'b*-')
grid on