zad 2.docx

(20 KB) Pobierz

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);

end

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);

end

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));

    end

end

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);

end

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.

Zgłoś jeśli naruszono regulamin