
%interpolacja lagrange'a i spljanmi kubicznymi

%zad 1 przetestuj interpolcja dla tabelki
%x_k     0  1  2  4 5
%f(x_k)  -1 0  1  2 -3

x=[0 1 2 4 5];
y=[-1 0 1 2 -3];
s=linspace(0,5,1000);
p=polyfit(x,y,length(x)-1);
pp=spline(x,y);
ph=spline(x,[1000 y 0]);
plot(x,y,"+",s,polyval(p,s),";w;",s,ppval(pp,s),";s;");
pause(2);
plot(s,ppval(pp,s),";s;",s,ppval(ph,s),";sh;");pause(2);
%ph splajn interpolacyjny z w brzegowymi Hermite'a s'(a)=1000 i s'(b)=0
%ten pierwszy spowodowal roznice gdy obie pochodne zero
ph=spline(x,[0 y 0]);
plot(s,ppval(pp,s),";s;",s,ppval(ph,s),";sh;");pause(2);


%blad interpolacji wiel lub splajnowej - wezly r-odlegle
%i Czebyszewa (optymalna dla interp. Lagrange'a dla sin(x) na [0,4]

a=0;b=4;
f=@sin;
s=linspace(a,b,1000);fs=f(s);
N=2;
M=4;
for k=1:M,
 wr=linspace(a,b,N+1);
 wc=0.5*(a+b)+0.5*(b-a)*cos((0.5+(0:N))*pi/(N+1));
 pr=polyfit(wr,f(wr),N);
 pc=polyfit(wc,f(wc),N);
 pp=spline(wr,f(wr));
 plot(s,fs,";f;",s,prs=polyval(pr,s),";wr;",s,pcs=polyval(pc,s),";wc;",s,pps=ppval(pp,s),";s;");pause(1);
 er=norm(fs-prs,'inf');
 ec=norm(fs-pcs,'inf');
 es=norm(fs-pps,'inf');
 [N,er,ec,es]
 N++;
end




%blad interpolacji wiel lub splajnowej - wezly r-odlegle
%i Czebyszewa (optymalna dla interp. Lagrange'a dla sin(4x) na [0,4]

a=0;b=4;
f=@(x) sin(4*x);
s=linspace(a,b,1000);fs=f(s);
N=4;
M=8;
for k=1:M,
 wr=linspace(a,b,N+1);
 wc=0.5*(a+b)+0.5*(b-a)*cos((0.5+(0:N))*pi/(N+1));
 pr=polyfit(wr,f(wr),N);
 pc=polyfit(wc,f(wc),N);
 pp=spline(wr,f(wr));
 plot(s,fs,";f;",s,prs=polyval(pr,s),";wr;",s,pcs=polyval(pc,s),";wc;",s,pps=ppval(pp,s),";s;");pause(1);
 er=norm(fs-prs,'inf');
 ec=norm(fs-pcs,'inf');
 es=norm(fs-pps,'inf');
 [N,er,ec,es]
 N++;
end



%blad interpolccji wiel lub splajnowej - wezly r-odlegle
%i Czebyszewa (optymalna dla interp. Lagrange'a dla log(1+x) na [0,10]

a=0;b=10;
f=@(x) log(1+x);
s=linspace(a,b,1000);fs=f(s);
N=4;
M=6;
for k=1:M,
 wr=linspace(a,b,N+1);
 wc=0.5*(a+b)+0.5*(b-a)*cos((0.5+(0:N))*pi/(N+1));
 pr=polyfit(wr,f(wr),N);
 pc=polyfit(wc,f(wc),N);
 pp=spline(wr,f(wr));
 plot(s,fs,";f;",s,prs=polyval(pr,s),";wr;",s,pcs=polyval(pc,s),";wc;",s,pps=ppval(pp,s),";s;");pause(1);
 er=norm(fs-prs,'inf');
 ec=norm(fs-pcs,'inf');
 es=norm(fs-pps,'inf');
 [N,er,ec,es]
 N+=2;
end
%wyniki sugeruja zbieznosc ktora istotnie zachodzi....


%blad interpolccji wiel lub splajnowej - wezly r-odlegle
%i Czebyszewa (optymalna dla interp. Lagrange'a) dla f=1/(1+x^2) na [-5,5]

a=-5;b=5;
f=@(x) 1.0./(1+x.*x);
s=linspace(a,b,1000);fs=f(s);
N=4;
M=6;
for k=1:M,
 wr=linspace(a,b,N+1);
 wc=0.5*(a+b)+0.5*(b-a)*cos((0.5+(0:N))*pi/(N+1));
 pr=polyfit(wr,f(wr),N);
 pc=polyfit(wc,f(wc),N);
 pp=spline(wr,f(wr));
 plot(s,fs,";f;",s,prs=polyval(pr,s),";wr;",s,pcs=polyval(pc,s),";wc;",s,pps=ppval(pp,s),";s;");pause(1);
 er=norm(fs-prs,'inf');
 ec=norm(fs-pcs,'inf');
 es=norm(fs-pps,'inf');
 [N,er,ec,es]
 N+=2;
end
%prosze popatrzyc na skale pionowa...

%rzad zbieznosci interpolacji splajnowej
%liczymy blad w normie sup dla wezlow rownodleglych N+1 e(N)=||s_N-f||_\infty
% potem 2N+1: e(2N)=||s_(2N)-f||_\infty
%i stosunek  e(N)/e(2N)


a=0;b=5;
f=@(x) sin(2*x);
s=linspace(a,b,1000);fs=f(s);
N=4;
M=13;
es=inf; 
er=zeros(M,1);
for k=1:M,
 wr=linspace(a,b,N+1);
 pp=spline(wr,f(wr));
 pps=ppval(pp,s);
 esp=es;
 es=norm(fs-pps,'inf');
 if(k>1)
 % [N,es,esp/es]
 end
 er(k)=es;
 N*=2;
end
%stosunek bledow - o ile razy malej gdy krok h/2
disp("war brzegowe not-a-knot stosunek bledow - o ile razy malej gdy krok h/2");
rn=er(1:M-1)./er(2:M)

%interpolacja hermitowska tj znamy pochodne w koncu
df=@(x) 2*cos(2*x);
N=4;
M=13;
es=inf; 
eh=zeros(M,1);
for k=1:M,
 wr=linspace(a,b,N+1);
 pp=spline(wr,[df(a),f(wr),df(b)]);
 pps=ppval(pp,s);
 esp=es;
 es=norm(fs-pps,'inf');
 if(k>1)
 % [N,es,esp/es]
 end
 eh(k)=es;
 N*=2;
end
disp("war brzegowe Hermitowskie stosunek bledow - o ile razy malej gdy krok h/2");
rh=eh(1:M-1)./eh(2:M)


