%interpolacja funkcji 3^x metoda wielomianu bezposredniego w punktach  -1, 0, 1
close all;
clear
x=[-1 0 1];y=3.^x;
%A=[1-1 1;1 0 0;1 1 1]; poniewaz macierz jest niewilka latwo ja utworzyc recznie ale prze wiekszej liczbie punktow
%interpolacji moze to byc klopotliwe. W MATLABie istnie funkcja, ktora ulatwia 
%towrzenie macierz Vandermonde'a
%A=[ones(size(x));  x;  x.^2]' - jezeli wybierzemy ta wersje tworzenia A to nalezy pamietac
%o odwroceniu kolejnosci wyrazow (pierwszy ostatnim) w wektorze c
%zamiana wierszy pierszy z ostanim, drugi z przedostatnim itd., konieczne aby mozna bylo zastosowac
%funkcje polyval - ktora oblicza wartosc wielomianu dla zadanych wspolczynnikow i zmiennej t 
%c1=flipud(c);

A=vander([ -1 0 1])% funkcja vander tworzy macierz Vandermonde'a - zadajemy tylko wartosci x
c=A\y'%rozwiazanie ukladu rownan Ac=y , macierz A jest macierza Vandermonde'a
%c1=[0.66666667,1.333333,1.00]
t=-1:0.02:1;% zmienna pomocnicza do wykreslenia funkcji 
%obliczenie wartosci wielomianu
yi=polyval(c',t); 
yd=3.^t;
er=yi-yd;
error1=max(abs(er));
imax=find(max(abs(er))==abs(er));
figure(1)
wiel=plot(t,yi,'r');%wykres
% kreslenie wezlow interpolacji przez funkcje text
text(-1,3.^(-1),'\bullet','HorizontalAlignment','center',...
'VerticalAlignment','middle','FontSize',16)%postawienie duzej kropki
text(0,3.^(0),'\bullet','HorizontalAlignment','center',...
   'VerticalAlignment','middle','FontSize',16);
text(1,3.^(1),'\bullet','HorizontalAlignment','center','FontSize',16);
%narysowanie maksimum i opisanie
text(t(imax),er(imax)+0.1,['Blad maksymalny =',num2str(abs(er(imax)))],...
   'HorizontalAlignment','right',...
'VerticalAlignment','middle','FontSize',10)
text(t(imax),er(imax),'\bullet','HorizontalAlignment','center',...
'VerticalAlignment','middle','FontSize',12)
hold on
dokl=plot(t,yd,'g');
error=plot(t,er,'b');
hold off
legend_handles=[wiel;dokl;error];
legend(legend_handles,'wiel. interpol','warotsc dokl.','blad')
 grid 
 xlabel('t','FontSize',16)
 ylabel('3^x , wielomian interpol., blad', 'FontSize',16)
 legend_handles;
 title('INTERPOLACJA WIELOMAINOWA FUNKCJI 3^X, 3 wêzly','FontSize',11)
 %
 %interpolacja dla czterch wezlow (-1,-0.5,0.0,0.5,1) 
 %sprawdzic rachunkiem jak powyzej, ze te same wyniki orzymamy jezeli do obliczen urzyjemy funkcji 
 %polyfit rzadajac aby stopien wielomiany byl  rowny n-1, gdzie n jest iloscia wezlow.
 x1=-1:0.5:1;%zadajemy teraz piec wezlow: -1, -0.5, 0, 0.5, 1
 y1=3.^x1;
 pa=polyfit(x1,y1,4);% wyznacza wielominan w normie sriedniokwadratowej gdy m >n - m ilosc danych 
 % 4 oznacza wielomian czwrtego rzedu poniewaz liczba wezlow jest 5 otrzymujemy wielomian interpolacyjny.
 y3=polyval(pa,t);% wylicza wartosc wielomiannu dla zmiennej t i wspolczynnikow pa wyznaczonych przez 
 %polyfit
 er3=y3-yd;
 %
 figure(2)
  plot(t,y3,'r',t,yd,'.',t,er3,'g')
  axis([-1 1 -0.5 3])
  % ozdabianie wykresu
  text(-1,3.^(-1),'\bullet','HorizontalAlignment','center',...
'VerticalAlignment','middle','FontSize',16)%postawienie duzej kropki
text(-0.5,3.^(-0.5),'\bullet','HorizontalAlignment','center',...
   'VerticalAlignment','middle','FontSize',16)
text(0,3.^(0),'\bullet','HorizontalAlignment','center',...
   'VerticalAlignment','middle','FontSize',16)%postawienie duzej kropki
text(0.5,3.^(0.5),'\bullet','HorizontalAlignment','center',...
'VerticalAlignment','middle','FontSize',16)%postawienie duzej kropki
text(1,3.^(1),'\bullet','HorizontalAlignment','center',...
   'VerticalAlignment','middle','FontSize',16)%postawienie duzej kropki
 title('INTERPOLACJA WIELOMAINOWA FUNKCJI 3^X, 5 wêzlow','FontSize',11);
%
imax=find(max(abs(er3))==abs(er3));% wyznaczanie indeksu przy ktorym wystepuje maksimum
%narysowanie maksimum i opisanie
text(t(imax),er3(imax)+0.1,['Blad maksymalny =',num2str(abs(er3(imax)))],...
   'HorizontalAlignment','right',...
'VerticalAlignment','middle','FontSize',10)
text(t(imax),er3(imax),'\bullet','HorizontalAlignment','center',...
   'VerticalAlignment','middle','FontSize',12)
%legend_handles=[wiel;dokl;error];
legend('wiel. interpol','warotsc dokl.','blad')
grid
 