background image

Metody numeryczne

Laboratorium:

Całkowanie Numeryczne

Konrad Cinkusz, nr indeksu: 176180 
Michał Grandys, nr indeksu: 171932

background image

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

background image

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'

)

 

background image

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'

)

 

background image

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));

background image

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.