1. Kod programu matlab
x=[0 pi/3 pi/2 3*pi/4];
y=sin(x).^2;
S=nsfit(x,y);
N=length(x)-1;
H=diff(x);
D=diff(y)./H;
A=H(2:N-1);
B=2*(H(1:N-1)+H(2:N));
C=H(2:N);
U=6*diff(D);
for k=2:N-1
temp=A(k-1)/B(k-1);
B(k)=B(k)-temp*C(k-1);
U(k)=U(k)-temp*U(k-1);
end
M(N)=U(N-1)/B(N-1);
for k=N-2:-1:1
M(k+1)=(U(k)-C(k)*M(k+2))/B(k);
M(1)=0;
M(N+1)=0;
for k=0:N-1
S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1));
S(k+1,2)=M(k+1)/2;
S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6;
S(k+1,4)=y(k+1);
xpom=linspace(x(1),x(4));
ypom=sin(xpom).^2;
x1=x(1):0.01:x(2); y1=polyval(S(1,:),x1-x(1));
x2=x(2):0.01:x(3); y2=polyval(S(2,:),x2-x(2));
x3=x(3):0.01:x(4); y3=polyval(S(3,:),x3-x(3));
[E,F]=newpoly(x,y);
n=length(x);
F=zeros(n,n);
F(:,1)=y';
for j=2:n
for k=j:n
F(k,j)=(F(k,j-1)-F(k-1,j-1))/(x(k)-x(k-j+1));
E=F(n,n);
for k=(n-1):-1:1
E=conv(E,poly(x(k)));
m=length(E);
E(m)=E(m)+F(k,k);
yy=polyval(E,xpom);
Error1=abs(ypom-yy);
ypom1=sin(x1).^2;
ypom2=sin(x2).^2;
ypom3=sin(x3).^2;
E1=abs(ypom1-y1);
E2=abs(ypom2-y2);
E3=abs(ypom3-y3);
subplot(3,1,1);
hh1=plot(xpom,yy,'k-',x1,y1,x2,y2,x3,y3,'g:',xpom,ypom,'r-');
subplot(3,1,2);
hh2=plot(xpom,Error1,'k-');
title('błąd lokalny dla wielomianu Newtona')
subplot(3,1,3);
hh3=plot(x1,E1,x2,E2,x3,E3,'k-');
title('błąd lokalny dla funkcji sklejanych')
2. Wykresy
3. Wnioski
Błędy lokalne wyszły nieduże. Największe błędy były na pierwszym przedziale. Z powyższych wykresów widać, że funkcje sklejane nieznacznie lepiej dopasowują się do badanej funkcji ponieważ na drugim oraz trzecim przedziale ich błąd lokalny wraz ze wzrostem wartości x maleje, dlatego jeżeli to możliwe należy stosować dopasowanie funkcjami sklejanymi.
4. Treść zadania
4) „Funkcje sklejane” – Dla funkcji f(x)=sin2(x) w punktach {0, π/3, π/2, 3 π/4} wyznacz używając skryptów OCtava (Matlaba) postać naturalnej funkcji sklejanej S3 (wielomian trzeciego stopnia) dla zadanego zbioru punktów. Następnie wyznacz (znów używając skryptów) postać wielomianu interpolacyjnego P3(x) metodą Newtona. Znając postacie funkcji S3(x) i P3(x) wykreśl za pomocą komendy plot błędy lokalne E1(x)=abs(f(x)-P3(x)) oraz E2(x)=abs(f(x)-S3(x)) i skomentuj rezultat. Wykreśl podane punkty oraz przebieg wyznaczonego wielomianu interpolacyjnego P3(x), S3(x) i funkcji f(x) używając komendy plot. Wydruk wykresy (wraz z kodem) dołącz do sprawozdania.
bzyku151515