
%splajny kubiczne
graphics_toolkit("gnuplot");
x=[1:4,6]
s=linspace(1,6);
y=[-3 4 5 -2 0];
pp=spline(x,y);
pph=spline(x,[0,y,100]);
plot(x,y,"+",s,ppval(pp,s),";not-a-knot;",s,ppval(pph,s),";herm bnd;")
pause(1);

%B-splajn kubiczny
x=(0:10)-5;
y=zeros(size(x));
y([5 6 7])=[1 4 1];
s=linspace(-5,5);
pp=spline(x,y);
pph=spline(x,[0,y,0]);
plot(x,y,"+",s,ppval(pp,s),";not-a-knot;",s,ppval(pph,s),";herm bnd;")
pause(1);

%splajn bazowy interpolacyjny tzn s(k)=1 s(l)=0 l<>k l,k=0,..,N
x=(0:10)-5;
y=zeros(size(x));
y(6)=1;
s=linspace(-5,5);
pp=spline(x,y);
pph=spline(x,[0,y,0]);
plot(x,y,"+",s,ppval(pp,s),";not-a-knot;",s,ppval(pph,s),";herm bnd;")
pause(1);

%przyklad rungego interpolacja splajnowa

 %przyklad Rungego
  %zbieznosc dla 1/(1+x^2) na [-5,5] na wezlach Czebyszewa
  %a rozbieznosc na rownoodleglych
a=-5;
b=5;
f=@(x) 1.0./(1+x.*x);
df=@(x) (-2*x)./((1+x.*x).*(1+x.*x));
k=1;
n=10;
M=6;
for k=1:M,
   x=linspace(a,b,n+1);
   y=f(x);
   s=linspace(a,b,10000);
   fs=f(s);
   pp=spline(x,y);
   pph=spline(x,[df(a),y,df(b)]);
   pps=ppval(pp,s);
   pphs=ppval(pph,s);
   er=fs-pps;
   erh=fs-pphs;
   if(k<3)
    plot(x,y,"+",s,fs,";f(x);",s,pps,";not-a-knot;",s,pphs=ppval(pph,s),";herm bnd;")
    pause(1);
  else
    opis=[";er n-a-k n=2^",num2str(k),";"];
    plot(s,fs-pps,opis,s,fs-pphs,";er herm bnd;")
    pause(1);
   end
   erR(k++,:)=[n,norm(er,'inf'),norm(erh,'inf')];
   n*=2;
 end
 erR
 erR(1:M-1,2:3)./ erR(2:M,2:3)
 %widac zbieznosc h^4 
 plot(s,df(s),";df;");pause(1);
 %widac ze blad wiekszy tam gdzie pochodna sie zmienia tz 2ga pochodna duza 
 