Metody numeryczne

Laboratorium:

Całkowanie Numeryczne

Konrad Cinkusz, nr indeksu: 176180

Michał Grandys, nr indeksu: 171932

1. Wstęp teoretyczny: Całkowanie numeryczne jest to metoda numeryczna polegająca ma przybliżonym obliczaniu całek oznaczonych, problemy zadane w sprawozdaniu rozwiązaliśmy pisząc m-pliki funkcyjne. Wszystkie potrzebne informacje dotyczące funkcji i obliczania błędów zawarte są w komentarzach listingów.

Poniżej krótki opis metod i wyznaczania błędów

–

obliczania przybliżonej wartości całki metodą prostokątów;

–

obliczania przybliżonej wartości całki metodą trapezów;

–

obliczanie przybliżonej wartości całki metodą simpsona;

–

wyznaczanie błędów dla powyższych metod; 2. Listingi funkcji:

Napisaliśmy następujące m-pliki funkcyjne function [X] = simpson(n,a,b,fun)%n- podprzedzialy a,b zakresy, fun- funkcja

szerokosc = (b-a)/n;

x=[a:szerokosc:b];

X=((b-a)/(3*n))*(fun(x(1))+fun(x(length(x)))

+4*sum(fun(x(2:2:length(x)-1)))

+2*sum(fun(x(3:2:length(x)-2))));

end

function [X] = trapezy(n,a,b,fun)%n- podprzedzialy a,b zakresy, fun- funkcja

szerokosc = (b-a)/n;

x=[a:szerokosc:b];

X=szerokosc*(sum(fun(x(2:length(x)-1))) + (fun(x(1))

+fun(x(length(x))))/2);

end

function [ X ] = prostokaty( n,a,b,fun ) %ilosc podprzedzialow, a-b zakresy, fun - wskaznik do funkcji dx = (b-a)/n;

tab=[a:dx:b];

X=dx*(sum(fun(tab(2:length(tab))))); end

I zastosowaliśmy je do następujących funkcji: function [X] = Funkcja1(A)

X = 1./(1+cos(A));

end

function [X] = Funkcja2(A)

X = 1./sqrt(A.^2 + 0.0001);

end

function [X] = Funkcja3(A)

X = (exp(1).^A).*sin(exp(1).^A);

end

3. Błędy względny i bezwzględny: Do obliczeń błędów i narysowania wykresów napisaliśmy następujący plik funkcyjny:

%ponizej zadane wartosci dokladne

dokl1 = 2; %wartosc dokladna dla funkcji 1

dokl2 = log((200+sqrt(40001))\(sqrt(10001)-100));

%wartosc dokladna dla funkcji 2

dokl3 = cos(1)-cos(exp(1)^5); %wartosc dokladna dla funkcji 3

ilosc_podprzedzialow = 100;%ustawiamy "na sztywno ilosc podprzedzialow"

%obliczenia bledow dla pierwszej calki x = [1:ilosc_podprzedzialow]; %przyjmujemy liczbe podprzedzialow

wyn2 = zeros(1,length(x));%inicjujemy dwie zmienne wynikowe:

wyn = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl1 - trapezy(i,-

3.14/2,3.14/2,@Funkcja1));

wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,1);%wyznaczamy miejsce wykresu plot(x,wyn,x,wyn2,'--r');%rysujemy wykres z bledami bezwzglednym i wzglednym

legend('bezwzgledny','wzgledny'); %opis do wykresu xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 1 dla metody trapezow') x = [1:ilosc_podprzedzialow];

wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl1 - prostokaty(i,-

3.14/2,3.14/2,@Funkcja1)); %blad bezwzgledny wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,2);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 1 dla metody prostokatow')

x = [1:ilosc_podprzedzialow]; wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl1 - simpson(i,-

3.14/2,3.14/2,@Funkcja1));

wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,3);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 1 dla metody trapezow')

%obliczenia bledow dla calki drugiej x = [1:ilosc_podprzedzialow];

wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl2 - trapezy(i,-1,exp(1),@Funkcja2)); wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,4);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 2 dla metody trapezow') x = [1:ilosc_podprzedzialow];

wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl2 - prostokaty(i,-

1,exp(1),@Funkcja2));

wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,5);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 2 dla metody prostokatow')

x = [1:ilosc_podprzedzialow]; wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl2 - simpson(i,-1,exp(1),@Funkcja2)); wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,6);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 2 dla metody simpsona')

%obliczenia bledow dla calki trzeciej x = [1:ilosc_podprzedzialow];

wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl2 - trapezy(i,0,5,@Funkcja3)); wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,7);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 3 dla metody trapezow') x = [1:ilosc_podprzedzialow];

wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x));

for i = x

wyn(i) = abs(dokl2 - prostokaty(i,0,5,@Funkcja3)); wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,8);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 3 dla metody prostokatow') x = [1:ilosc_podprzedzialow];

wyn = zeros(1,length(x));

wyn2 = zeros(1,length(x)); for i = x

wyn(i) = abs(dokl2 - simpson(i,0,5,@Funkcja3)); wyn2(i) = (wyn(i)/dokl1); %blad wzgledny end

subplot(3,3,9);

plot(x,wyn,x,wyn2,'--r')

legend('bezwzgledny','wzgledny');

xlabel('podprzedzialy');

ylabel('wartosci bledow');

title('bledy funkcji 3 dla metody simpsona') Plik generuje nam wykresy załączone do sprawozdania. Poniżej wnioski.

4. Wnioski:

Teoretycznie najlepsze wyniki powinny być uzyskane w metodzie Simpsona, tak też jest w naszych obliczeniach, przy analizowaniu wykresów należy zwrócić uwagę na oś y z wartościami błędów. Już przy ustaleniu liczby podprzedziałów na 100 wartość błędu zbliżyła się wystarczająco do zera. Przy liczbie podprzedziałów ustalonych na 1000 dla funkcji 1 metoda trapezów i prostokątów jest lepsza od metody simpsona. Dla funkcji 2 wartość błędu przy kolejnych podprzedziałach dla poszczególnych metod jest w przybliżeniu taka sama. Dla funkcji 3 najlepsze rozwiązanie uzyskujemy dla 100 podprzedziałów, gdzie wartości błędów spadają do zera.