Kwadratury numeryczne - Instytut Metod Komputerowych w ...
Kwadratury numeryczne - Instytut Metod Komputerowych w ...
Kwadratury numeryczne - Instytut Metod Komputerowych w ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
<strong>Kwadratury</strong> <strong>numeryczne</strong><br />
Kwadraturami numerycznymi nazywamy wzory służące do przybliżonego wyznaczania wartości<br />
całek oznaczonych w obszarze jedno lub wielo wymiarowym. Obliczanie całek oznaczonych w obszarze<br />
wielowymiarowym sprowadza się do wielokrotnego zastosowania kwadratur dla obszaru<br />
jednowymiarowego. Idea postępowania przy całkowaniu numerycznym jest zawsze taka sama, a<br />
mianowicie zastępujemy funkcję podcałkową funkcją łatwą do scałkowania analitycznego (wielomian)<br />
w drodze interpolacji, a następnie funkcję interpolującą całkujemy ściśle (analitycznie). W<br />
rezultacie otrzymujemy wzór <strong>numeryczne</strong>go całkowania.<br />
W zależności od sposobu postępowania przy wyborze położeń węzłów interpolacji w przedziale<br />
całkowania możemy mieć do czynienia z kwadraturami z:<br />
• zamkniętymi końcami (końce przedziału całkowania wchodzą do wzorów), a węzły są rozmieszczone<br />
równomiernie w całym przedziale całkowania,<br />
• otwartymi końcami (końce przedziału całkowania nie wchodzą do wzorów), a węzły są<br />
rozmieszczone w przedziale całkowania nierównomiernie, tak aby zminimalizować błąd<br />
kwadratury.<br />
Przykładem kwadratur pierwszego typu są kwadratury Newtona-Cotesa, a kwadratur drugiego typu<br />
kwadratury Gaussa.<br />
Na początek rozważmy wyprowadzenie kilku pierwszych kwadratur typu Newtona. Zgodnie z<br />
uwagami zapisanymi powyżej, operację wyznaczania całki:<br />
b<br />
∫ F( x)dx<br />
, (1)<br />
przeprowadzimy dwuetapowo. Najpierw dokonamy interpolacji funkcji ( x)<br />
a<br />
F wielomianem Lagrange’a<br />
stosownego stopnia (oznaczonego dalej jako n ), a następnie funkcję interpolującą scałkujemy.<br />
Wzory ogólne w takim przypadku przyjmują następującą postać:<br />
b<br />
( n<br />
( x) ≅ F( x ) ⋅ L )<br />
( x)<br />
∑<br />
j=<br />
0<br />
n<br />
( n<br />
( x) ⋅dx<br />
≅ F( x ) ⋅ L )<br />
( x)<br />
∫ F ∑ j ∫<br />
a<br />
F<br />
n<br />
j=<br />
0<br />
j<br />
b<br />
a<br />
j<br />
j<br />
⋅dx<br />
. (2)<br />
Po analitycznym wykonaniu całkowania (2) 2 , dla konkretnej wartości n , pamiętając o równomiernym<br />
rozmieszczeniu węzłów, otrzymamy ogólny wzór całkowania <strong>numeryczne</strong>go całkujący ściśle<br />
wielomiany stopnia n . Podamy teraz kilka pierwszych kwadratur typu Newtona:<br />
• interpolacja wielomianowa stopnia 0 ( n = 0 ), czyli funkcją stałą:<br />
b<br />
n = 0 → F<br />
( 0<br />
( x) ⋅dx<br />
≅ F( x ) ⋅ L )<br />
( x)<br />
∫ F ∑ j ∫<br />
a<br />
0<br />
j=<br />
0<br />
( 0<br />
( x) ≅ F( x ) ⋅ L )<br />
( x)<br />
b<br />
a<br />
∑<br />
j=<br />
0<br />
j<br />
0<br />
j<br />
⋅dx<br />
=<br />
j<br />
( b − a)<br />
1<br />
⋅ F<br />
( x )<br />
0<br />
, (3)<br />
1
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
• interpolacja wielomianowa stopnia 1 ( n = 1), czyli funkcją liniową:<br />
b<br />
n = 1 → F<br />
() 1<br />
( x) ⋅dx<br />
≅ F( x ) ⋅ L ( x)<br />
∫ F ∑ j ∫<br />
a<br />
1<br />
j=<br />
0<br />
b<br />
a<br />
() 1<br />
( x) ≅ F( x ) ⋅ L ( x)<br />
j<br />
1<br />
∑<br />
j=<br />
0<br />
⋅dx<br />
=<br />
j<br />
j<br />
( b − a)<br />
2<br />
⋅<br />
[ F( x ) + F( x )]<br />
• interpolacja wielomianowa stopnia 2 ( n = 2 ), czyli funkcją kwadratową:<br />
b<br />
( 2<br />
( x) ⋅dx<br />
≅ F( x ) ⋅ L )<br />
( x)<br />
∫ F ∑ j ∫<br />
a<br />
2<br />
j=<br />
0<br />
n = 2 → F<br />
b<br />
a<br />
j<br />
( 2<br />
( x) ≅ F( x ) ⋅ L )<br />
( x)<br />
⋅dx<br />
=<br />
2<br />
∑ j<br />
j=<br />
0<br />
( b − a)<br />
6<br />
⋅<br />
j<br />
0<br />
[ F( x ) + 4⋅<br />
F( x ) + F( x )]<br />
• interpolacja wielomianowa stopnia 3 ( n = 3), czyli funkcją trzeciego stopnia:<br />
b<br />
( 3<br />
( x) ⋅dx<br />
≅ F( x ) ⋅ L )<br />
( x)<br />
∫ F ∑ j ∫<br />
a<br />
3<br />
j=<br />
0<br />
b<br />
a<br />
n = 3 → F<br />
j<br />
⋅dx<br />
=<br />
3<br />
( 3<br />
( x) ≅ F( x ) ⋅ L )<br />
( x)<br />
∑<br />
j=<br />
0<br />
( b − a)<br />
8<br />
⋅<br />
j<br />
j<br />
0<br />
[ F( x ) + 3⋅<br />
F( x ) + 3⋅<br />
F( x ) + F( x )]<br />
0<br />
1<br />
1<br />
1<br />
2<br />
, (4)<br />
2<br />
, (5)<br />
3<br />
, (6)<br />
<strong>Kwadratury</strong> te noszą kolejno nazwy wzorów prostokątów, trapezów, Simpsona i Newtona. Dokładność<br />
kwadratury można podnieść zwiększając dokładność interpolacji (patrz rozdział poświęcony<br />
interpolacji). W szczególności jest to możliwe przy rezygnacji z warunku równomiernego rozmieszczenia<br />
węzłów interpolacji. I tak, jeżeli węzły interpolacji zostaną przyjęte w miejscach zerowych<br />
wielomianów Legendre’a, będziemy mieli do czynienia z kwadraturami typu Gaussa – Legendre’a.<br />
Ponieważ wielomiany Legendre’a podobnie jak wielomiany Czebyszewa (patrz rozdział<br />
Interpolacja) mają wszystkie miejsca zerowe w przedziale [ − 1,1]<br />
, to standardowo wzory te są podawane<br />
dla takiego właśnie przedziału, i wówczas wyglądają następująco:<br />
gdzie<br />
1<br />
∫<br />
−1<br />
F<br />
n<br />
( ξ ) ⋅ dξ = ∑w<br />
j<br />
⋅ F( ξ j<br />
)<br />
j=<br />
0<br />
, (7)<br />
w<br />
j<br />
oznaczają wagi, a ξ<br />
j<br />
węzły kwadratury. Jeżeli całkowanie ma być dokonane w dowolnym<br />
przedziale [ a, b]<br />
konieczna jest zmiana zmiennych:<br />
co prowadzi do:<br />
b<br />
∫<br />
a<br />
F<br />
b − a<br />
2<br />
a + b b − a<br />
x = + ξ ⋅<br />
[ a,<br />
b] [ −1,1]<br />
2 2<br />
2⋅<br />
x − a − b<br />
[ a , b]<br />
ξ =<br />
[ −1,1]<br />
b − a<br />
( x) ⋅dx<br />
= ⋅ F x( ξ )<br />
1<br />
∫<br />
n<br />
b − a<br />
( ) ⋅dξ<br />
= ⋅∑w<br />
j<br />
⋅ F( x( ξ<br />
j<br />
))<br />
2<br />
−1 j=<br />
0<br />
, (8)<br />
. (9)<br />
Po przyjęciu położeń węzłów wartości wag wyznacza się w taki sposób, aby kwadratura dawała<br />
ścisłe wyniki dla jednomianów możliwie najwyższego stopnia. Ponieważ operacja taka jest dość<br />
żmudna i musi być wykonana z dużą dokładnością, praktyczniej jest korzystać z wartości tablico-<br />
2
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
wych. Tablice takie można znaleźć w każdym podręczniku dotyczącym metod numerycznych. Tutaj<br />
przytoczymy współczynniki wybranych kwadratur za [ 1 ].<br />
Tablica 1. <strong>Kwadratury</strong> Gaussa rzędu 1 do 9<br />
n<br />
i<br />
ξ<br />
= −ξ<br />
( n)<br />
( n)<br />
i n−i+<br />
1<br />
( n)<br />
( n)<br />
w<br />
i<br />
= wn−i<br />
+ 1<br />
1 1 0,0000000000 2,0000000000<br />
2 1 0,5773502692 1,0000000000<br />
3<br />
1 0,7745966692 0,5555555556<br />
2 0,0000000000 0,8888888889<br />
4<br />
1 0,8611363116 0,3478548451<br />
2 0,3399810436 0,6521451549<br />
5<br />
1<br />
2<br />
3<br />
0,9061798459<br />
0,5384693101<br />
0,0000000000<br />
0,2369268851<br />
0,4786286705<br />
0,5688888889<br />
Wyznaczenie wartości wag i położeń węzłów jest również możliwe wprost z warunku ścisłego całkowania<br />
jednomianów możliwie najwyższego stopnia. Warunek ten pozwala zapisać tyle równań<br />
nieliniowych (10), ile jest niewiadomych (wag i położeń węzłów). Niestety ten sposób postępowania,<br />
pomimo, że najprostszy koncepcyjnie jest też najbardziej żmudny numerycznie, gdyż prowadzi<br />
do układu nieliniowych równań algebraicznych, który musi być rozwiązany z dużą dokładnością,<br />
ponieważ dokładność ta decyduje o jakości uzyskanych wyników całkowania.<br />
1<br />
∫<br />
−1<br />
x<br />
k<br />
1<br />
⋅dx<br />
= ⋅ x<br />
k + 1<br />
1<br />
k+<br />
1<br />
−1<br />
1<br />
= ⋅<br />
k + 1<br />
n<br />
k+<br />
1<br />
[ 1−<br />
( −1)<br />
] = ∑<br />
j=<br />
0<br />
w ⋅ x<br />
j<br />
k<br />
j<br />
. (10)<br />
I tak na przykład rozpisując stosowne zależności dla trójpunktowej kwadratury Gaussa, która prowadzi<br />
do wzorów <strong>numeryczne</strong>go całkowania ścisłych dla wielomianów do stopnia piątego włącznie<br />
otrzymujemy następujący układ sześciu nieliniowych równań algebraicznych:<br />
∫<br />
∫<br />
∫<br />
∫<br />
1<br />
∫<br />
−1<br />
1<br />
2<br />
−1<br />
1<br />
−1<br />
1<br />
4<br />
−1<br />
1<br />
x<br />
−1<br />
1<br />
∫<br />
−1<br />
x ⋅dx<br />
=<br />
1⋅dx<br />
= x<br />
⋅dx<br />
=<br />
3<br />
x ⋅dx<br />
=<br />
x<br />
⋅dx<br />
=<br />
5<br />
x ⋅dx<br />
=<br />
1<br />
2<br />
1<br />
3<br />
1<br />
4<br />
1<br />
5<br />
1<br />
6<br />
⋅ x<br />
⋅ x<br />
⋅ x<br />
⋅ x<br />
⋅ x<br />
1<br />
−1<br />
2<br />
1<br />
−1<br />
3<br />
1<br />
−1<br />
4<br />
1<br />
5<br />
1<br />
−1<br />
−1<br />
6<br />
1<br />
−1<br />
= w<br />
0<br />
= w<br />
= w<br />
0<br />
= w<br />
= w<br />
0<br />
0<br />
= w<br />
⋅1+<br />
w ⋅1+<br />
w<br />
0<br />
0<br />
⋅ x<br />
⋅ x<br />
2<br />
0<br />
⋅ x<br />
⋅ x<br />
0<br />
3<br />
0<br />
4<br />
0<br />
⋅ x<br />
5<br />
0<br />
1<br />
+ w ⋅ x<br />
1<br />
+ w ⋅ x<br />
1<br />
+ w ⋅ x<br />
1<br />
+ w ⋅ x<br />
1<br />
+ w ⋅ x<br />
1<br />
1<br />
2<br />
1<br />
3<br />
1<br />
4<br />
1<br />
5<br />
1<br />
2<br />
⋅1<br />
= 2<br />
+ w<br />
2<br />
+ w<br />
2<br />
+ w<br />
+ w<br />
2<br />
+ w<br />
⋅ x<br />
2<br />
2<br />
2<br />
⋅ x<br />
2<br />
2<br />
⋅ x<br />
⋅ x<br />
3<br />
2<br />
4<br />
2<br />
⋅ x<br />
5<br />
2<br />
= 0<br />
=<br />
= 0<br />
=<br />
2<br />
3<br />
2<br />
5<br />
= 0<br />
. (11)<br />
Ze wzorów (10) bądź (11) można natomiast natychmiast wywnioskować, że w przedziale [ − 1,1]<br />
węzły i wagi są rozmieszczone symetrycznie względem punktu 0 , co wprost zostało wykorzystane<br />
przy konstruowaniu Tablicy 1.<br />
1 J.Szmelter – <strong>Metod</strong>y komputerowe w mechanice, PWN 1980<br />
3
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
Możliwości podnoszenia dokładności kwadratury wiążą się oczywiście z:<br />
• zwiększaniem liczby węzłów w przedziale całkowania (podnoszenie stopnia wielomianu interpolującego);<br />
istotnym ograniczeniem jest tu występowanie efektu Rungego (patrz Interpolacja),<br />
powodujące, że do praktycznego stosowania nadają się wyłącznie kwadratury<br />
względnie niskiego (nie wyżej niż czwarty do siódmego) stopnia;<br />
• wykorzystaniem addytywności całki, podzieleniem przedziału całkowania na wiele części i<br />
stosowanie w każdej z nich kwadratury niskiego rzędu (tak zwane kwadratury złożone).<br />
Dla praktycznego prześledzenia sposobu postępowania przy numerycznym obliczaniu całek wyznaczymy<br />
wartość wyrażenia:<br />
4<br />
∫<br />
1<br />
ln<br />
4<br />
( ) ⋅ dx = ( x ⋅ln(<br />
x)<br />
− x) = 2. 545177<br />
x , (11)<br />
korzystając z różnych kwadratur. I tak kolejno korzystając ze wzorów (3)-(6) otrzymujemy odpowiednio<br />
dla kwadratur typu Newtona:<br />
4<br />
∫<br />
1<br />
4−1<br />
⎪ ( ln(1,0) + ln(4,0) ) ⋅<br />
2<br />
⎨<br />
4−1<br />
⎪ ( ln(1,0) + 4⋅ln(2,5)<br />
+ ln(4,0) ) ⋅<br />
6<br />
⎪( ln(1,0) + 3⋅ln(2,0)<br />
+ 3⋅ln(3,0)<br />
+ ln(4,0) )<br />
⎩<br />
1<br />
3<br />
⎧<br />
ln(1,0) ⋅<br />
1<br />
= 0,000000<br />
⎪<br />
= 2,079442<br />
ln( x ) ⋅ dx =<br />
, (12)<br />
= 2,525729<br />
4 <br />
⋅<br />
4−1<br />
8<br />
= 2,535590<br />
a dla kwadratur typu Gaussa po dokonaniu transformacji (8) 1 na położeniach węzłów danych w Ta-<br />
1 ,4 :<br />
blicy 1 w celu sprowadzenia ich do przedziału [ ]<br />
otrzymujemy ostatecznie:<br />
4<br />
∫<br />
1<br />
⎧<br />
x<br />
x<br />
x<br />
x<br />
(1)<br />
(2)<br />
(3)<br />
(4)<br />
:<br />
{<br />
x<br />
(1)<br />
1<br />
⎧x<br />
: ⎨<br />
⎩x<br />
⎧ x<br />
⎪<br />
: ⎨x<br />
⎪<br />
⎩x<br />
⎧x1<br />
⎪<br />
x2<br />
: ⎨<br />
⎪x3<br />
⎪<br />
⎩x4<br />
(4)<br />
(4)<br />
(4)<br />
(4)<br />
=<br />
(2)<br />
1<br />
(2)<br />
2<br />
(3)<br />
1<br />
(3)<br />
2<br />
(3)<br />
3<br />
1+<br />
4<br />
2<br />
=<br />
=<br />
=<br />
=<br />
=<br />
=<br />
=<br />
=<br />
=<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
1+<br />
4<br />
2<br />
+ 0,000000⋅<br />
1+<br />
4<br />
2<br />
− 0,577350⋅<br />
+ 0,577350⋅<br />
− 0,774596⋅<br />
+ 0,000000⋅<br />
+ 0,774596⋅<br />
− 0,861136⋅<br />
− 0,339981⋅<br />
+ 0,339981⋅<br />
+ 0,861136⋅<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
4−1<br />
2<br />
= 2,500000<br />
= 1,633974<br />
= 3,366025<br />
= 1,338105<br />
= 2,500000<br />
= 3,661895<br />
= 1,208296<br />
= 1,990028<br />
= 3,009972<br />
= 3,791704<br />
⎪<br />
(2) (2) (2) (2) 4−1<br />
( ln( x1<br />
) ⋅ w1<br />
+ ln( x2<br />
) ⋅ w2<br />
) ⋅<br />
2<br />
⎨<br />
(3) (3) (3) (3) (3) (3) 4−1<br />
⎪ ( ln( x1<br />
) ⋅ w1<br />
+ ln( x2<br />
) ⋅ w2<br />
+ ln( x3<br />
) ⋅ w3<br />
) ⋅<br />
2<br />
(4) (4) (4) (4) (4) (4) (4) (4)<br />
⎪( ln( x ) ⋅ w + ln( x ) ⋅ w + ln( x ) ⋅ w + ln( x ) ⋅ w )<br />
⎩<br />
ln( x<br />
) ⋅ w<br />
, (13)<br />
= 2,748872<br />
= 2,557122<br />
ln( x ) ⋅dx<br />
=<br />
.(14)<br />
= 2,546084<br />
1<br />
1<br />
2<br />
2<br />
(1)<br />
1<br />
(1)<br />
1<br />
3<br />
⋅<br />
4−1<br />
2<br />
3<br />
4<br />
4<br />
⋅<br />
4−1<br />
2<br />
= 2.545254<br />
Zestawmy tak obliczone wartości całki w tablicy w celu porównania dokładności uzyskanych wyników.<br />
W kolejnych kolumnach Tablicy 2 przedstawiono liczbę węzłów kwadratury n , wyniki całkowania<br />
kwadraturą typu Newtona i Gaussa oraz błąd względny procentowy tych wyników obliczony<br />
w stosunku do wartości analitycznej całki.
Tablica 2. Wyniki całkowania <strong>numeryczne</strong>go<br />
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
n<br />
Kwadratura<br />
Błąd<br />
Newtona Gaussa Newton Gauss<br />
1 0,000000 2,748872 100,000% 8,003%<br />
2 2,079442 2,557122 18,298% 0,469%<br />
3 2,525729 2,546084 0,764% 0,036%<br />
4 2,535590 2,545254 0,377% 0,003%<br />
Jak widać w każdym przypadku przy porównywalnym nakładzie pracy (liczba obliczeń wartości<br />
funkcji podcałkowej) zastosowanie kwadratury Gaussa prowadzi do znacząco (od 12 do ponad 120<br />
razy) dokładniejszych wyników.<br />
Rozważmy jeszcze kwestię kwadratur złożonych. Jak już zostało to zaznaczone powyżej, w ich<br />
konstrukcji wykorzystujemy addytywność całki, która oznacza, że całkę po pewnym przedziale<br />
możemy zastąpić sumą całek po przedziałach których suma daje przedział wyjściowy, czyli:<br />
gdzie oczywiście<br />
b<br />
m−1<br />
pi<br />
1 + 1<br />
∫ f x)<br />
⋅dx<br />
= ∫ f ( x)<br />
⋅dx<br />
+ ∑ ∫ f ( x)<br />
⋅ dx + ∫<br />
a<br />
p<br />
( f ( x)<br />
⋅dx<br />
, (15)<br />
a < p < ... < p < ... < p<br />
1 i m<br />
< .<br />
a<br />
b<br />
i=<br />
1 p<br />
W przypadku kwadratur typu Newtona przy stałej długości przedziału całkowania [ ]<br />
p<br />
i, p i +1<br />
równej<br />
h dla (16) i (17), 2 ⋅h<br />
dla (18) i 3 ⋅h<br />
dla (19) ( h oznacza tu odległość pomiędzy węzłami kwadratury)<br />
postępowanie powyższe prowadzi do wzorów:<br />
• interpolacja wielomianowa stopnia 0 ( n = 0 ), czyli funkcją stałą:<br />
b<br />
∫<br />
a<br />
F<br />
h<br />
1<br />
( x) ⋅dx<br />
≅ ⋅∑<br />
F( a + h⋅i)<br />
• interpolacja wielomianowa stopnia 1 ( n = 1), czyli funkcją liniową:<br />
b<br />
1⋅<br />
h<br />
2<br />
⎡<br />
⎢<br />
⎣<br />
m<br />
i=<br />
0<br />
m−1<br />
⎤<br />
∫ F( x) ⋅ dx ≅ ⋅ F( a) + 2⋅∑ F(<br />
a + h⋅i)<br />
+ F( b)<br />
⎥ ⎦<br />
a<br />
• interpolacja wielomianowa stopnia 2 ( n = 2 ), czyli funkcją kwadratową:<br />
b<br />
∫<br />
a<br />
F<br />
2⋅h<br />
6<br />
⎡<br />
⎢<br />
⎣<br />
m−1<br />
( x) ⋅dx<br />
≅ ⋅ F( a) + 4⋅<br />
∑ F( a + h⋅i) + 2⋅<br />
∑ F(<br />
a + h⋅i)<br />
+ F( b)<br />
i=<br />
1,3,...<br />
i<br />
i=<br />
1<br />
b<br />
p<br />
m<br />
m−2<br />
i=<br />
2,4,...<br />
, (16)<br />
• interpolacja wielomianowa stopnia 3 ( n = 3), czyli funkcją trzeciego stopnia:<br />
b<br />
∫<br />
a<br />
F<br />
3⋅<br />
h<br />
8<br />
⎡<br />
⎢<br />
⎣<br />
m−2<br />
, (17)<br />
( x) ⋅ dx ≅ ⋅ F( a) + 3⋅<br />
∑ F( a + h⋅i) + 2⋅<br />
∑ F( a + h⋅i) + 3⋅<br />
∑ F( a + h⋅i) + F( b)<br />
i=<br />
1,4,...<br />
m−3<br />
i=<br />
3,6,...<br />
m−1<br />
i=<br />
2,5,...<br />
⎥ ⎦<br />
⎤<br />
, (18)<br />
⎥ ⎦<br />
⎤<br />
, (19)<br />
Postępowanie to w przypadku kwadratur typu Gaussa jest równoznaczne z zastosowaniem prostej<br />
kwadratury odpowiedniego rzędu do każdego podprzedziału z osobna i zsumowaniem tak uzyskanych<br />
wyników.<br />
Dla zorientowania się, jaki jest wpływ gęstości podziału przedziału całkowania na dokładność wyniku<br />
finalnego rozwiążemy zadanie (11) tak dobierając liczbę podprzedziałów całkowania o jednakowej<br />
długości w każdej z metod, aby wynik finalny uzyskać z błędem względnym procentowym<br />
nie przekraczającym 0,003%. Wyniki tych obliczeń przedstawiono w Tablicy 3.<br />
5
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
Tablica 3. Porównanie efektywności metod całkowania<br />
n<br />
Newton<br />
Gauss<br />
h ile całka błąd h ile całka błąd<br />
1 0,00011 26850 2,545100 0,003% 0,05000 60 2,545255 0,003%<br />
2 0,03488 87 2,545101 0,003% 0,60000 10 2,545230 0,002%<br />
3 0,30000 11 2,545098 0,003% 1,50000 6 2,545224 0,002%<br />
4 0,20000 13 2,545142 0,003% 3,00000 4 2,545254 0,003%<br />
W kolejnych kolumnach tablicy, dla obydwu metod całkowania, przedstawiono długość pojedynczego<br />
przedziału całkowania (h), całkowitą liczbę punktów, w których należało obliczyć wartość<br />
funkcji podcałkowej (ile), obliczoną wartość całki (całka) oraz błąd względny procentowy uzyskanego<br />
wyniku w stosunku do wartości ścisłej (błąd).<br />
Ponieważ zasadniczym czynnikiem wpływającym na czas całkowania jest liczba obliczeń wartości<br />
funkcji podcałkowej, zgodnie z oczekiwaniem okazało się, że najbardziej efektywna z rozważanych<br />
powyżej jest czteropunktowa kwadratura Gaussa.<br />
Problemem z którym spotykamy się dość często przy numerycznym całkowaniu jest problem granic<br />
niewłaściwych (czyli w − ∞ lub + ∞ ). Możemy sobie z nim poradzić na dwa sposoby:<br />
• przez odpowiednią zmianę zmiennych (typu x =<br />
1<br />
t ):<br />
b<br />
∫<br />
a<br />
1<br />
a<br />
1 ⎛1⎞<br />
f ( x)<br />
⋅dx<br />
= ∫ ⋅ f ⎜ ⎟⋅dt<br />
; (20)<br />
2<br />
1 t ⎝ t ⎠<br />
b<br />
• zastosowanie kwadratur specjalnych:<br />
∞<br />
∫<br />
0<br />
∞<br />
∫<br />
x<br />
0<br />
∞<br />
∫<br />
α<br />
−∞<br />
(1 − x)<br />
e<br />
α<br />
⋅e<br />
−x<br />
−x<br />
2<br />
⋅ f ( x)<br />
⋅dx<br />
=<br />
⋅(1<br />
+ x)<br />
⋅ f ( x)<br />
⋅dx<br />
=<br />
β<br />
∑<br />
n<br />
∑<br />
j=<br />
1<br />
n<br />
j=<br />
1<br />
⋅ f ( x)<br />
⋅dx<br />
=<br />
w ⋅ f ( x )<br />
j<br />
j<br />
w ⋅ f ( x )<br />
n<br />
∑<br />
j=<br />
1<br />
j<br />
j<br />
j<br />
w ⋅ f ( x )<br />
j<br />
, (21)<br />
kwadratury te noszą odpowiednio nazwy Gaussa–Laguerre’a, Gaussa–Hermita i Gaussa–<br />
Jacobiego.<br />
Stosując kwadratury te należy pamiętać o tym, że ich współczynniki (położenia węzłów i wagi) są<br />
określone i mogą być używane jedynie wówczas gdy przedział całkowania i funkcja podcałkowa<br />
mają postać dokładnie taką jak we wzorach (21).<br />
W przypadku osobliwości całkowalnej (np. typu (22) ) powinniśmy najpierw przez odpowiednią<br />
zmianę zmiennych pozbyć się osobliwości i dopiero wtedy zastosować którąś z standardowych<br />
kwadratur.<br />
1<br />
( x − a)<br />
Stosowne wzory przedstawiono poniżej:<br />
γ<br />
,<br />
0 ≤ γ < 1<br />
. (22)<br />
b<br />
∫<br />
a<br />
x − a = t<br />
1−γ<br />
( b−a)<br />
1<br />
f ( x)<br />
⋅dx<br />
= ⋅<br />
−<br />
∫ t<br />
1 γ<br />
0<br />
1−<br />
1<br />
γ<br />
1−<br />
1<br />
γ<br />
⋅ f ( t<br />
1−<br />
1<br />
γ<br />
+ a)<br />
⋅dt<br />
. (23)<br />
6
Michał Pazdanowski<br />
<strong>Instytut</strong> Technologii Informacyjnych w Inżynierii Lądowej<br />
Wydział Inżynierii Lądowej<br />
Politechnika Krakowska<br />
Rozpatrzmy takie postępowanie na bardzo prostym przykładzie:<br />
4<br />
2<br />
⎧ x = t ⎫<br />
⎩dx<br />
= 2⋅t<br />
⋅ dt⎭<br />
2<br />
∫ ⋅ dx = ⎨ ⎬ = 2⋅∫cos(<br />
t ) ⋅<br />
0<br />
cos( x)<br />
x<br />
2<br />
0<br />
dt<br />
. (24)<br />
W przypadku całkowania w obszarze dwuwymiarowym korzystamy z twierdzenia, że całkowanie w<br />
takim obszarze po powierzchni czworokąta D może być zastąpione całkowaniem po powierzchni<br />
obszaru wzorcowego (kwadrat ∆ ). Warunkiem poprawności tego postępowania jest skonstruowanie<br />
odwzorowania, w którym obszar D jest przedstawiony jako obraz obszaru ∆ . Stosowne odwzorowanie<br />
można zbudować posługując się wielomianami interpolacyjnymi Lagrange’a w dwóch<br />
wymiarach (patrz rozdział dotyczący interpolacji, wzory (68) i następne, w których elementem<br />
wzorcowym jest obszar ∆ , a wzory transformacyjne x = u( ξ,<br />
η)<br />
i y = v( ξ,<br />
η)<br />
mają postać (69)).<br />
Wówczas, jeżeli tylko spełniona jest zależność:<br />
dla każdego punktu obszaru ∆ , to prawdziwy jest wzór:<br />
∫∫<br />
D<br />
∂u(<br />
ξ,<br />
η)<br />
∂u(<br />
ξ,<br />
η)<br />
∂ξ ∂η<br />
J =<br />
≠ 0 , (25)<br />
∂v(<br />
ξ,<br />
η)<br />
∂v(<br />
ξ,<br />
η)<br />
∂ξ ∂η<br />
∫∫<br />
∆<br />
( u( ξ,<br />
η) , v( ξ,<br />
η)<br />
)<br />
f ( x,<br />
y)<br />
⋅dxdy<br />
= f<br />
⋅ J ⋅dξdη<br />
, (26)<br />
i wtedy całkę w dwóch wymiarach można obliczyć jako złożenie dwóch całek w jednym wymiarze,<br />
co ostatecznie prowadzi do zależności:<br />
∫∫<br />
D<br />
f<br />
N N<br />
x y<br />
( x y) ⋅dxdy<br />
= w ⋅ w ⋅ F( x( ξ , η ),<br />
y( ξ , η<br />
)<br />
∑∑<br />
, , (27)<br />
j = 1j<br />
= 1<br />
x<br />
y<br />
j<br />
x<br />
j<br />
y<br />
j<br />
x<br />
j<br />
y<br />
j<br />
x<br />
j<br />
y<br />
gdzie:<br />
F<br />
∂x<br />
∂x<br />
4<br />
4<br />
⎛<br />
⎞ ∂ξ ∂η<br />
, ⋅ yi<br />
⎟⋅ , (28)<br />
⎝ i= 1<br />
i=<br />
1 ⎠ ∂y<br />
∂y<br />
∂ξ ∂η<br />
( ξ η) = f ⎜∑<br />
Ni( ξ,<br />
η) ⋅ xi<br />
, ∑ Ni( ξ,<br />
η)<br />
(patrz wzory (69) w rozdziale dotyczącym interpolacji).<br />
Warto zauważyć, że ze wzorów (27) wynika możliwość całkowania w kierunkach ξ i η przy użyciu<br />
kwadratur różnego rzędu (z różną dokładnością). Postępowanie takie może być uzasadnione w<br />
przypadku rozwiązywania zadań, w których zmienne podstawowe mają różny charakter (np. przestrzeń<br />
i czas).<br />
Podaną procedurę można łatwo uogólnić na przypadki całkowania w obszarze trój i więcej wymiarowym.<br />
7