Výpočet integrálů programem Sage

Neurčitý integrál


Pro výpočet neurčitého integrálu slouží funkce integrate. Integrační konstanta není ve výsledku zahrnuta. Přepínání mezi jednotlivými metodami probíhá automaticky (ve skutečnosti program používá jiné postupy než student matematiky). Vypočteme $\int x^3 \sin(x)\;\textrm{d}x$

{{{id=1| integrate(x^3*sin(x),x) /// \newcommand{\Bold}[1]{\mathbf{#1}}3 \, {\left(x^{2} - 2\right)} \sin\left(x\right) - {\left(x^{3} - 6 \, x\right)} \cos\left(x\right) }}}

Kontrola: Pokud výsledek integrace zderivujeme a upravíme, obdržíme původní funkci.

{{{id=4| diff(_,x) /// \newcommand{\Bold}[1]{\mathbf{#1}}{\left(x^{3} - 6 \, x\right)} \sin\left(x\right) + 6 \, x \sin\left(x\right) }}} {{{id=15| (_).simplify_full() /// \newcommand{\Bold}[1]{\mathbf{#1}}x^{3} \sin\left(x\right) }}}

Určitý integrál

Výpočet určitého integrálu $\int_1^e \ln(x)\;\textrm{d}x$ je možno realizovat buďto pomocí dalších volitelných parametrů příkazu integrate (viz následující výpočet), nebo pomocí neurčitého integrálu a Newtonovy - Leibnizovy formule.

{{{id=2| integrate(ln(x),x,1,e) /// \newcommand{\Bold}[1]{\mathbf{#1}}1 }}}

Určitý integrál $\int_1^e \ln(x)\;\textrm{d}x$ pomocí Newtonovy - Leibnizovy formule.

{{{id=3| f(x)=integrate(ln(x),x) f(e)-f(1) /// \newcommand{\Bold}[1]{\mathbf{#1}}1 }}}

Geometrická interpretace a střední hodnota

{{{id=25| f(x)=ln(x) # upravte dle potreby a,b=1,e # upravte dle potreby P=map(latex,(a,b,f(x),integrate(f(x),(x,a,b)))) html('Grafická interpretace integrálu $\int_{%s}^{%s} %s=%s$'%(P[0],P[1],P[2],P[3])) plot(f(x),(x,a,b), fill=True) /// Grafická interpretace integrálu \int_{1}^{e} \log\left(x\right)=1 }}}

Střední hodnota je výška obdélníku, který má stejnou stranu na ose $x$ a stejný obsah jako křivočarý lichoběžník pod křivkou.

{{{id=27| opts = {'figsize': [3,2], 'ymax':1} f(x)=ln(x) a=1 b=e stredni_hodnota=integrate(f(x),(x,a,b))/(b-a) obr1 = plot(f(x),(x,a,b), fill='axis', fillcolor='green', **opts) obr2 = plot(stredni_hodnota,(x,a,b), fill='axis', fillcolor='red', **opts) html.table([['Plocha pod křivkou','Střední hodnota'],[obr1,obr2],['Dohromady\
(obsahy obrazců jsou stejné)'],[obr1+obr2]]) ///
Plocha pod křivkou Střední hodnota
Dohromady
(obsahy obrazců jsou stejné)
}}}

Numerická aproximace

U integrálů, které program nedokáže vypočítat přesně, je možno použít numerickou aproximaci

{{{id=12| integrate(sin(x)/x,0,1) /// \newcommand{\Bold}[1]{\mathbf{#1}}\int_{0}^{1} \frac{\sin\left(x\right)}{x}\,{d x} }}}

Při numerické aproximaci je výsledkem uspořádaná dvojice (přibližná hodnota, odhad chyby).

{{{id=7| integral_numerical(sin(x)/x,0,1) /// \newcommand{\Bold}[1]{\mathbf{#1}}\left(0.946083070367, 1.05036320793 \times 10^{-14}\right) }}} {{{id=10| integral_numerical(ln(x),1,e) /// \newcommand{\Bold}[1]{\mathbf{#1}}\left(1.0, 1.11022302463 \times 10^{-14}\right) }}}

Grafická ilustrace Riemannova integrálu

{{{id=16| from sage.plot.polygon import Polygon def rieman_sum(n=5, f=x^2, start=0, end=1): a = start b = end func(x) = f division = [a]+[a+random()*(b-a) for i in range(n-1)]+[b] division = [i.n() for i in division] division.sort() xs = [division[i]+random()*(division[i+1]-division[i]) for i in range(n)] ys = [func(x_val) for x_val in xs] rects = Graphics() for i in range(n): body=[[division[i],0],[division[i],ys[i]],[division[i+1],ys[i]],[division[i+1],0]] if ys[i].n()>0: color_rect='green' else: color_rect='red' rects = rects +polygon2d(body, rgbcolor = color_rect,alpha=0.1)\ + point((xs[i],ys[i]), rgbcolor = (1,0,0))\ + line(body,rgbcolor='black',zorder=-1) html('Riemanův součet $\sum_i f(\eta_i)(x_i-x_{i-1})$') html("Funkce: $%s$; interval: $[%s,%s]$; počet podintervalů: %s \ "%(latex(func(x)),latex(a),latex(b),n)) show(plot(func(x),(x,a,b),zorder=5) + rects) delka_intervalu=[division[i+1]-division[i] for i in range(n)] html.table([["Podinterval","Reprezentant","Funkční hodnota","Délka intervalu"]]\ +[[[division[i],division[i+1]],xs[i],ys[i],delka_intervalu[i]] for i in range(n)],\ header=True) print "Integrální součet: "+str(sum([ys[i]*delka_intervalu[i] for i in range(n)])) rieman_sum(f=sin(x),n=8,end=2*pi) /// Riemanův součet \sum_i f(\eta_i)(x_i-x_{i-1}) Funkce: \sin\left(x\right); interval: [0,2 \, \pi]; počet podintervalů: 8
Podinterval Reprezentant Funkční hodnota Délka intervalu
\left[0.000000000000000, 1.00377544662873\right] 0.793767551076022 0.712999997792661 1.00377544662873
\left[1.00377544662873, 1.34996075363552\right] 1.06236516200600 0.873509302967417 0.346185307006788
\left[1.34996075363552, 2.24691969819511\right] 1.57262577856236 0.999998326553582 0.896958944559589
\left[2.24691969819511, 3.58444982671063\right] 2.55412003820326 0.554259141536326 1.33753012851551
\left[3.58444982671063, 4.96128323025358\right] 4.60630726970628 -0.994378609910092 1.37683340354296
\left[4.96128323025358, 5.00285566790995\right] 4.98934897282723 -0.961891119413303 0.0415724376563684
\left[5.00285566790995, 5.98795314683338\right] 5.20985198888608 -0.878796034899126 0.985097478923429
\left[5.98795314683338, 6.28318530717959\right] 6.04472607405224 -0.236205739496968 0.295232160346208
Integrální součet: 0.311866588096767 }}} {{{id=18| from sage.plot.polygon import Polygon def lichobeznikove_pravidlo(n=5, f=x^2, start=0, end=1): a = start b = end func(x) = f division = [a]+[a+(i+1)*(b-a)/n for i in range(n-1)]+[b] division = [i.n() for i in division] rects = Graphics() ys=[func(i).n() for i in division] for i in range(n): body=[[division[i],0],[division[i],ys[i]],[division[i+1],ys[i+1]],[division[i+1],0]] color_rect='gray' rects = rects +polygon2d(body, rgbcolor = color_rect,alpha=0.1)\ + line(body,rgbcolor='black',zorder=-1) show(plot(func(x),(x,a,b),zorder=5) + rects) m=[1]+[2 for i in range(n-1)]+[1] my=[ys[i]*m[i] for i in range (n+1)] html.table([[x,\ "m",\ "f(x)",\ "mf(x)"]]+zip(division,m,ys,my)\ +[["","","Součet:",sum(my)]],header=True) vysledky=map(latex,(a,b,func(x),((b-a)/(2*n)*sum(my)).n())) html(r"$\int_{%s}^{%s}%s dx\approx %s $"%(latex(a),latex(b),latex(func(x)),\ latex(((b-a)/(2*n)*sum(my)).n()))) lichobeznikove_pravidlo(f=1/2+sin(x),n=8,end=6) ///
x m f(x) mf(x)
0.000000000000000 1 0.500000000000000 0.500000000000000
0.750000000000000 2 1.18163876002333 2.36327752004667
1.50000000000000 2 1.49749498660405 2.99498997320811
2.25000000000000 2 1.27807319688792 2.55614639377584
3.00000000000000 2 0.641120008059867 1.28224001611973
3.75000000000000 2 -0.0715613187423437 -0.143122637484687
4.50000000000000 2 -0.477530117665097 -0.955060235330194
5.25000000000000 2 -0.358934493426592 -0.717868986853184
6.00000000000000 1 0.220584501801074 0.220584501801074
Součet: 8.10118654528336
\int_{0}^{6}\sin\left(x\right) + \frac{1}{2} dx\approx 3.03794495448126 }}} {{{id=24| /// }}}