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.