data 21.03.2013
SPRAWOZDANIE Z LABORATORIUM
METOD NUMERYCZNYCH
Ćwiczenie nr 1
Temat: Błąd w obliczeniach numerycznych
Wydział: EEiA
rok akademicki: 2012/2013 semestr: IV
Grupa: 4C5
Grupa laboratoryjna: 3
Dzień: czwartek godz. 1415-1600
Łukasz Kubiak 171367
Leśnik Przemysław 171374
Ćwiczenie 1. Oblicz wartość wielomianu korzystając ze wzoru (x-1)10, oraz schematu Hornera i wzoru P10(x) = c10x10…+c1x + c0 w przedziale [0,95 1,05]dla 100 punktów.
m-funkcja w matlabie
function [y1,y2,y3]=wielomian2(c,x)
c=[1,-10,45,-120,210,-252,210,-120,45,-10,1];
x=linspace(0.95,1.05,100);
for i=1:length(x)
y1(i)=(x(i)-1)^10;
y2(i)=c(1)*x(i)^10+c(2)*x(i)^9+c(3)*x(i)^8+c(4)*x(i)^7+c(5)*x(i)^6+c(6)*x(i)^5+c(7)*x(i)^4+c(8)*x(i)^3+c(9)*x(i)^2+c(10)*x(i)+c(11);
y3(i)=(((((((((c(1)*x(i)+c(2))*x(i)+c(3))*x(i)+c(4))*x(i)+c(5))*x(i)+c(6))*x(i)+c(7))*x(i)+c(8))*x(i)+c(9))*x(i)+c(10))*x(i)+c(11);
end
%c=[1,-10,45,-120,210,-252,210,-120,45,-10,1];
%x=linspace(0.95,1.05,100);
%[y1,y2,y3]=wielomian2(c,x)
figure(1)
plot(x,y1,'r')
hold on
grid on
plot(x,y2,'g')
plot(x,y3,'y');
y4=polyval(c,x);
plot(x,y4,'b');
legend('(x-1)^{10}','c_{10}*x^{10}+..+c_{11}', 'Schemat Hornera','polyval')
title('Wykres przebiegu wielomianu w zalezności od zastosowanej metody')
title('Przebieg wielomianu w zalezności od zastosowanej metody')
ylabel('y')
xlabel('x')
Wykres
Ćwiczenie 2. Plik z obliczonymi pochodnymi funkcji tg(x2+1), obliczający różnice progresywną, centralną, ich błędy względne ,układ współrzędnych przedstawiający wykresy poniższych wielkości w skali logarytmicznej.
function[h]=roznica(h)
x=0.5;
h0=0.1;
%obliczenie wartosci pochodnych
p1=2*x*(sec(1+x^2))^2;
p2=2*((sec((x^2)+1))^2+4*(x^2)*tan((x^2)+1)*(sec((x^2)+1))^2);
p3=8*(x*tan((x^2)+1)*(sec((x^2)+1))^2+2*x*tan((x^2)+1)*sec((x^2)+1)+2*(x^3)*(sec((x^2)+1))^2+2*(x^3)*(tan((x^2)+1))^2*sec((x^2)+1));
for i=1:40; %obliczanie róznicy centralnej
h(i)=h0*2^-(i-1); %krok rozniczkowania
rc=(tan((x^2)+1+h(i))-tan((x^2)+1-h(i)))/(2*h(i)); %roznica centralna
bw=(rc-p1)/p1; %blad wzgledny
m(1,i)=abs(bw); %blad zapisany do wektora
bgc=((((h(i))^2)/6)*p3)/p1; %blad bezwzgledny
m(3,i)=abs(bgc); %blad zapisany do wektora
end
for i=1:40; %obliczanie róznicy progresywnej
h(i)=h0*2^-(i-1); %krok rozniczkowania
rp=(tan((x^2)+1+h(i))-tan((x^2)+1))/ h(i); %roznica progresywna
bw2=(rp-p1)/p1; %blad wzgledny
m(2,i)=abs(bw2); %blad zapisany do wektora
bgp=((h(i)/2)*p2)/p1; %blad bezwzgledny
m(4,i)=abs(bgp); %blad zapisany do wektora
end
%wykresy bledow
loglog(h,m(1,: ),'r-',h,m(2,: ),'g-',h,m(3,: ),'b.',h,m(4,: ),'y.')
title('Wykres bledu wzglednego');
xlabel('log(h)');
ylabel('log(blad wzgledny)');
legend('roznica centralna', 'roznica progresywna', 'blad wzgledny odciecia r. progr.', 'blad wzgledny odciecia r.centr.')
Krok optymalny dla różnicy centralnej (czerwony wykres): 10-6
Krok optymalny dla różnicy progresywnej (zielony wykres): 10-8
Wartość dokładna pochodnej: 10.057509621834829
Wnioski
Funkcja z ćwiczenia 2 wylicza błędy całkowite różnicy progresywnej i centralnej oraz szkicuje odpowiednie wykresy. Naszym zadaniem było zbadanie rozkładu błędu pochodnej funkcji tag(x2+1) dla różnych wartości h (wyliczonych ze wzoru: H(i) = h0*2^(-(i-1. Na podstawie wykresu można stwierdzić, że różnica centralna daje nam lepsze przybliżenie pochodnej biorąc większy krok niż dla różnicy progresywnej.
Na podstawie wykresów błędu względnego najbardziej optymalny krok będzie oscylował dla różnicy progresywnej w okolicach 10^(-8) oraz dla różnicy centralnej w okolicach 10^(-6).
Ćwiczenie 1 pozwala na porównanie skuteczności sposobów obliczania wartości wielomianu. Metoda pierwsza korzysta ze schematu Hornera - metody minimalizującej liczbę mnożeń niezbędnych do otrzymania końcowego wyniku, metoda druga korzysta z bezpośredniego podstawienia wartości x do wzoru wielomianu. . Z pierwszego wykresu możemy zaobserwować jak złożoność obliczeń ma wpływ na nieprzewidywalne rozłożenie błędów, które pokazują nam oscylacje. Najmniej złożoną funkcją jest obliczenie na podstawie wzoru wielomianu P(x)=(x-1)^10 co pokazuje nam czerwona linia, nie występują błędy. Obserwując wykres, dla schematu Hornera wyniki są mniej porozrzucane, niż wyniki przy zastosowaniu wzoru standardowego. W przypadku gdy użyjemy funkcji polyval, wyniki wykresu dla schematu Hornera i dla użytej funkcji nam się pokrywają. Na podstawie wykresu można stwierdzić, że wbudowana funkcja Matlab’a oparta jest na schemacie Hornera.