Sprawko Sebastiana i Stacha, Informatyka WEEIA 2010-2015, Semestr IV, Metody numeryczne, Lab 1 sprawko


data 19.03.2012 godzina 14:15

rok akademicki: 2011/2012 semestr: IV

grupa: 2 - X2

SPRAWOZDANIE Z LABORATORIUM

METOD NUMERYCZNYCH

ĆWICZENIE NR 1

TEMAT: Przenoszenie się błędów w obliczeniach numerycznych

Sebastian Woźniak - 164496

Marcin Stachowicz - 164460

  1. Listingi M-Funkcji:

  1. Plik główny porównujący wszystkie używane metody i obrazujący wyniki na wykresie

A = [1 -10 45 -120 210 -252 210 -120 45 -10 1];

x = linspace(0.95, 1.05, 100);

for i=1:100

w1(i) = horner(A, x(i));

w2(i) = horner_m2(A, x(i));

w3(i) = polyval(A, x(i));

w4(i) = funkcja_zwykla(x(i));

end

plot(x, w1, x, w2, x, w3, x, w4);

xlabel('x');

ylabel('w');

  1. Plik z obliczonymi pochodnymi funkcji cos(x), obliczajacy różnice centralną i progresywną, ich błędy względne i odniesień oraz przedstawiający wykresy poniższych wielkości w skali logarytmicznej

h = 1;

x = 1;

p1 = '-sin(x)';

p2 = '-cos(x)';

p3 = 'sin(x)';

w1 = eval(p1);

w2 = eval(p2);

w3 = eval(p3);

for i=1:70

H(i) = h*2^(-(i-1));

Rc(i) = centralna(x, H(i));

Rp(i) = progresywna(x, H(i));

Bw_Rc(i) = (Rc(i)-w1)/w1;

Bw_Rp(i) = (Rp(i)-w1)/w1;

Bo_Rc(i) = ((-1/6)*(H(i))^2 * w3)/w1;

Bo_Rp(i) = ((1/2)*H(i) * w2) / w1;

end

loglog(H, abs(Bw_Rc), H, abs(Bw_Rp), H, abs(Bo_Rc), H, abs(Bo_Rp))

xlabel('log(h)');

ylabel('log(B)');

  1. Wzór liczący dziesiątą potęgę wielomianu x - 1

function [w] = funkcja_zwykla(x)

w = (x-1)^10;

  1. Plik ze schematem Hornera - metoda 1

function [w] = horner(A, x)

w=0;

n=length(A);

for i=1:n

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

end

  1. Plik ze schematem Hornera - metoda 2:

function [w] = horner_m2(A, x)

w=0;

n=length(A)-1;

for i=1:n

w = w+A(i);

w = w*x;

end

w = w + A(n+1);

  1. Plik obliczający różnicę centralną funkcji cos(x):

function[y] = centralna(x, h)

y=(cos(x+h) - cos(x-h))/(2*h)

  1. Plik obliczający różnicę progresywną:

function[y] = progresywna(x, h)

y = (cos(x + h) - cos(x))/h

  1. Listingi M-Funkcji:

  1. Wykres pliku głównego - wykresy poszczególnych metod:

0x01 graphic

  1. Wykres błędów w skali logarytmicznej:

0x01 graphic

Krok optymalny dla różnicy centralnej (czerwony wykres): 10-5

Krok optymalny dla różnicy progresywnej (czerwony wykres): 10-8

  1. Pliki z różnicami:

- różnica centralna:

function[y] = centralna(x, h)

y=(cos(x+h) - cos(x-h))/(2*h)

- różnica progresywna:

function[y] = progresywna(x, h)

y = (cos(x + h) - cos(x))/h

Wnioski:

Dla zadania 1 zastosowaliśmy 2 sposoby obliczenia wielomianu: wzór standardowy i schemat Hornera. W obu sposobach wystąpiły duże zniekształcenia wyników, lecz przy zastosowaniu schematu Hornera wystąpił mniejszy rozrzut wyników.

Błąd względny zmienia się wraz ze zmianą długości kroku. Lepsze wyniki daje różnica centralna, ponieważ błędy odcięcia maleją wraz z h2



Wyszukiwarka