>>> from sympy import *
>>> x, y, z, t, a, b, c = symbols('x, y, z, t, a, b, c')

4.3. Matematička analiza

Za simbolički pristup standardnim temama iz matematičke analize, poput limesa, nizova, redova, derivacija, integrala i diferencijalnih jednadžbi, koristimo sympy paket.

4.3.1. Limesi

Limesi se izvrijednjavaju funkcijom limit:

>>> limit(sin(x)/x, x, 0)
1

>>> limit((1+1/x)**x, x, oo)
E

4.3.2. Razvoj u red

Taylorov razvoj neke funkcije po nekoj varijabli oko neke točke do nekog reda radi funkcija series:

>>> ser = series(sin(x), x, 0, 6); ser
x - x**3/6 + x**5/120 + O(x**6)

gdje je upotrijebljena standardna Landauova oznaka zanemarenog ostatka. S ovakvim se izrazom može dalje računati i ostatak apsorbira članove tog i višeg reda:

>>> ser + 1 + x**7
1 + x - x**3/6 + x**5/120 + O(x**6)

a ukoliko nam taj ostatak smeta, možemo ga maknuti metodom removeO:

>>> ser.removeO()
x**5/120 - x**3/6 + x

Zadatak 1

Odredite Taylorov razvoj funkcije \(f(x) = \arctan(x^2+1)\) oko točke \(x=\infty\) do petog reda.

Zadatak 2

Kolika je relativna pogreška koju radimo ako za izvrijednjavanje \(f(2)=\arctan(5)\) koristimo red dobiven u gornjem zadatku? Da li bi greška bila manja da smo upotrebljavali razvoj do petog reda, ali oko \(x=0\)?

Zadatak 3

Za koji \(x\) greška razvoja funkcije \(f(x) = \arctan(x^2+1)\) do petog reda oko točke \(x=0\) postaje jednaka greški istog razvoja, ali oko točke \(x=\infty\)?

4.3.3. Derivacije

Deriviranje se radi funkcijom diff

>>> diff(exp(2*x)*cos(3*x), x)
-3*exp(2*x)*sin(3*x) + 2*exp(2*x)*cos(3*x)

Višestruko deriviranje:

>>> diff(exp(2*x)*cos(3*x), x, 4)
(120*sin(3*x) - 119*cos(3*x))*exp(2*x)

Deriviranje izraza koji uključuje opću simboličku funkciju f(x), korištenjem Leibnitzovog lančanog pravila:

>>> f = Function('f')  #  simboličke funkcije treba deklarirati
>>> df = diff(x**2 * f(x), x); df
x**2*Derivative(f(x), x) + 2*x*f(x)

>>> df.subs(f, sin)
x**2*Derivative(sin(x), x) + 2*x*sin(x)

>>> df.subs(f, sin).doit()
x**2*cos(x) + 2*x*sin(x)

4.3.4. Simboličko integriranje

Simboličko neodređeno integriranje (integriramo izraz koji smo gore dobili deriviranjem):

>>> integrate(-3*exp(2*x)*sin(3*x) + 2*exp(2*x)*cos(3*x), x)
exp(2*x)*cos(3*x)

Primijetite da se konstanta integracije podrazumijeva bez navođenja.

Simboličko rješavanje određenih integrala:

integrate(x*log(x), (x, 0, 1))
-1/4

Zadatak 4

Izračunajte neodređeni integral

\[\int \frac{x^2 +3}{x^5 + x^4 -x -1} dx\]

i onda provjerite dobiveni rezultat deriviranjem i algebarskim manipulacijama.

Zadatak 5

Izračunajte (simbolički) dvostruki određeni integral

\[\int_{0}^{1} dx \: \int_{0}^{1-x} dy \: x y^2\]

Zadatak 6

Izračunajte dvostruki neodređeni integral

\[\int dx \: \int dy \: (x+y) \sqrt{x y^3}\]

i provjerite rezultat deriviranjem.

4.3.5. Numeričko integriranje

Neki integrali su preteški ili se naprosto ne daju prikazati u zatvorenoj formi pa sympy vraća zadani izraz:

>>> integrate(atan(gamma(x)), (x, 0, 1))
Integral(atan(gamma(x)), (x, 0, 1))

Tada nam preostaje numerička integracija. U paketu scipy.integrate ima nekoliko rutina za numeričku integraciju. Npr. quad daje rezultat kao tupl. Prvi element tupla je rezultat integracije, a drugi procijenjena greška.

>>> import scipy.integrate
>>> scipy.integrate.quad(lambdify(x, atan(gamma(x))), 0, 1)
(1.1020657425550973, 2.3166346669288508e-14)

Zadatak 7

Izračunajte integral

\[\int_{0}^{\infty} dt\, e^{-t} \sqrt{t}\]

simbolički i numerički i usporedite rezultate. Naputak: oo je simbolička beskonačnost, a za potrebe numeričke integracije, beskonačnost je reprezentirana kao np.inf.