Verzija 1.0, 2010-09-29, Krešimir Kumerički
{{{id=402| var('a b c x y z t') /// }}}Sage sadrži sve standardne operacije koje se uče u matematičkoj analizi, poput limesa, nizova, redova i diferencijalnog računa. Limesi se izvrijednjavaju funkcijom limit():
{{{id=322| limit(sin(x)/x, x=0) /// }}} {{{id=418| limit((1+1/x)^x, x=oo) /// }}}Taylorov ili Laurentov razvoj neke funkcije po nekoj varijabli oko neke točke do nekog reda radi funkcija taylor():
{{{id=99| taylor(sin(x), x, 0, 5) /// }}}taylor() može dati i Laurentov razvoj u kompleksnoj ravnini. Npr, poznato je da
$$ \frac{1}{z^2 + 1}=-\left(\frac{i}{2}\right)\frac{1}{z-i}-\left(\frac{i}{2}\right)^2-\left(\frac{i}{2}\right)^3(z-i)-\left(\frac{i}{2}\right)^4(z-i)^2-\cdots.$$
što do nultog reda dobivamo ovako:
{{{id=405| taylor(1/(z^2+1), z, I, 0) /// }}}Za izračun reziduuma ne postoji posebna funkcija, ali i njega možemo dobiti pomoću funkcije taylor() zahvaljujući činjenici da je reziduum jednak minus prvom koeficijentu (onom uz $1/(z-z_0)$) u Laurentovom redu.
{{{id=408| lrnt = taylor(e^z/z^5, z, 0, -1); lrnt /// }}}Recimo da želimo iz gornje reda ekstrahirati upravo član koji odgovara reziduumu. Za to možemo koristiti metodu operands() koja daje listu operanada u nekom izrazu. Npr. za ovaj red operator je zbrajanje a operandi su članovi:
{{{id=413| print lrnt.operator() print lrnt.nops() # ukupni broj operanada, korisno kad treba iterirati po njima lrnt.operands() /// }}}Ekstrakcija n-tog člana liste izvodi se indeksiranjem: lista[n], gdje brojanje kreće od nule. Kako je gore reziduum prvi član liste dobijemo ga, uz micanje samog pola 1/z, ovako:
{{{id=410| z*lrnt.operands()[0] /// }}}♦ Zadatak 2-3.1: Odredite Taylorov razvoj funkcije $f(x) = \arctan(x^2+1)$ oko točke $x=\infty$ do šestog reda.
♦ Zadatak 2-3.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 šestog reda, ali oko $x=0$?
Deriviranje se radi funkcijom diff()
{{{id=378| diff(exp(2*x)*cos(3*x), x) /// }}}Višestruko deriviranje:
{{{id=379| diff(exp(2*x)*cos(3*x), x, 4) /// }}}(*)Deriviranje izraza koji uključuje (nepoznatu) opću funkciju f(x), korištenjem Leibnitzovog lančanog pravila:
{{{id=447| f = function('f') # simboličke funkcije treba deklarirati diff(x^2*f(x), x) /// }}}Simboličko neodređeno integriranje (integriramo izraz koji smo gore dobili deriviranjem):
{{{id=384| integral(-3*e^(2*x)*sin(3*x) + 2*e^(2*x)*cos(3*x), x).simplify_full() /// }}}Ovaj je izraz ekvivalentan onom gore, ali to ovdje nije eksplicitno. Ponekad je korisno eksperimentirati i s drugim algoritmima integriranja:
{{{id=441| integral(-3*e^(2*x)*sin(3*x) + 2*e^(2*x)*cos(3*x), x, algorithm='sympy') /// }}}Primijetite da se konstanta integracije podrazumijeva bez navođenja.
Simboličko rješavanje određenih integrala:
{{{id=385| integral( x*log(x), x, 0, 1) /// }}}Neki integrali su preteški ili se naprosto ne daju prikazati u zatvorenoj formi pa Sage vraća zadani izraz:
{{{id=458| integral(arctan(gamma(x)), x, 0, 1) /// }}}Tada nam ostaje numerička integracija pomoću numerical_integral() čiji rezultat je dan kao tzv. "tuple" što je objekt sličan listi, ali označen okruglim, a ne uglatim zagradama. (Tuple je brži od liste, ali mu se ne može mijenjati sastav.) Prvi element tupla je rezultat integracije, a drugi procijenjena greška.
{{{id=392| numerical_integral(arctan(gamma(x)), 0, 1) /// }}}Primijetite da se kod numeričke integracije ne navodi eksplicitno varijabla integracije već se ona određuje automatski.
♦ Zadatak 2-3.3: 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.
Ukoliko integracija ovisi o nekom parametru, defaultni 'maxima' algoritam za integriranje može tražiti da se izjasnimo o svojstivima tog parametrima o kojima ovisi rezultat integracije. Dodjeljivanje svojstava simboličkim varijablama izvodi se pomoću funkcije assume(). Kako takve pretpostavke ne bi utjecale na kasnije računa treba ih što prije pobrisati s forget().
{{{id=468| integral(y*sqrt(x*y), y, 0, 1-x) /// }}} {{{id=465| assume(x-1==0); integral(y*sqrt(x*y), y, 0, 1-x).factor(); forget() /// }}}U ovom konkretnom slučaju rezultat zapravo ne ovisi o predznaku od $x$, što 'maxima' izgleda ne zna, ali 'sympy' zna:
{{{id=463| integral(y*sqrt(x*y), y, 0, 1-x, algorithm='sympy') /// }}}♦ Zadatak 2-3.4: Izračunajte integral
$$ \int_{0}^{\infty} dt\, e^{-t} \sqrt{t} $$
simbolički i numerički i usporedite rezultate.
♦ Zadatak 2-3.5: Izračunajte dvostruki određeni integral
$$ \int_{0}^{1} dx \: \int_{0}^{1-x} dy \: (x+y) \sqrt{x y^3}$$
♦ Zadatak 2-3.6: Izračunajte dvostruki neodređeni integral
$$ \int dx \: \int dy \: (x+y) \sqrt{x y^3}$$
i provjerite rezultat deriviranjem i algebarskim manipulacijama.