Obliczanie całek: metody numeryczne i analityczne
Całkę oznaczoną zdefiniowaliśmy jako granicę
ciągu odpowiednich sum.
--> | a:0$ b:1$ f(x):=x^2$ |
--> | x(i,n):= a + i*((b-a)/n); |
--> | load(draw)$ |
Funkcja wxgr(n) pozwala na graficzną
prezentację trapezu krzywoliniowego
odpowiadającego funkcji f i odcinkowi [a,b]
oraz figury składającej się z
n prostokątów, której pole ma przybliżać pole tego trapezu.
Funkcja pochodzi ze skryptu
num_int_graphics_demo2.wxm, którego autorem jest
David Stegenga, dostępnego opod adresem:
http://www.math.hawaii.edu/~dave/wxMaxima/num_int_graphics_demo2.wxm
--> |
rects(n):= makelist(rectangle([x(k-1,n),0], [x(k,n),f(x(k-1,n))]), k,1,n)$ |
--> |
wxgr(n):= apply(wxdraw2d, append( [xrange = [a-(b-a)/4,b+(b-a)/4], color = blue], rects(n), [transparent = true, explicit(f(x),x,a-(b-a)/4,b+(b-a)/4)]) )$ |
Rysunek dla n=5:
--> | wxgr(5)$ |
Rysunek dla n=10:
--> | wxgr(10)$ |
Funkcja left(n) oblicza sumę pól
odpowiednich prostokątów dla zadanego n;
,,left'' należy kojarzyć z tym, że wysokości prostokątów są równe
wartościom funkcji w lewych końcach przedziałów.
Funkcja left(n) jest realizacją najprostszej metody całkowania
numerycznego (''metody prostokątów'').
--> | left(n):= sum(f(x(i-1,n)),i,1,n)*((b-a)/n); |
Wartości funkcji left dla n=5 i dla n=10:
--> | float(left(5)); |
--> | float(left(10)); |
Wartośći funkcji left dla n=10,100,1000,10000 zbiegają do 1/3:
--> | for m:2 thru 5 do print(m, float(left(10^m)), 1/3)$ |
Pole naszego trapezu krzywoliniowego można
obliczyć korzystając z tw. Newtona-Leibniza
wykonując rachunki symboliczne przy użyciu procedury integrate:
--> | integrate(x^2, x, 0, 1); |
Wartość przybliżoną naszej całki można obliczyć
przy użyciu procedury quad_qags. Procedura ta wykorzystuje
algorytmy całkowania numerycznego. Wynikiem jest lista
składająca się z czterech elementów:
wartości przybliżonej całki, oszacowania błędu,
liczby iteracji oraz kodu błędu.
Kod błędu równy 0 oznacza, że ,,nie wystąpiły żadne problemy''
(no problems encountered).
--> | quad_qags(f(x), x, 0, 1); |
Przykład funkcji, dla której "Maxima"
nie wykonuje obliczeń przy użyciu
twierdzenia Newtona-Leibniza, co wskazuje na to,
że całka nieoznaczona tej funkcji nie da się
wyrazić przez funkcje elementarne.
--> | g(x):=sin(cos(x)); |
--> | integrate(g(x), x, 0, 1); |
Obliczenia przy użyciu procedury quad_ags
pozwalają na wyznaczenie przybliżonej wartości
całki z g(x) w granicach od 0 do 1.
--> | quad_qags(g(x), x, 0, 1); |