Wykład 13 - materiały pomocnicze (sesja Maximy)
Transkrypt
Wykład 13 - materiały pomocnicze (sesja Maximy)
Obliczanie calek: metody numeryczne i analityczne Calke oznaczona zdefiniowaliśmy jako granice ciagu odpowiednich sum. (%i38) a:0$ b:1$ f(x):=x^2$ (%i41) x(i,n):= a + i*((b-a)/n); (%o41) x (i, n) := a + i (%i42) load(draw)$ b−a n Funkcja wxgr(n) pozwala na graficzna prezentacje trapezu krzywoliniowego odpowiadajacego funkcji f i odcinkowi [a,b] oraz figury skladajacej sie z n prostokatów, której pole ma przybliżać pole tego trapezu. Funkcja pochodzi ze skryptu num int graphics demo2.wxm, którego autorem jest Daviad Stegenga, dostepnego opod adresem: http://www.math.hawaii.edu/ dave/wxMaxima/num int graphics demo2.wxm (%i43) rects(n):= makelist(rectangle([x(k-1,n),0],[x(k,n),f(x(k-1,n))]), k,1,n)$ (%i44) 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: (%i45) wxgr(5)$ (%t45) Rysunek dla n=6: 1 (%i46) wxgr(10)$ (%t46) Funkcja left(n) oblicza sume pól odpowiednich praostokatów dla zadanego n; ,,left” należy kojarzyć z tym, że wysokości prostokatów sa równe wartościom funkcji w lewych końcach przedzialów. Funkcja left(n) jest realizacja najprostszej metody calkowania numerycznego (”prostokatów”). (%i47) (%o47) left(n):= sum(f(x(i-1,n)),i,1,n)*((b-a)/n); left (n) := n X f (x (i − 1, n)) i=1 b−a n Wartości funkcji left dla n=5 i dla n=10: (%i48) (%o48) (%i49) (%o49) float(left(5)); 0.24 float(left(10)); 0.285 Wartośći funkcji left dla n=10,100,1000,10000 zbiegaja do 1/3 (%i50) for m:2 thru 5 do print(m, float(left(10^m)), 1/3)$ 1 1 1 1 20.32835 30.3328335 40.333283335 50.33332833335 3 3 3 3 Pole naszego trapezu krzywoliniowego można obliczyć korzystajac z tw. NewtonaLeibniza wykonujac rachunki symboliczne przy użyciu procedury integrate: (%i51) integrate(x^2, x, 0, 1); (%o51) 1 3 2 Wartość przybliżona naszej calki można obliczyć przy użyciu procedury quad qags. Procedura ta wykorzystuje ona algorytmy calkowania numerycznego. (%i52) (%o52) quad_qags(f(x), x, 0, 1); [0.33333333333333, 3.7007434154171903 10−15 , 21, 0] 3