Kod Matlab
x=[1 2 3];
y=2*cos(x./4);
Wsp=lspoly(x,y,2)
n=length(x);
B=zeros(1:2+1);
F=zeros(n,2+1);
for k=1:2+1
F(:,k)=x'.^(k-1);
end
A=F'*F;
B=F'*y';
Wsp=A\B;
Wsp=flipud(Wsp);
a=Wsp(1)
b=Wsp(2)
c=Wsp(3)
xpom=linspace(x(1),x(3),1000);
ypom=2*cos(xpom./4);
fx=a*xpom.^2+b*xpom+c;
%wyznaczenie wielomianu interpolacyjnego metodą Newtona
[C,D]=newpoly(x,y)
n=length(x);
D=zeros(n,n);
D(:,1)=y';
% obliczanie ilorazow roznicowych
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)-D(k-1,j-1))/(x(k)-x(k-j+1));
end
end
% okreslenie wspolczynnikow wielomianu interpolacyjnego Newtona
C=D(n,n);
for k=(n-1):-1:1
C=conv(C,poly(x(k)));
m=length(C);
C(m)=C(m)+D(k,k);
end
yy=polyval(C,xpom);
E1=abs(ypom-fx);
E2=abs(ypom-yy);
subplot(3,1,1)
hh1=plot(x,y,'rx',xpom,ypom,'k-',xpom,fx,'g-',xpom,yy,'b-');
subplot(3,1,2)
hh2=plot(xpom,E1,'k-');
subplot(3,1,3);
hh3=plot(xpom,E2);
Wykresy
Wnioski
Wielomian interpolacyjny oraz aproksymacja średniokwadratowa mają te same współczynniki jest to spowodowane niskim stopniem wielomianu interpolacyjnego oraz niewielką liczbą węzłów interpolacyjnych. W przypadku powiększenia ilości węzłów wielomian mógłby znacznie odbiegać od przebiegu funkcji f(x). Błędy lokalne w obu przypadkach wyszły bardzo niewielkie dlatego można uznać, że zarówno metoda aproksymacji średniokwadratowej jaki i interpolacji metodą Newtona jest poprawna i daje dokładne wyniki.
Cezary Winnik 157958
Metody numeryczne
Temat: Aproksymacja średniokwadratowa
Prowadzący: dr inż. P. Regucki