Verzija 1.0, 2010-09-29, Krešimir Kumerički

{{{id=402| var('a b c x y z t') /// }}}

Matematička analiza

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.