Imię Nazwisko: Mateusz Gąsiorek Termin: CZ/TP 9:15-11:00
Nr albumu: 180514 Data lab.: 03.11.2011
SPRAWOZDANIE 2
METODY NUMERCZYNE
ZAD.1
Lab_2_1.m
%granice calkowania a = -1; b = 1; %ilosc wezlow n = 10000; %wspolczynnik h h=(b-a)/n;
%============================================ % ---------- METODA PROSTOKĄTÓW ------------- %============================================ %deklaracja zmiennych p1=0; p2=0; p3=0; i=0; %sumowanie wynikow for i=a:h:b %od a do b co h p1 = p1 + h*(4*i^3 + 3*i^2); %suma wyrazow wszystkich poprzednich od i p2 = p2 + h*3*sin(i^2); %suma wyrazow wszystkich poprzednich od i p3 = p3 + h*2*exp(-i); %suma wyrazow wszystkich poprzednich od i end
%wyswietlenie p1 p2 p3
%============================================ % ------------ METODA TRAPEZÓW -------------- %============================================ %deklaracja zmiennych suma1=0; suma2=0; suma3=0; i=0;
%sumowanie wynikow for i=a+h:h:b-h %od a+h do b-h co h suma1 = suma1 + 4*i^3 + 3*i^2; %sumowanie wyrazow suma2 = suma2 + 3*sin(i^2); %sumowanie wyrazow suma3 = suma3 + 2*exp(-i); %sumowanie wyrazow end
%wyswietlenie t1 = h/2 * (4*a^3+3*a^2 + 2*suma1 + 4*b^3 + 3*b^2) t2 = h/2 * (3*sin(a^2) + 2*suma2 + 3*sin(b^2)) t3 = h/2 * (2*exp(-a) + 2*suma3 + 2*exp(-b))
%============================================ % ------------ METODA SIMPSONA -------------- %============================================
%deklaracja zmiennych S1=0; S2=0; S3=0; % Sumujemy wyrazy for i=1:(n/2) % do wyrazu n/2
%tworzymy wyraz parzysty i nieparzysty h1=(a+(2*i-1)*h); % pierwszy wyraz (do i-1) h2=(a+2*i*h); % drugi wyraz (do i)
s_1_1 = 4*(h1)^3 + 3*(h1)^2; %sumuje wyrazy (do i-1) s_1_2 = 4*(h2)^3+3*(h2)^2; %sumuje wyrazy (do i) S1 = S1 + 4*s_1_1 + 2*s_1_2; %suma obu wyrazów
s_2_1 = 3*sin(h1^2); %sumuje wyrazy (do i-1) s_2_2 = 3*sin(h2^2); %sumuje wyrazy (do i) S2 = S2 + 4*s_2_1 + 2*s_2_2; %suma obu wyrazów
s_3_1 = 2*exp(-h1); %sumuje wyrazy (do i-1) s_3_2 = 2*exp(-h2); %sumuje wyrazy (do i) S3 = S3 + 4*s_3_1 + 2*s_3_2; %suma obu wyrazów
end
%sumowanie wynikow S1 = S1 - 2 * s_1_2; %odejmujemy wyraz pierwszy (do i-1) S2 = S2 - 2 * s_2_2; %odejmujemy wyraz pierwszy (do i-1) S3 = S3 - 2 * s_3_2; %odejmujemy wyraz pierwszy (do i-1)
% wyświetlenie S1 = (h/3) * (S1 + (4*(b)^3+3*(b)^2) + (4*(a)^3+3*(a)^2)) S2 = (h/3) * (S2 + (3*sin(b^2)) + (3*sin(a^2))) S3 = (h/3) * (S3 + (2*exp(-a)) + (2*exp(-b)))
|
Funkcje które badamy:
a) f(x) = 4x3 + 3x2,
b) f(x) = 3 sin(x2),
c) f(x) = 2 exp(-x),
5 węzłów:
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona (4) |
Wynik z Wolfram'a |
4x3 + 3x2, |
3.3600 |
2.1600 |
2.0000 |
2 |
3 sin(x2), |
2.9610 |
1.9512 |
1,8669 |
1,86161 |
2 exp(-x), |
5.9978 |
4.7633 |
4,7008 |
4,7008 |
10 węzłów:
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.6400 |
2.0400 |
2.0000 |
2 |
3 sin(x2), |
2.9610 |
1.8834 |
1,8624 |
1,86161 |
2 exp(-x), |
5.9978 |
4.7165 |
4,7008 |
4,7008 |
20 węzłów:
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.3100 |
2.0100 |
2.0000 |
2 |
3 sin(x2), |
2.1195 |
1.8670 |
1,8616 |
1,86161 |
2 exp(-x), |
5.0133 |
4.7047 |
4,7008 |
4,7008 |
50 węzłów:
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.1216 |
2.0016 |
2.0000 |
2 |
3 sin(x2), |
1.9635 |
1.8625 |
1,8616 |
1,86161 |
2 exp(-x), |
4.8249 |
4.7014 |
4,7008 |
4,7008 |
100 węzłów:
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.0604 |
2.0004 |
2.0000 |
2 |
3 sin(x2), |
1.9123 |
1.8618 |
1,8616 |
1,86161 |
2 exp(-x), |
4.7627 |
4.7010 |
4,7008 |
4,7008 |
500 węzłów
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.0120 |
2.0000 |
2.0000 |
2 |
3 sin(x2), |
1.8717 |
1.8616 |
1,8616 |
1,86161 |
2 exp(-x), |
4.7132 |
4.7008 |
4,7008 |
4,7008 |
1000 węzłów
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.0060 |
2.0000 |
2.0000 |
2 |
3 sin(x2), |
1.8667 |
1.8616 |
1,8616 |
1,86161 |
2 exp(-x), |
4.7070 |
4.7008 |
4,7008 |
4,7008 |
10000 węzłów
Funkcja |
M. Prostokątów |
M. Trapezów |
M. Simpsona |
Wynik z Wolfram'a |
4x3 + 3x2, |
2.0006 |
2.0000 |
2.0000 |
2 |
3 sin(x2), |
1.8621 |
1.8616 |
1,8616 |
1,86161 |
2 exp(-x), |
4.7014 |
4.7008 |
4,7008 |
4,7008 |
METODA PROSTOKĄTÓW:
Najprostsza, najszybsza, ale zarazem najmniej dokładna metoda. Polega na aproksymacji funkcji za pomocą prostokątów. Tworzymy pole pod wykresem które dzielimy na prostokąty i na ich podstawie wyznaczamy wartość.
Metoda prostokątów daje wyniki zbliżone do poprawnych (których błędy zaokrągleń można by pominąć) dopiero dla 500 węzłów. Widać również że metoda ta nawet dla 1000 i więcej węzłów nie daje poprawnego wyniku.
METODA TRAPEZÓW
Metoda trapezów polega na aproksymacji funkcji za pomocą trapezów. Tworzymy pole pod wykresem które dzielimy na trapezy i na ich podstawie wyznaczamy wartość.
Metoda trapezów daje wyniki poprawne dopiero dla liczby węzłów z przedziału 100-500. Wyniki zbliżone do poprawnych uzyskuje w rejonach 10-50 węzłów. Jest to granica przy której błędy wyniku można pominąć.
METODA SIMPSONA
Metoda opiera się na przybliżaniu funkcji całkowanej przez aproksymację wielomianem drugiego stopnia.
Metoda Simpsona jest najdokładniejszą metodą. Jej wyniki są zawsze zbliżone do wyniku obliczonego, a już dla 20 węzłów wyniki z wykorzystaniem tej metody są identyczne jak poprawne.
ZAD.2
Lab_2_2.m
%Do kodu z poprzedniego zadania dodajemy fragment odpowiadający za %zliacznie błędu (różniczy pomiędzy wynikiem otrzymanym z Wolframa a naszym %wynikiem algorytmu) Wyniki przeprawdzane są dla 100 próbek z przedziału %od 10 do 1000 co 10. Dodatkowo umieszczamy fragment odpowiadający za %stworzenie wykresy odzwierciedlającego problem błędu obu algorytmów dla %danej funkcji.
%wartości spisane z Wolfram'a F1=2; F2=1.86161; F3=4.7008;
%deklaracja tablic wyników Trapez1=[]; Trapez2=[]; Trapez3=[];
%deklaracja tablic wyników Simpson1=[]; Simpson2=[]; Simpson3=[];
%przedziały a=-1; b=1;
%liczba próbek t=10:10:1000; for n=10:10:1000
h=(b-a)/n;
%============================================ % ------------ METODA TRAPEZÓW -------------- %============================================ %deklaracja zmiennych T1=0; T2=0; T3=0; wynik1=0; wynik2=0; wynik3=0;
for i=1:(n-1) %do n-1 h1=a+i*h; %pierwszy wyraz
% Funkcja1 wynik1 = 4*(h1)^3 + 3*(h1)^2;
% Funkcja2 wynik2 = 3*sin(h1^2);
% Funkcja3 wynik3 = 2*exp(-h1);
T1 = T1 + 2*wynik1; T2 = T2 + 2*wynik2; T3 = T3 + 2*wynik3; end
T1=T1 + (4*(b)^3 + 3*(b)^2) + (4*(a)^3 + 3*(a)^2); T2=T2 + (3*sin(b^2)) + (3*sin(a^2)); T3=T3 + (2*exp(-a)) + (2*exp(-b));
T1=T1*h/2; Trapez1=[Trapez1, abs(T1-F1)];
T2=T2*h/2; Trapez2=[Trapez2, abs(T2-F2)];
T3=T3*h/2; Trapez3=[Trapez3, abs(T3-F3)];
%============================================ % ------------ METODA SIMPSONA -------------- %============================================ %deklaracja zmiennych S1=0; S2=0; S3=0; s_1_1=0; s_1_2=0; s_2_1=0; s_2_2=0; s_3_1=0; s_3_2=0;
for i=1:(n/2)
%tworzymy wyraz parzysty i nieparzysty h1=(a+(2*i-1)*h); % pierwszy wyraz (do i-1) h2=(a+2*i*h); % drugi wyraz (do i)
s_1_1 = 4*(h1)^3 + 3*(h1)^2; %sumuje wyrazy (do i-1) s_1_2 = 4*(h2)^3+3*(h2)^2; %sumuje wyrazy (do i) S1 = S1 + 4*s_1_1 + 2*s_1_2; %suma obu wyrazów
s_2_1 = 3*sin(h1^2); %sumuje wyrazy (do i-1) s_2_2 = 3*sin(h2^2); %sumuje wyrazy (do i) S2 = S2 + 4*s_2_1 + 2*s_2_2; %suma obu wyrazów
s_3_1 = 2*exp(-h1); %sumuje wyrazy (do i-1) s_3_2 = 2*exp(-h2); %sumuje wyrazy (do i) S3 = S3 + 4*s_3_1 + 2*s_3_2; %suma obu wyrazów
end %sumowanie wynikow S1 = S1 - 2 * s_1_2; S2 = S2 - 2 * s_2_2; S3 = S3 - 2 * s_3_2;
% wyświetlenie S1 = (h/3) * (S1 + (4*(b)^3+3*(b)^2) + (4*(a)^3+3*(a)^2)) S2 = (h/3) * (S2 + (3*sin(b^2)) + (3*sin(a^2))) S3 = (h/3) * (S3 + (2*exp(-a)) + (2*exp(-b)))
Simpson1=[Simpson1, abs(S1-F1)]; Simpson2=[Simpson2, abs(S2-F2)]; Simpson3=[Simpson3, abs(S3-F3)]; end
figure; hold on; grid on; title('Funkcja 1'); plot(t,Simpson1,'r'); plot(t,Trapez1,'b');
figure; hold on; grid on; title('Funkcja 2'); plot(t,Simpson2,'r'); plot(t,Trapez2,'b');
figure; hold on; grid on; title('Funkcja 3'); plot(t,Simpson3,'r'); plot(t,Trapez3,'b');
|
f(x) = 4x3 + 3x2,
|
|
|
Metoda Simpsona daje błąd wielkości równy 0 na całym zakresie sprawdzania
Metoda trapezowa daje błąd wielkości 0,4 i z ilością węzłów maleje do 0
f(x) = 3 sin(x2),
|
|
|
Metoda Simpsona daje błąd wielkości równy 0,001 na początku swojego działania i z czasem maleje on do 0
Metoda trapezowa daje błąd wielkości 0,02 i z ilością węzłów maleje do 0 przy czym jest to szybszy spadek niż w przykładzie powyższym
f(x) = 2 exp(-x),
|
|
|
Metoda Simpsona daje błąd wielkości prawie 0 na całym zakresie sprawdzania
Metoda trapezowa daje błąd wielkości 0,016 i z ilością węzłów maleje do 0
Dodatkowo:
Błędny wykres który otrzymywałem w trakcie laboratorium:
Wynikał z :
Zakresu próbkowania do 10000 co dawało niepoprawne rozmiary macierzy
Braku wartości bezwzględnej przy sprawdzaniu błędu
Oraz zamieszaniem przy wyliczaniu poszczególnych elementów w osobnych funkcjach (złe elem. były zakomentowane a złe odkomentowane)
ZAD.3
Lab_2_3m
%============================================ % ----------- METODA MONTE CARLO ------------ %============================================
%granice calkowania a = -1; b = 1;
%ilosc wezlow n = [100 200 500 1000 2000 5000 10000 20000 50000];
%dodatkowa macierz 0 aby wymiar się zgadzał sum = [0 0 0 0 0 0 0 0 0];
%metoda Monte Carlo for j=1:9 for i=1:n(j) xlos = a+rand*(b-a); %losujemy liczbe z przedzialu (a,b) sum(j) = sum(j) + 4*xlos^3+3*xlos^2; end sum(j) = sum(j)*(b-a)/n(j) %wyświetlenie wyników sumowań end figure; hold on; grid on; plot(n,sum);
|
Wyniki otrzymane przy skorzystaniu z powyższego kodu:
1.6899 2.2592 2.0054 2.0200 2.0011 2.0314 1.9640 2.0068 1.9904
Przykładowe wykresy obliczania całki metodą Monte Carlo:
Z powyższych wykresów oraz wyników, widać że szybkość stabilizacji na wartości 2 jest zależny od wartości losowanych.
Pierwszy wykres przedstawia stabilizację dopiero dla liczby węzłów 50000
Drugi wykres natomiast stabilizuje się przy wartości 20000
Metodę tą stosuje się do obliczania zbyt złożonych całek/funkcji aby przewidzieć w szybki sposób jaką wartość dana funkcja zwróci. Jest to metoda obarczona dużym błędem i która działa zależnie od zmiennej która jest losowa.