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--')