Błędy w obliczeniach numerycznych, Informatyka WEEIA 2010-2015, Semestr IV, Metody numeryczne, Lab 1 sprawko


Data wykonania ćwiczenia: 23.02.2010 r.

Grupa: 4D3

YYY - ZZZ

XXX - ZZZ

SPRAWOZDANIE

Ćw. 2 - Błędy w obliczeniach numerycznych

Wprowadzenie:

Na wstępie należałoby zaznaczyć, że obliczenia numeryczne prowadzone na komputerze obarczone są z reguły błędem. Sumaryczny błąd złożony jest z takich czynników jak np.: błędy wejściowe, błędy metody, błędy zaokrągleń, błędy obcięcia czy błędy wynikające z ograniczonych możliwości komputera (np. reprezentacja liczb). Zadaniem użytkownika jest zminimalizowanie sumarycznego błędu powstającego podczas rozpatrywania danego zagadnienia. Wykonywane ćwiczenie ma na celu uświadomienie faktu istnienia niedokładności wykonywania obliczeń przy użyciu komputera.

Przebieg ćwiczenia:

Zadanie 1a: obliczanie pierwiastków równania kwadratowego

m-plik:

function [x1,x2] = zad1(a,b,c);

delta = (b^2) - (4 * a * c);

if delta>=0

x1=(-b + sqrt(delta)) / (2 * a)

x2=(-b - sqrt(delta)) / (2 * a)

else

display('Delta mniejsza od zera - brak pierwiastków rzeczywistych')

end

Zadanie 1b: obliczanie pierwiastków równania kwadratowego za pomocą wzorów Viete'a

m-plik:

function [x1,x2] = vi(a,b,c)

zad1(1,b/a,c/a)

Powyższe m-pliki obliczają pierwiastki równania kwadratowego. W przypadku 1a obliczamy deltę, a następnie korzystając ze wzorów na pierwiastki równania kwadratowego: 0x01 graphic
. Przypadek 1b korzysta ze wzorów Viete'a - 0x01 graphic
, 0x01 graphic
.

Wzory te tworzą układ równań, którego rozwiązaniem są pierwiastki równania kwadratowego (stąd też wykorzystanie m-pliku z zadania 1a).

Ćwiczenie to ma na celu sprawdzenie występowania zjawiska cyfr znaczących oraz porównanie dwóch metod wyznaczania pierwiastków równania kwadratowego.

Zadanie 4a: Obliczanie wartości wielomianu

m-plik:

function [war] = zad4a(A,x)

n = size(A, 1);

war=0;

for i=1:n

war = war + A(i)*(x^(n-i));

end

Zadanie 4b: Obliczanie wartości wielomianu z zastosowaniem schematu Hornera

m-plik:

function [war] = zad4b(A, x)

n = size(A,1);

wart = A(1);

wart = zeros(1, size(x,2));

for j=1:size(x,2)

wart(j) = A(1);

for i=2:n

wart(j) = A(i) + wart(j) * x(j);

end

end

Ćwiczenie 4 pozwala na porównanie skuteczności dwóch sposobów obliczania wartości wielomianu. Metoda pierwsza korzysta z bezpośredniego podstawienia wartości x do wzoru wielomianu, metoda druga korzysta ze schematu Hornera - metody minimalizującej liczbę mnożeń niezbędnych do otrzymania końcowego wyniku.

Metoda pierwsza wymaga n*(n+1)/2 mnożeń oraz n dodawań. Metoda druga przekształca wielomian do postaci:

0x01 graphic

Przekształcenie to redukuje liczbę niezbędnych do wykonania działań do n mnożeń oraz n dodawań, co znacząco przyspiesza proces otrzymywania wyniku.

Zadanie 5a: Obliczanie przybliżonej wartości pochodnej przy wykorzystaniu wzoru na różnicę progresywną.

m-plik:

h=ones(1,50);

for i=2:50
h(i)=h(i-1)*0.5;
end

RP=zeros(1,50);
for i=1:50
RP(i)=(sqrt(2 + h(i)) - sqrt(2)) / h(i);
end

B=zeros(1,50);
for i=1:50
B(i)=abs((1 / (2 * sqrt(2))) - RP(i));
end

BM=zeros(1,50);
for i=1:50
BM(i) = abs((-1 / (4 * sqrt(2^3))) * h(i) / 2);
end

hold off
plot(log(h),log(BM),'r');
hold on
plot(log(h),log(B),'g--');

Zadanie 5b: Obliczanie przybliżonej wartości pochodnej przy wykorzystaniu wzoru na różnicę centralną.

m-plik:

h=ones(1,50);

for i=2:50

h(i)=h(i-1)*0.5;

end

RC=zeros(1,50);

for i=1:50

RC(i)=(sqrt(2 + h(i)) - sqrt(2 - h(i)))/(2 * h(i)) ;

end

B=zeros(1,50);

for i=1:50

B(i)=abs((1/(2 * sqrt(2)))-RC(i));

end

BM=zeros(1,50);

for i=1:50

BM(i) = abs((3 / (8 * sqrt(2^5)))*h(i)^2 / 6);

end

hold off

plot(log(h),log(BM),'r');

hold on

plot(log(h),log(B),'g--');

M-pliki z zadania 5 wyliczają dodatkowo błędy całkowite, błędy odcięcia, błędy metody oraz szkicują odpowiednie wykresy. Naszym zadaniem było zbadanie rozkładu błędu pochodnej pierwiastka z 2 dla 50 różnych wartości h (wyliczonych ze wzoru: h(i)=h(i)*(0.5)^(i-1) - ciąg geometryczny). Błąd metody szacujemy korzystając ze wzoru Taylora. Do obliczenia błędu całkowitego użyliśmy wzoru na błąd bezwzględny z bardzo prostego powodu - umiemy dokładnie obliczyć wartość pochodnej dla funkcji "pierwiastek z x".

Ćw - 3

Aproksymacja i interpolacja

Zadanie 1:

m-plik:

hold off

x=0:4;

y=[0,2,3,6,10]

n=size(x,2)

p=polyfit(x,y,n-1)

xw=0:0.1:4;

yw=polyval(p,xw);

hold on

plot(x,y,'*',xw,yw,'r')

Skrypt umożliwia interpolowanie przebiegu funkcji pomiędzy danymi węzłami.

Przykładowe obliczenia:

Zadanie 1a: Obliczanie wartości wielomianu

Współczynniki dwumianu kwadratowego:

A = -12

B = 6

C = 5

Pierwiastki dwumianu kwadratowego:

X1= -0.442218655243173

X2= 0.942218655243173

W celu sprawdzenia poprawności obliczonych pierwiastków, obliczam wartość funkcji podstawiając je do równania: Y=-12x^2+6x+5:

Y1= -1.77635683940025e-015

Y2= -1.77635683940025e-015

W przypadku idealnie obliczonych pierwiastków wynik powinien być równy 0. Obliczenia są więc obarczone błędem.

Zadanie 1b: obliczanie pierwiastków równania kwadratowego za pomocą wzorów Viete'a

Współczynniki dwumianu kwadratowego:

A = -12

B = 6

C = 5

Pierwiastki dwumianu kwadratowego:

X1= -0.442218655243172

X2= 0.942218655243172

W celu sprawdzenia poprawności obliczonych pierwiastków, obliczam wartość funkcji podstawiając je do równania: Y=-12x^2+6x+5:

Y1= 1.50990331349021e-014

Y2= 1.33226762955019e-014

W przypadku idealnie obliczonych pierwiastków wynik powinien być równy 0. Obliczenia są więc obarczone błędem.

Zadanie 4:

Współczynniki wielomianu:

A4 = -2

A3 = 8

A2 = -12

A1 = 8

A0 = -2

X=0.99965 : 0.000001 : 1

0x01 graphic

Kolor zielony: wartość policzona bezpośrednio poprzez wstawienie X.

Kolor bordowy: wartość policzona z wykorzystaniem schematu Hornera.

Zadanie 5:

Wykres błędu dla różnicy centralnej:

0x01 graphic

Kolor fioletowy: błąd metody.

Kolor zielony: błąd całkowity.

Wykres błędu dla różnicy progresywnej:

0x01 graphic

Kolor fioletowy: błąd metody.

Kolor zielony: błąd całkowity.

Oszacowanie błędu minimalnego oraz optymalnego kroku h:

Różnica centralna:

h=~3.77 * 10^-6

błąd minimalny=~2.6*10^-9

Różnica progresywna:

h=~3.04*10^-8

błąd minimalny=~6.15*10^-12

Zadanie 1 (Ćwiczenie 3)

Początkowe współrzędne węzłów: (0,0), (1,2), (2,3), (3, 6), (4, 10). Wykres interpolowany (dla x=0:0.1:4) wygląda następująco:

0x01 graphic

Niebieskie gwiazdki: węzły początkowe.

Kolor czerwony: interpolowany wykres funkcji.



Wyszukiwarka