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.