clear all;
n=20;
%
% function y=hat(x,a,b,c)
% if x>a & x<b
%     y=1/(b-a)*(x-a);
% elseif x>=b & x<c
%         y=1/(b-c)*(x-c);
%     else y=0
% end
% end
% %define a hat function
h=rand(n-1,1)+0.01;
h=h/sum(h);
%random intervals
x(1)=0;x(n)=1;
for i=1:n-2,
    x(i+1)=x(i)+h(i)
end
%define x_{i}'s

A=zeros(n-2);

for i=1:n-2
    for j=1:n-2
        if i==j & j>=2 & j<=n-3
            A(i,j)=1/(x(i+1)-x(i))+1/(x(i+2)-x(i+1));
        elseif i==j==n-2
            A(i,j)=1/(x(n-1)-x(n-2))+1/(1-x(19))
        elseif i==j==1
            A(i,j)=1/x(2)+1/(x(3)-x(2))
        elseif i==j+1
            A(i,j)=-1/(x(i+1)-x(i));
        elseif i==j-1 & j>=2
            A(i,j)=-1/(x(i+2)-x(i+1));
        end
    end
end
%matrix A

B=zeros(n-2,1);

for j=1:n-2
      if j>=2
          B(j,1)=(pi^2)*sin(pi*x(j+1))/2;
      elseif j==1
          B(1,1)=(pi^2)*sin(pi*x(2))/2;
      end
end
%matrix B

 

 

u=inv(A)*B;

%approaximated values


v=(pi)^2*sin(pi*x)

%true values
u = [0 u' 0];

%plot
plot(x,u,'k--',x,v,'o--')