Töölehe optimaalse kujunduse huvides veendu, et tööriistaribal on töölehe staatuseks märgitud **Trusted**. Kui nupukese pealkiri on **Not Trusted**, siis vajuta sellele.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Jupyter Notebook** on veebilehitsejas toimiv märkmeraamatu-tüüpi arvutuskeskkond. Sellises keskkonnas saab mitte ainult interaktiivselt arvutada (nagu [Matlab](https://en.wikipedia.org/wiki/MATLAB)'is), vaid ka arvutust dokumenteerida ning koostada mitmekülgse matemaatilise sisuga dokumente ja õppematerjale. Käesolevas juhendis eeldame, et arvutuskeeleks on [Python](https://docs.python.org/3/), mis on hetkel populaarseim ja rikkaliku [teadusliku ökosüsteemiga](https://www.scipy.org/about.html).\n",
"\n",
"Jupyteri tööleht koosneb ühetaolistest kastikestest e. lahtritest (*cell*), mis on kõik töölehe laiused ja vertikaalselt rivistatud. Näiteks siinse kastikese sisuks on tavaline tekst, aga järgnev lahter on ette nähtud koodi käivitamiseks. Lihtsaim, mida Jupyter suudab teha, on kalkulaatori asendamine. Kirjuta järgmisse lahtrisse avaldis \n",
"`4.3 + 1.75 * 2.1 / (8.6 - 5.1)` \n",
"ja vajuta Ctrl+Enter!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kohe kastikese järel peaks tekkima arvutuse tulemus `5.35`. Trükituna või paberile kirjutatuna näeks see avaldis välja nii: $$4,\\!3 + \\frac{1,\\!75\\times 2,\\!1}{8,\\!6 - 5,\\!1}.$$ Muuda koodi lahtris ja veendu, et pärast Ctrl+Enter vajutamist tulemus vastavalt uueneb!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Algteadmised"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Toimetamine Jupyteri töölehel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Märkmeraamatu ülaservas paiknevad tiitelriba, menüüriba ja tööriistariba. Tiitelribal kuvatakse faili nimi (muutmiseks kliki sellel). Ekraanipinna säästmiseks saab tiitelriba ära peita käsuga **View | Toggle Header**. (Vajadusel võib ka veebibrauseri viia täisekraani režiimi, F11).\n",
"\n",
"Tööleht salvestub automaatselt iga paari minuti tagant. Töölehe koosseisus säilivad kõik lahtrid koos arvutustulemustega (sh graafikud). Kui salvestada tööleht käsuga **Save and Checkpoint** (esimene nupp tööriistaribal), luuakse ühtlasi ka varukoopia. Vajadusel saab sellest töölehe taastada käsuga **File | Revert to Checkpoint**.\n",
"\n",
"Jupyteri töölehel on kaks erinevat seisundit. Redigeerimisrežiimis (*edit mode*) sisestatakse klahvivajutustega lihtsalt vastavaid sümboleid lahtrisse. Seda seisundit markeerib roheline piirjoon lahtri ümber. Seevastu töölehe kui terviku kontrollimiseks on ette nähtud käsurežiim (*command mode*), kus isegi üksikutel klahvivajutustel võib olla eritähendus, näiteks lahtrite tekitamiseks, kustutamiseks või ümberpaigutamiseks (vt **Help | Keyboard Shortcuts**). Selles režiimis ümbritseb aktiivset lahtrit sinine piirjoon.\n",
"\n",
"Uue lahtri loomiseks kliki esmalt hiirega selle lahtri päisel, mille ette või taha soovid uue lahtri tekitada (või, olles kursoriga juba selle lahtri sees, vajuta Esc). Tööleht läheb käsurežiimi. Nüüd vajuta klahvile A või B. Uus lahter vaikimisi ongi koodilahter (ehk tüübist **Code**, nagu näitab tekst tööriistaribal). Tekstilahtri saamiseks vajuta käsurežiimis klahvile M või vali tööriistaribalt lahtri tüübiks **Markdown**. Lahtri kustutamiseks vajuta (ikka käsurežiimis) piisavalt kiiresti kaks korda klahvile D.\n",
"\n",
"Redigeerimisrežiimi aktiveerimiseks kliki hiirekursoriga koodilahtris (topelt-klõps tekstilahtris) või vajuta Enter. Tee seda näiteks kohe siinsamas, siis näed Markdown/HTML-koodi, mis määrab selle lahtri sisu."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Lihtsaimad arvutused"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matemaatilistest operatsioonidest on koheselt olemas aritmeetikatehted ja astendamine. Suurima prioriteediga on astendamine (`**`), siis korrutamine-jagamine (`*`, `/`) ja viimaks liitmine-lahutamine (`+`, `-`). Arvutuste järjekorda saab muuta ümarsulgudega, nagu tegime eespool.\n",
"\n",
"Paljudes süsteemides on astendamise operaatoriks katus (`^`), aga Pythonis on selleks kaks järjestikust korrutusmärki. Näiteks raadiusega 7,5 ühikut ringi pindala ($\\pi r^2$) avaldub nii:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"176.625"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3.14 * 7.5**2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(Siin ja edaspidi: aktiveeri lahter ja vajuta Ctrl+Enter.)\n",
"\n",
"Täiendavaid matemaatilisi vahendeid leiab mitmesugustest lisamoodulitest. Elementaarfunktsioonid ja matemaatika põhikonstandid `pi` ja `e` saadakse moodulist `math`. Mooduli kasutamiseks tuleb see esmalt *importida*:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import math"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Võtame ümberpööratud ülesande: teame ringi pindala 176,6 ja tahame selle kaudu leida ringi raadiuse. Selleks on tarvis ruutjuure arvutamise funktsiooni `sqrt`. Tuleb spetsiaalselt näidata, et me võtame selle funktsiooni ja konstandi $\\pi$ moodulist `math`:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.497567999028581"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.sqrt( 176.6 / math.pi )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sqrt` ja `pi` on *muutujad*, mis on defineeritud moodulis `math`. Need võib ka mooduli seest välja tuua (globaalsesse nimeruumi), et edaspidi poleks eesliidet `math.` enam tarvis:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.497567999028581"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from math import sqrt, pi\n",
"sqrt( 176.6 / pi )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vajadusel võib moodulist korraga kõik objektid välja tuua:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from math import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mitme mooduli üheaegsel kasutamisel seda siiski ei tehta, et vältida *nimekonflikte*. Näiteks moodulid `math`, `cmath`, `mpmath`, `numpy` ja `sympy` sisaldavad nime poolest peaaegu identse komplekti matemaatikafunktsioone erinevat tüüpi andmete jaoks.\n",
"\n",
"Nagu näha, Jupyter automaatselt nummerdab kõik koodilahtrid. Lahtri käivitamisel saadud tulemus jäetakse meelde ja selle poole saab edaspidi pöörduda koodiga `Out[n]` või lihtsalt `_n`, kus `n` asemel on lahtri järjekorranumber (allkriips üksinda tagastab viimase arvutustulemuse). Veendu selles:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Arvutuse selguse ja dokumenteerimise huvides on mõistlikum anda nii algandmetele kui ka arvutustulemustele väljendusrikkad nimed:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.497567999028581"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pindala = 176.6\n",
"raadius = sqrt( pindala / pi )\n",
"raadius"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sellega me defineerisime kaks uut muutujat `pindala` ja `raadius`. Muutuja nimi võib olla meelevaldne tähtede ja numbrite kombinatsioon (sh täpitähed ja kreeka sümbolid), kuid ei tohi sisaldada tühikuid ega alata numbriga. Pythoni [võtmesõnade](https://www.programiz.com/python-programming/keywords-identifier) (`if`, `for`, `def`, jne) kasutamine on samuti keelatud. Kreeka tähestiku sümboleid saab tekitada otse Jupyteri keskkonnas sisestades esmalt vastava [LaTeX'i koodi](../fp1/latex.html) (nt `\\alpha`, `\\delta`, `\\lambda`, `\\Sigma` jne) ja vajutades seejärel tabulatsiooniklahvi. Pythoni kood on *tõstutundlik* (eristatakse suur- ja väiketähti). Pythoni [stiilireeglid](https://www.python.org/dev/peps/pep-0008/#naming-conventions) näevad ette, et muutujanimed võiksid olla väiketähtedega, kus sõnad eraldatakse allkriipsuga (nt `raadius` või `ringi_raadius`).\n",
"\n",
"Pythonis iga lause (st üks terviklik programmikäsk) kirjutatakse omaette reale. Laused täidetakse järjest ülevalt alla liikudes. Seega esmalt antakse arvule `176.6` nimeks `pindala`, seejärel arvutatakse välja avaldise `sqrt( pindala / pi )` väärtus ja sellele antakse omakorda nimeks `raadius`. Nüüd saab muutujaid `raadius` ja `pindala` kasutada edasiste arvutuste tegemiseks mistahes koodilahtris. Kui on soov alustada arvutustega otsast peale ja vabaneda kõigist globaalsetest muutujatest (sh muutujatest/moodulitest, mis on imporditud), tuleb arvutusmootorile teha alglaadimine (**Kernel | Restart**)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Alghetkel on pangakontol €1000. Iga aasta lisanduvad säästud €500. Hoiustamisest saadav aastane intress on 3,0% aasta alguses eksisteerivast rahasummast. Leia 7 aastaga teenitav intressitulu! Liitintressi $r$ korral on konto seis pärast $n$ perioodi möödumist $$K(n)=K_0(1+r)^n+S\\frac{(1+r)^n-1}{r},$$ kus $K_0$ on algkapital ja $S$ on sissemakse perioodi jooksul. Arvutuse selguse huvides säilita eraldi muutujates nii algandmed kui ka vahetulemus $(1+r)^n$.\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Trigonomeetrilised funktsioonid eeldavad alati argumenti radiaanides. Kraadide kasutamiseks on tarvis teisendustegurit, mis esindaks ühe kraadi väärtust radiaanides. Teades et 180 kraadi on võrdne $\\pi$ radiaaniga, defineeri vastav teisendustegur (muutuja `deg`) ja seejärel veendu, et sin(30°) annab oodatava tulemuse 0,5:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from math import sin, pi\n",
"\n",
"deg = ...\n",
"sin(30*deg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"See viib meid üldisema probleemi juurde: loodusteaduslike või insenertehniliste rehkenduste juures läheb enamasti tarvis nii ühikute teisendamist kui ka mitmesuguseid füüsikalisi konstante. Vajadusel saab neid muidugi ise defineerida äsjamainitud viisil, kuid põhilised neist on juba defineeritud moodulis `scipy.constants` (väljendatuna SI põhiühikutes). Konstantide täielik nimekiri on [siin](http://docs.scipy.org/doc/scipy-0.17.1/reference/constants.html)."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13.605693012183629"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from scipy.constants import m_e, h, eV, e, epsilon_0 as eps\n",
"m_e * e**4 / (8 * h**2 * eps**2) / eV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Importimisel andsime muutujale `epsilon_0` lühema nime `eps`. Toodud avaldis annab elektroni seoseenergia vesinikuaatomis elektronvoltides. Vastav õpikuvalem (SI-süsteemis) näeks välja nii: $$E=\\frac{m_e e^4}{8h^2\\varepsilon_0^2}.$$ Märgime, et siin Python opereerib vaid dimensioonitute arvudega, st sisulist ühikute teisendamist/dimensioonide kontrolli ei toimu. Seepärast on mõistlik arvutused teostada kindlate, omavahel kooskõlaliste mõõtühikute süsteemis. Näiteks, kui kõik arvandmed esitada SI põhiühikutes ja valemid panna samuti kirja SI-süsteemis, siis ilmselt ka arvutustulemused saavad olema SI põhiühikutes. Ühikute teisendamiseks tuleb kasutada lihtsalt sobivaid teisendustegureid. Viimastes näidetes muutujaga `deg` korrutamisel teisenesid kraadid radiaanideks ja muutujaga `eV` jagamisel teisenesid džaulid elektronvoltideks, st radiaane ja džaule käsitleti kui põhiühikuid.\n",
"\n",
"Väga suured või väga väikesed arvud (nagu 1,6×10-19) tuleb programmikoodis kirja panna liht-tekstina kujul `1.6e-19` (kümnenderaldaja on alati punkt). "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Arvuta raskuskiirendus Maa pinnal valemiga $g=GM/R^2$, kus Maa mass $M=5,\\!97\\times 10^{24}$ kg ja (keskmine) raadius $R=6371$ km. Gravitatsioonikonstandi saab moodulist scipy.constants.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sõne"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui arvutuslahtri viimane lause tagastab mingisuguse andmeobjekti (mida ei omistata muutujale), siis see trükitakse teksti kujul ekraanile (kohe lahtri järel). Seejuures reaalarvulised tulemused väljastatakse maksimaalse täpsusega (umbes 17 tüvenumbrit). Mõnikord on meil tarvis:\n",
"* väljastada ühest lahtrist mitu (vahe)tulemust\n",
"* väljastada peale arvude ka muud informatsiooni teksti kujul\n",
"* kontrollida arvuliste tulemuste formaati ja täpsust\n",
"\n",
"Esimese probleemi lahendab käsk `print`:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"176.6\n",
"7.497567999028581\n"
]
}
],
"source": [
"print(pindala)\n",
"print(raadius)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teise probleemi lahendamiseks on tarvis uut andmetüüpi, mille nimi on *string* ehk eestipäraselt *sõne*. Sõne-tüüpi objekti sisuks on meelevaldne kirjasümbolite jada. Sõneliteraal piiritletakse ülakomade või jutumärkidega. `print`-käsule võib argumentidena anda hulga arvulisi või sõne-tüüpi andmeid (muutujaid, literaale), mis trükitakse ekraanile üksteise järel tühikutega eraldatult. Niiviisi saame konstrueerida tervikliku lause:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ringi raadius on 7.497567999028581 ning pindala 176.6\n"
]
}
],
"source": [
"print( 'ringi raadius on', raadius, 'ning pindala', pindala )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Viimaks, spetsiaalse [vorminduskoodi](https://pyformat.info/) abil saame täpselt kontrollida arvude formaati ja täpsust. Vorminduskoodid kaasatakse esmalt sõne koosseisu ja operaatori `%` abil asendatakse sama järjekorras vastavate arvandmetega:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ringi raadius on 7.498 ning pindala 176.6\n"
]
}
],
"source": [
"print( 'ringi raadius on %.3f ning pindala %.1f' % (raadius, pindala) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Koodiga `%.3f` vormindatakse reaalarv *püsikomaarvuna* 3 komakoha täpsusega. Seevastu koodiga `%.3e` vormindatakse reaalarv *ujukomaarvuna* ehk *eksponentkujul* 3 komakoha täpsusega. Viimaks, `%.4g` valib kompaktseima esituse, säilitades vähemalt 4 tüvenumbrit (v.a. nullid arvu lõpus)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7.4976\n",
"7.4976e+00\n",
"7.498\n"
]
}
],
"source": [
"print('%.4f' % raadius)\n",
"print('%.4e' % raadius)\n",
"print('%.4g' % raadius)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Selliste 1-mastaabis arvude korral ilmselt eksponentkuju suurt väärtust ei oma (lisab alati aru lõppu `e+00`), optimaalne on püsikomaformaat. Seevastu väga suuri või väga väikeseid arve pole reeglina mõttekas esitada püsikomaarvuna (v.a. finantsarvutused):"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"264100000.0000\n",
"2.6410e+08\n",
"2.641e+08\n"
]
}
],
"source": [
"x = 2.641e8\n",
"print('%.4f' % x)\n",
"print('%.4e' % x)\n",
"print('%.4g' % x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ilmselgelt arvu 2,6410×108 täpsus ei ole piisav õigustamaks vormingut `264100000.0000`. Seevastu formaat `%.4e` võib olla vägagi sobilik, andes mõista, et kõik 4 kohta pärast koma on tähendusega ja selle täpsuse piires tuleks säilitada isegi nullid arvu lõpus."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Kirjuta programm, mis väljastab ruutvõrrandi (näiteks $2x^2+3x-35=0$) mõlemad lahendid 5 tüvenumbri täpsusega! Algandmeteks on ruutvõrrandi kordajad (näiteks a, b, c).
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Jupyteri keskkonnas saab kergesti küsida infot mistahes (dokumenteeritud) elemendi kohta Pythoni koodis (olgu see muutuja, funktsioon, meetod, moodul, vm). Selleks tuleb kursoriga liikuda elemendi peale ja vajutada seejärel Shift+Tab. Näiteks tehes seda funktsiooninimel `print`, ilmub selle kohale lipik teabega\n",
"\n",
"```\n",
"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n",
"\n",
"Prints the values to a stream, or to sys.stdout by default.\n",
"Optional keyword arguments:\n",
"file: a file-like object (stream); defaults to the current sys.stdout.\n",
"sep: string inserted between values, default a space.\n",
"end: string appended after the last value, default a newline.\n",
"flush: whether to forcibly flush the stream.\n",
"```\n",
"Siit saame teada, et sellel funktsioonil on parameetrid `sep` ja `end`. Esimene määrab sõne, millega eraldatakse ekraanile trükitavad väärtused (vaikimisi tühik). Parameetri `end` vaikeväärtus on `'\\n'`, mis tekitab reavahetuse, nii et kui mitu `print`-käsku on järjest, siis kõik väljastused on eraldi real. On hulk kirjasümboleid, mida ühel või teisel põhjusel ei saa otse sõne koosseisus näidata. Neid tähistatakse spetsiaalse koodiga ehk *paojadaga* (*escape sequence*), mis algavad langkriipsuga (`\\`). Tuntumad näited on reavahetuse sümbol (`\\n`), tabulatsioonisümbol (`\\t`), jutumärgid (`\\\"`), apostroof (`\\'`) ja langkriips ise (`\\\\`).\n",
"\n",
"Katseta ka sellist tegevust: kirjuta koodilahtrisse `math.` ja vajuta klahvile Tab. Tulemusena näidatakse nimekirja kõigist funktsioonidest ja muutujatest mooduli `math` koosseisus. Niiviisi saab teada ka objekti meetodid ja atribuudid. Kui sooritada see tegevus näiteks sõnemuutujaga, saame teada, et sõnel on hulk kasulikke meetodeid: `split`, `replace`, `upper`, jne. Klahvivajutusega Tab saab teada ka globaalsed muutujanimed. Näiteks, kui sisestada täht `p` ja vajutada Tab, näidatakse kõikide p-tähega algavate muutujate nimekirja, mille hulgas on ootuspäraselt `pi`, `pindala`, `pow` ja `print`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Kommentaarid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui ühte lahtrisse mahutada pikem arvutuskood (terve algoritm või programm), on mõistlik ka otse koodi sees üht-teist *kommenteerida*. Pythonis üherealine kommentaar algab sümboliga `#` ja kulgeb rea lõpuni. Muidugi iga triviaalset liigutust ei ole mõtet kommenteerida — kommenteerimine peab tegema koodi selgemaks, mitte vastupidi. Kommenteerimise vajalikkus sõltub oluliselt näiteks muutujanimede valikust. Seega järgnevas koodis mõned piisavalt ilmsed operatsioonid on jäetud kommenteerimata."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lennukaugus = 392.0 m\n"
]
}
],
"source": [
"from math import sin, cos\n",
"from scipy.constants import degree as deg, g\n",
"\n",
"# algandmed\n",
"kiirus = 62 # algkiirus [m/s]\n",
"nurk = 45 # viskenurk kraadides\n",
"\n",
"# arvutus\n",
"nurk = nurk * deg # radiaanideks\n",
"kiirus_x = kiirus * cos(nurk)\n",
"kiirus_y = kiirus * sin(nurk)\n",
"aeg = 2 * kiirus_y / g # lennuaeg\n",
"kaugus = kiirus_x * aeg\n",
"print('lennukaugus = %.1f m' % kaugus)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Üht ja sama muutujanime võib korduvalt kasutada, kusjuures muutuja uue väärtuse võib defineerida ka kohe selle muutuja olemasoleva väärtuse baasil (nagu lauses `nurk=nurk*deg`), sest programmeerimises võrdusmärk tähendab *omistamist*, mitte vasaku ja parema poole võrdsust. Seda tüüpi tehteid läheb sageli vaja, selle tõttu operatsioon `x = x * a` on lubatud kirjutada lühemalt kujul `x *= a`. Ülejäänud analoogsed operaatorid on `+=`, `-=` ja `/=`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tekst, joonised ja valemid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Markdown"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Koodilahtrite vahele saab kirjutada rikkaliku kujundusega selgitavat teksti (nagu käesolev lõik), kasutades lihtsat [märgistuskeelt](https://en.wikipedia.org/wiki/Markup_language) nimega [Markdown](http://daringfireball.net/projects/markdown/syntax). Tekstiala tekitamiseks tuleb luua uus lahter (B), valida selle tüübiks **Markdown** (M), kirjutada sellesse Markdown-koodis märgendatud sisu ja viimaks lasta see kujundada klahvivajutusega Ctrl+Enter. Markdown'is lõigud eraldatakse tühja reaga (üksik reavahetus on ekvivalentne tühikuga). Lõigusisese reavahetuse tegemiseks tuleb rea lõppu jätta vähemalt kaks tühikut. Muud põhilised tekstielemendid on kirjeldatud järgnevas tabelis.\n",
"\n",
"
\n",
"
\n",
"
Kood
\n",
"
Tulemus
\n",
"
\n",
"
*rõhutatud tekst (kaldkiri)*
\n",
"
rõhutatud tekst (kaldkiri)
\n",
"
\n",
"
**tugevalt rõhutatud tekst (rasvane kiri)**
\n",
"
tugevalt rõhutatud tekst (rasvane kiri)
\n",
"
\n",
"
`programmikood (masinkiri)`
\n",
"
programmikood (masinkiri)
\n",
"
\n",
"
\n",
" - esimene \n",
" - teine \n",
" - kolmas\n",
"
\n",
"
\n",
"
\n",
"
esimene
\n",
"
teine
\n",
"
kolmas
\n",
"
\n",
"
\n",
"
\n",
"
\n",
" 1. esimene \n",
" 1. teine \n",
" 1. kolmas\n",
"
\n",
"
\n",
" \n",
"
esimene
\n",
"
teine
\n",
"
kolmas
\n",
" \n",
"
\n",
"
\n",
"
\n",
" | päis | päis | päis | \n",
" | ---- | ---- | ---- | \n",
" | sisu | sisu | sisu | \n",
" | sisu | sisu | sisu |\n",
"
\n",
"\n",
"Siin viimases näites vaid *lingitakse* kõvakettal asuvale pildifailile `logo.png` (mis peab asuma töölehega samas kataloogis). Pildifaili saab kaasata ka töölehe koosseisu. Selleks tuleb lohistada fail Windows Explorer'ist märkmeraamatu lahtrisse (fail lisandub selle lahtri manuste hulka, vt **View | Cell Toolbar | Attachments**). Näiteks antud juhul manusfaili nimeks saab `attachment:logo.png`, mida saab selle lahtri piires kõikjal kasutada.\n",
"\n",
"Keerulisema kujunduse saavutamiseks tuleb kasutusele võtta juba [HTML](https://en.wikipedia.org/wiki/HTML) ja [CSS](https://en.wikipedia.org/wiki/Cascading_Style_Sheets). Üks kujundusvõte, mida Markdown'i lihtsad reeglid ei hõlma, on üla- ja alaindeksite saamine. Näiteks kujundus 1,38 × 10−23 saavutatakse koodiga `1,38×10−23` (erisümbolite saamiseks on kasutatud vastavaid [tähekoode](https://www.w3schools.com/html/html_symbols.asp). Lisaks on HTML/CSS vajalik jooniste suuruse ja paigutuse kontrollimisel. Näiteks käesoleva lõigu kõrval näha olev pilt on tekitatud koodiga ``, mis annab mõista, et pildi laius peab olema 40% lahtri laiusest ja pilt tuleb paigutada vastu parempoolset äärist, nii et lõigu tekst voolab pildist vasakult mööda (jättes veerise, mille laius on võrdne [šrifti suurusega](https://en.wikipedia.org/wiki/Em_%28typography%29))."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Seni oleme arvutuslahtrist infot ekraanile trükkinud vaid `print`-käsuga, mis renderdab toorest ehk kujundamata teksti. Moodulis `IPython.display` on liides, mis lubab Pythoni koodist Jupyteri töölehele väljastada sellist rikkaliku kujundusega sisu, mida muidu kirjutatakse tekstilahtrisse. Käsuga `Markdown` või `HTML` saab luua objekti, mis sisaldab vastavalt Markdown- või HTML-märgendusega teksti, ja käsuga `display` renderdatakse see ekraanile. Oletagem näiteks, et meil on muutuja `x=1.38e-23` ja soovime selle ekraanile kuvada kujul 1,38 × 10−23."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"**Boltzmanni konstandi** väärtus on 1,38 × 10−23 J K−1"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import display, Markdown\n",
"from math import floor, log10\n",
"\n",
"x = 1.38e-23\n",
"astendaja = floor(log10(x))\n",
"mantiss = x / 10**astendaja\n",
"md = '**Boltzmanni konstandi** väärtus on %.2f × 10%d J K-1'\n",
"md = md % (mantiss, astendaja)\n",
"md = md.replace('-', '−').replace('.', ',')\n",
"display(Markdown(md))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### LaTeX"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Valemid jm matemaatilised konstruktsioonid tuleb kirjeldada [LaTeX'i](https://www.latex-project.org/) koodis (mida renderdab [MathJax](https://www.mathjax.org/)). Valemi paigutamiseks otse lause sisse tuleb vastav LaTeX'i kood kirjutada dollarimärkide vahele (näiteks `$E=mc^2$`). Seevastu valemid, mis lähevad omaette reale, kirjutatakse kahekordsete dollarimärkide vahele (`$$E=mc^2$$`). Piirdume siin vaid mõne näitega, põhjalikum käskude loetelu koos näidetega on [eraldi veebilehel](../fp1/latex.html).\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Andmetüübid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Otse programmikoodis sisalduvad andmed, nagu `62` või `1.6e-19` või `'%.4g'`, on [literaalid](https://en.wikipedia.org/wiki/Literal_%28computer_programming%29). Andmed võivad pärineda ka failist, internetist, vm. Erinevaid arvutüüpe (ja vastavaid literaale) on Pythonis kolm."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Täisarvud"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vaid numbritest koosnev literaal (näiteks `62`) esindab *täisarvu* ehk andmetüüpi `int`. Andmetüübi saab teada käsuga `type`:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"int"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 62\n",
"type(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui kasutada aritmeetikaoperaatoreid `+`, `-`, `*`, `//` (täisosa) ja `%` (jääk), siis ka kõik arvutustulemused on täisarvud. Näiteks jagamise pöördoperatsioon täisarvude korral:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"62 / 11 = 5 (jääk 7)\n",
"5 * 11 + 7 = 62\n"
]
}
],
"source": [
"jagatav = 62\n",
"jagaja = 11\n",
"\n",
"jagatis = jagatav // jagaja\n",
"jääk = jagatav % jagaja\n",
"print('%d / %d = %d (jääk %d)' % (jagatav, jagaja, jagatis, jääk))\n",
"\n",
"# taastame algse arvu jagatise ja jäägi kaudu\n",
"algne = jagatis * jagaja + jääk\n",
"print('%d * %d + %d = %d' % (jagatis, jagaja, jääk, algne))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin kood `%d` vormindab argumendi täisarvuna.\n",
"\n",
"Riistvaralise toetusega täisarvud on tüüpiliselt kuni 64-bitised ehk maksimaalse suurusega 263–1=9223372036854775807, kuid tarkvaras võib realiseerida algoritmid kuitahes suurte arvudega opereerimiseks. Pythonis on otsene toetus piiramatu suurusega täisarvudele ja vajadusel läheb süsteem automaatselt üle nende kasutamisele. Näiteks faktoriaali arvutamine ($n! = 1\\cdot 2\\cdot\\ldots\\cdot n$) viib väga kiiresti suurte arvudeni:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from math import factorial\n",
"factorial(500)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Taanda murd $\\frac{2^{19}}{14!}$. Kahe täisarvu suurima ühisteguri leidmiseks saab kasutada funktsiooni math.gcd (greatest common divisor).\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Harilike murdudega arvutamiseks on olemas moodul `fractions`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ujukomaarvud"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Ujukomaarvud](https://en.wikipedia.org/wiki/Floating-point_arithmetic) on sellised reaalarvud, mille diapasoon on võrdlemisi avar, aga *suhteline täpsus* (st tüvenumbrite arv) on ligikaudu konstant. Selliseid arve esindab Pythonis andmetüüp `float`. Literaali interpreteeritakse `float`-tüüpi väärtusena, kui selles sisaldub kümnendpunkt või see on eksponentkujul, näiteks `3.14` või `3.` või `1e6` või `1.6e-19`:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"float"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 3.14\n",
"type(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pythoni `float` hõivab 64 bitti mälu, selle diapasoon on umbes 10−308 kuni 10308 (samuti negatiivsed arvud) ja täpsus 15–17 tüvenumbrit. Viimane tähendab ühtlasi seda, et kahte reaalarvu, mis erinevad rohkem kui umbes 1016 korda, ei ole enam mõtet kokku liita. Või kui kahel reaalarvul 15 või rohkem tüvenumbrit on identsed, siis nende lahutamisel üksteisest saab tulemuse täpsus olema väga väike (vaid mõned tüvenumbrid)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Leia avaldise $$f(x)=2\\frac{\\sqrt{1+x}-1}{x}$$ väärtus järjest väiksemate $x$ väärtuste korral. Selgub, et mida väiksem on $x$, seda ebatäpsem on tulemus. Piisavalt väikese $x$ korral (umbes 10-16) ei anna arvutus enam üldse mõistlikku tulemust, kuigi teoreetiliselt $$\\lim_{x\\to 0}f(x)= 1.$$ Selgita selle põhjus ja teisenda avaldis sellisele kujule, mis annab normaalse täpsusega (~15 tüvenumbrit) tulemuse kuitahes väikese $x$ korral.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reaalarvude piiratud täpsus (ümardusviga) avaldub muuhulgas juhul kui algandmed on kümnendmurrud, sest arvuti mälus on andmed kahendsüsteemis:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5.551115123125783e-17"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"0.1 + 0.2 - 0.3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui tingimata on tarvis suurt täpsust kümnendmurdudega opereerimisel (nt finantsarvutused), tuleks kasutada [püsikomaarve](https://en.wikipedia.org/wiki/Fixed-point_arithmetic), näiteks moodulist `decimal`. Meelevaldse täpsusega ujukomaarve pakub moodul `mpmath`. Selliste spetsiifiliste või suure täpsusega andmetüüpide kasutamisel tuleks `float`-literaale üldse vältida ja sisestada andmed kas täisarvu või sõne kujul."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Kompleksarvud"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Kompleksarvudeks](https://en.wikipedia.org/wiki/Complex_number) nimetatakse matemaatilisi objekte kujul $x+jy$, kus $x$ ja $y$ on reaalarvud ning $j=\\sqrt{-1}$. Seega kompleksarvud on reaalarvude laiendus, tehes võimalikuks hulga matemaatilisi operatsioone, mis reaalarvude vallas on võimatud: logaritm või ruutjuur negatiivsest arvust, arkussiinus või -koosinus arvust, mis on suurem kui 1, jms. Kompleksarve esindab Pythonis andmetüüp `complex`. Vastavalt näiteks kompleksarvu $3+7j$ saab Pythonis kas käsuga `complex(3,7)` või literaaliga `3+7j`.\n",
"\n",
"Jagatise $$\\frac{9+8j}{5-2j}=\\frac{9+8j}{5-2j}\\times \\frac{5+2j}{5+2j}=\\frac{29+58j}{29}=1+2j$$ saame leida nii:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1+2j)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(9+8j) / (5-2j)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mooduli `math` funktsioonid suudavad opereerida vaid reaalarvude vallas. Näiteks `math.sqrt` ei suuda arvutada ruutjuurt negatiivsest arvust ega ammugi mitte kompleksarvust (programm katkestatakse veateatega). Kompleksarvude korral tuleb kasutada moodulit `cmath`."
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(34.733688544038856-21.376398389619936j)"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from cmath import sqrt, exp\n",
"\n",
"x = exp(3-2j)*sqrt(-4+1j)\n",
"x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Koodi `'%.3f' % x` abil kompleksarvu `x` sõneks konverteerida ei saa (tekib programmiviga). Kuid seda saab teha sõne meetodiga `format`, mis kasutab samu vorminduskoode, kuid veidi erineva süntaksiga (protsendimärgi asemel loogelised sulud):"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"34.734-21.376j\n"
]
}
],
"source": [
"print( '{:.3f}'.format(x) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Erinevaid arvutüüpe võib matemaatilises avaldises meelevaldselt segada. Kitsam andmetüüp teiseneb vajadusel automaatselt avaramasse formaati, nt täisarv reaalarvuks või reaalarv kompleksarvuks."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Kirjuta programm, mis väljastab ruutvõrrandi $x^2-10x+34=0$ lahendid!
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Programmeerimine"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Selliseid käske nagu `kaugus = kiirus * aeg` või `print(kaugus)`, ükskõik kui palju neid ritta laduda, täidetakse vääramatult üksteise järel algusest lõpuni. Sellisel viisil ei saa ilmselt realiseerida algoritme, kus tuleb aegajalt võtta vastu otsus, millist käsku järgmisena täita. Samuti on praktiliselt võimatu opereerida andmemassiividega, millest tuleb juttu edaspidi.\n",
"\n",
"Vaatame siin üle lihtsamad [struktuurprogrammeerimise](https://en.wikipedia.org/wiki/Structured_programming) kontseptsioonid. Pythoni keelekonstruktsioonid on võrdlemisi lakoonilised ja nende aluseks on põhimõte, et iga (liht)lause kirjutatakse omaette reale, aga lausete *grupeerimist* (ehk *liitlauset*) näidatakse kindla *taandega* (mitte sulgudega, nagu muudes keeltes)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### IF-lause"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Tingimuslause* ehk *IF-lause* on lihtsaim juhtstruktuur, mis võimaldab programmil *hargneda*, sõltuvalt sellest kas teatud tingimus on täidetud (tõene) või mitte. IF-lause algab võtmesõnaga `if`, millele järgneb kontrollitav tingimus ja koolon, ning järgmistel ridadel tuleb *ühesuguse taandega* kirjutada laused, mis kuuluvad täitmisele juhul kui tingimus on tõene. `if`-blokile võib järgneda meelevaldne hulk `elif` (*else if*) blokke ja viimaks veel võtmesõnaga `else` märgistatud blokk. Kui IF-lause tingimus on väär, siis kontrollitakse esimese `elif` bloki tingimust, jne. Kui ükski tingimus ei osutu tõeseks, täidetakse laused `else`-blokis (kui see eksisteerib). Ühe ja sama IF-lause koosseisu kuuluvate `if`, `elif` ja `else` taanded peavad olema muidugi identsed.\n",
"\n",
"Võrdlemisi põhjalik näide IF-lause kohta on ruutvõrrandi $ax^2+bx+c=0$ lahendamine, kus tuleb süstemaatiliselt läbi vaadata kõik variandid. See demonstreerib ka mitut IF-lauset üksteise sees. Katseta erinevate algandmetega:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x1 = 1.149, x2 = -3.482\n"
]
}
],
"source": [
"from math import sqrt\n",
"\n",
"# ruutvõrrandi kordajad\n",
"a, b, c = 3, 7, -12\n",
"\n",
"if a == 0:\n",
" if b != 0:\n",
" print( 'x = %.3f' % (-c / b) )\n",
" elif c != 0:\n",
" print( 'Võrrandil puuduvad lahendid!' )\n",
" else:\n",
" print( 'Võrrand on rahuldatud iga x korral!' )\n",
"else:\n",
" D = b**2 - 4 * a * c # diskriminant\n",
" if D > 0:\n",
" D = sqrt(D)\n",
" x = (-b + D) / (2 * a), (-b - D) / (2 * a)\n",
" print( 'x1 = %.3f, x2 = %.3f' % x )\n",
" elif D == 0:\n",
" x = -b / (2 * a)\n",
" print( 'x = %.3f' % x )\n",
" else:\n",
" print( 'Võrrandil puuduvad reaalarvulised lahendid!' )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui harilik võrdusmärk (`=`) tähistab muutujale väärtuse omistamist, siis kahekordne võrdusmärk (`==`) testib vasaku ja parema poole võrdsust. Ülejäänud sarnased operaatorid on `<` (väiksem), `<=` (väiksem või võrdne), `!=` (mittevõrdne) jne. Sellisel testil tekib tõeväärtus-tüüpi (`bool`) tulemus `True` (tõene) või `False` (väär). Seega `True` ja `False` on tõeväärtusliteraalid."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### WHILE-tsükkel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Tsükkel* on programmi konstruktsioon, mis võimaldab komplekti lauseid korduvalt (tsükliliselt) jooksutada. Seda, kui kaua tsüklit korratakse, sätestatakse harilikult teatud tingimus(t)ega kas tsükli alguses või lõpus, aga vajadusel saab (lõputust) tsüklist ka \"jõuga\" välja tulla. Lihtsaim on *eelkontrolliga* ehk *WHILE-tsükkel*, mille päises, pärast võtmesõna `while`, kirjeldatakse kohe tingimus, mida kontrollitakse juba enne esmakordset tsüklisse sisenemist. Sellele järgnevad (pärast koolonit) tsükli sisuks olevad laused (kindla taandega, nagu ka IF-lause korral). Pärast nende täitmist läheb täitmisjärg tagasi tsükli algusesse ja kontrollitakse uuesti nimetatud tingimuse täidetust, jne. Kui WHILE-tsükli tingimus on algusest peale väär, siis tsükli keha moodustavaid lauseid ei täideta kordagi.\n",
"\n",
"Eksisteerib ka *järelkontrolliga* tsükli kontseptsioon (mida läbitakse alati vähemalt korra), kuid Pythonis seda ei ole. Vajadusel saab järelkontrolliga tsükli realiseerida WHILE-tsükli baasil (mille tingimus on püsivalt `True`), kaasates IF-lause ja käsu `break`, millega saab tsüklist suvalisel hetkel \"välja murda\".\n",
"\n",
"Klassikaline matemaatiline näide tsüklite kasutamise kohta on faktoriaali arvutamine:"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"arvu 10 faktoriaal on 3628800\n"
]
}
],
"source": [
"n = 10\n",
"\n",
"k, fact = n, 1\n",
"while k > 1:\n",
" fact *= k\n",
" k -= 1\n",
"\n",
"print( \"arvu %d faktoriaal on %d\" % (n, fact) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Eespool oli teatava finantsülesande (konto kasvamine liitintressi ja perioodiliste sissemaksetega) lahend antud üsna keerulise lõppvalemi kujul. Viimase tuletamine nõuab mõningast matemaatilist pingutust. Alternatiivselt võiksime arvutada otse, käies tsükliga kõik perioodid läbi:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5061.10 EUR\n"
]
}
],
"source": [
"algsumma = 1000\n",
"säästud = 500\n",
"intress = 0.03\n",
"aastaid = 7\n",
"\n",
"periood = 0 # mitu perioodi oleme juba läbi käinud\n",
"konto = algsumma\n",
"while periood < aastaid:\n",
" konto = konto + intress * konto + säästud\n",
" periood += 1\n",
"\n",
"print( '%.2f EUR' % konto )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Selle lähenemise eeliseks on, et tsükli sees teostatav arvutus on märksa lihtsam, paraku arvutamise aeg hakkab sõltuma algandmetest (antud juhul muutujast `aastaid`).\n",
"\n",
"Veel tõsisema näitena lahendame võrrandi $e^{-x}=x$. See võrrand on [transtsendentne](https://en.wikipedia.org/wiki/Transcendental_equation), st selle lahendit ei saa avaldada lõpliku arvu elementaarfunktsioonide kombinatsioonina (nagu ruutvõrrandi korral). Seega otsest (kindla arvutustehete arvuga) algoritmi ei eksisteeri, vaid tuleb kasutada mõnda [iteratiivset meetodit](https://en.wikipedia.org/wiki/Iterative_method). Selle käigus, alustades alglähendist, korratakse tsükliliselt teatud arvutusskeemi, nii et tulemus saab seda täpsem, mida kauem arvutada.\n",
"\n",
"Üks lihtsamaid algoritme antud probleemi lahendamiseks on järgmine. Võrrand $e^{-x}=x$ on ekvivalentne võrrandiga $e^{-x}-x=0$, seega algse võrrandi lahendamine tähendab avaldise $e^{-x}-x$ nullkoha leidmist. See avaldis on $x$-i funktsioon, mille me tähistame $f(x)$. Ilmselt me suudame välja pakkuda mingi küllaltki kitsa vahemiku $(a,b)$, kus nullkoht peab asuma, st $a\\lt x\\lt b$. Kui funktsioon $f(x)$ on monotoonne selles vahemikus, siis ilmselt $f(a)$ ja $f(b)$ on vastasmärgilised, sest nullkoht asub $a$ ja $b$ vahel. Selle vahemiku keskpunkt on $c = (a+b)/2$. Nüüd juhul kui $f(a)$ ja $f(c)$ on vastasmärgilised, siis lahend asub vahemikus $(a,c)$, vastasel korral vahemikus $(c,b)$. Nii saame iga iteratsiooniga lahendi diapasooni 2 korda vähendada, kuni see saab väiksemaks teatud piirväärtusest, mida järgnevas kirjeldab parameeter `eps`. Trükime välja ka kõik vahepealsed lähendid, et näha kuidas protsess koondub."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.55000\n",
"0.77500\n",
"0.66250\n",
"0.60625\n",
"0.57812\n",
"0.56406\n",
"0.57109\n",
"0.56758\n",
"0.56582\n",
"0.56670\n",
"0.56714\n",
"0.56736\n",
"0.56725\n"
]
}
],
"source": [
"from math import exp\n",
"\n",
"f = lambda x: exp(-x) - x\n",
"a, b, eps = 0.1, 1.0, 0.0002\n",
"\n",
"while abs(a - b) > eps:\n",
" c = (a + b) / 2\n",
" print( '%.5f' % c )\n",
" if f(a) * f(c) < 0:\n",
" b = c\n",
" else:\n",
" a = c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin avaldise $e^{-x}-x$ arvutamise kood on selle korduvkasutamise hõlbustamiseks kätketud uude funktsiooni nimega `f`, kasutades `lambda`-avaldist."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Täienda viimast programmi nii, et lahend leitakse kas täpsusega eps või teostades maksimaalselt max_iter iteratsiooni, kusjuures kõik väljastatavad lähendid on nummerdatud! Kontrolli koodi õigsust, vähendades eps ja/või max_iter väärtust.
Harjutus. Kirjuta programm, mis selgitaks välja, kuidas esitada irratsionaalarv $\\pi=3,\\!14\\ldots$ võimalikult täpselt ratsionaalarvuna $a/b$, kus $a<10000$! Võrdle saadud tulemust ajalooliste arengutega $\\pi$ arvutamisel. NB! Kahekordset tsüklit ei lähe vaja (ja see oleks ääretult ebaefektiivne)!
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### FOR-tsükkel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Määratud kordustega* ehk FOR-tsükli puhul defineeritakse teatav *tsüklimuutuja* ehk *loendur*, mis omandab järgemööda kõik väärtused etteantud vahemikus, ja tsükli keha läbitakse loenduri iga väärtuse puhul (loenduri väärtust saab kasutada tsükli kehas). Näiteks tsükli päis kujul `for i in range(m,n)`, kus `m` ja `n` on täisarvud, defineerib loenduri `i`, mis omandab järgemööda väärtused `m`, `m+1`, `m+2`, …, `n-1`. Kood `range(m,n,s)` genereerib arvude järjestuse sammuga `s` ehk `m`, `m+s`, `m+2s`, ….\n",
"\n",
"Esimene näide trükib tabeli Celsiuse ja Fahrenheiti skaala vastavuse kohta sammuga 10 °C. Teine näide sisaldab koguni kaks FOR-tsüklit üksteise sees ja sel viisil trükib välja korrutustabeli. Koodiga `%5d` vormindatakse argument täisarvuna, mis on paremjoondatud 5 sümboli laiusel väljal."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" °C °F\n",
" 0 32\n",
" 10 50\n",
" 20 68\n",
" 30 86\n",
" 40 104\n",
" 50 122\n",
" 60 140\n",
" 70 158\n",
" 80 176\n",
" 90 194\n",
" 100 212\n"
]
}
],
"source": [
"print( '%5s %5s' % ('°C', '°F') )\n",
"for C in range(0, 101, 10):\n",
" print( '%5d %5d' % (C, 9 * C // 5 + 32) )"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 1 2 3 4 5 6 7 8 9 10\n",
" 2 4 6 8 10 12 14 16 18 20\n",
" 3 6 9 12 15 18 21 24 27 30\n",
" 4 8 12 16 20 24 28 32 36 40\n",
" 5 10 15 20 25 30 35 40 45 50\n",
" 6 12 18 24 30 36 42 48 54 60\n",
" 7 14 21 28 35 42 49 56 63 70\n",
" 8 16 24 32 40 48 56 64 72 80\n",
" 9 18 27 36 45 54 63 72 81 90\n",
" 10 20 30 40 50 60 70 80 90 100\n"
]
}
],
"source": [
"for x in range(1,11):\n",
" for y in range(1,11):\n",
" print( '%5d' % (x * y), end='')\n",
" print() # reavahetus"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Koosta programm, mis trükiks ekraanile mõnede elementaarfunktsioonide väärtuste tabeli järgmisel kujul (sh näidatud täpsuse ja joondusega):\n",
"
Harjutus. Arvu $\\pi$ saab meelevaldse täpsusega välja arvutada mitmesuguste valemite järgi, näiteks Viète valem: $$\\frac{2}{\\pi}=\\frac{\\sqrt 2}2 \\cdot \\frac{\\sqrt{2+\\sqrt 2}}2 \\cdot \\frac{\\sqrt{2+\\sqrt{2+\\sqrt 2}}}2 \\cdots$$ Arvuta ja trüki ekraanile selle valemi järgi järjest täpsemad $\\pi$ lähendused (näiteks esimesed 20 varianti). Vihjeks olgu öeldud, et vahetulemusi otstarbekalt kasutades saab selle realiseerida hästi lühikese programmiga. \n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Alamprogramm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui algoritm on vormistatud omaette *alamprogrammina*, saab seda hiljem rakendada mitmetele erinevatele andmetele kogu töölehe ulatuses, ilma et peaks algoritmi koodi kopeerima. Pythonis ja enamikes C-juurtega keeltes kutsutakse alamprogramme üldiselt *funktsioonideks* ning objekti koosseisus funktsioone nimetatakse *meetoditeks*. Funktsiooni defineerimiseks kirjutatakse kõigepealt võtmesõna `def`, millele järgneb defineeritava funktsiooni nimi, argumentide loetelu sulgudes ja koolon. Järgmistel ridadel tulevad kindla taandega funktsiooni keha moodustavad laused. Alamprogrammist saab suvalisel hetkel väljuda `return`-käsuga. Selle käigus võib, aga ei pea tagastama mingit (arvutus)tulemust (vaikimisi tagastatakse spetsiaalne objekt `None`).\n",
"\n",
"Näitena vormistame alamprogrammina ruutvõrrandi lahendamise algoritmi, mis annab vastuse nii reaal- kui ka kompleksarvuliste kordajate ja lahendite korral. Seejuures eraldame üksteisest kaks selgelt eristuvat ülesannet: lahendite leidmise ja nende väljatrükkimise. Niisiis tuleb koostada kaks funktsiooni, mis mõlemad võtavad 3 parameetrit (ruutvõrrandi kordajad). Esimene funktsioon arvutab ruutvõrrandi lahendid ja tagastab 2-elemendilise ennikuna. Teine funktsioon esmalt pöördub esimese funktsiooni poole võrrandi lahendite saamiseks ja seejärel trükib lahendid välja."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"kordajad: a=2, b=3, c=-14\n",
"lahendid: 2.000, -3.500\n",
"\n",
"kordajad: a=5, b=6, c=2\n",
"lahendid: -0.600+0.200j, -0.600-0.200j\n",
"\n"
]
}
],
"source": [
"import math, cmath\n",
"\n",
"def leia_ruutlahend(a, b, c):\n",
" D = b**2 - 4 * a * c\n",
" D = math.sqrt(D) if D >= 0 else cmath.sqrt(D) # lühivariant tingimuslausest\n",
" return (-b + D) / (2 * a), (-b - D) / (2 * a)\n",
"\n",
"def kuva_ruutlahend(a, b, c):\n",
" x1, x2 = leia_ruutlahend(a, b, c)\n",
" print( 'kordajad: a={}, b={}, c={}'.format(a, b, c) )\n",
" print( 'lahendid: {:.3f}, {:.3f}\\n'.format(x1, x2) )\n",
"\n",
"kuva_ruutlahend(2, 3, -14)\n",
"kuva_ruutlahend(5, 6, 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin alamprogrammide sees on vahetulemuste säilitamiseks võetud kasutusele *lokaalsed muutujad* `D` ja `x`. Need muutujad on ajutised ja lähevad kaotsi alamprogrammist väljumisel, vastavatele andmeobjektidele eraldatud mälu vabastatakse. Kui juhtumisi eksisteerivad ka samanimelised globaalsed muutujad, siis need on alamprogrammis nähtamatud. Kui alamprogrammis pöördutakse näiteks muutuja `D` poole, siis esmalt otsitakse seda lokaalsete muutujate (sh funktsiooni parameetrite) seast ja seejärel globaalsete muutujate hulgast. Globaalsetele muutujatele pole lubatud alamprogrammi sees uut väärtust omistada, v.a. juhul kui globaalne muutuja on spetsiaalselt deklareeritud võtmesõnaga `global`. Globaalsete muutujate mõjutamine alamprogrammi seest on reeglina taunimisväärne kõrvalefekt — programmi toimimine on palju selgem, kui andmed sisenevad alamprogrammi parameetritena ja (arvutus-)tulemus tagastatakse `return`-käsuga. Sealhulgas näiteks matemaatilisi funktsioone on sel viisil palju mugavam kombineerida liitfunktsiooniks.\n",
"\n",
"Kindel arv positsioonilisi argumente (nagu viimases näites) on kõige traditsioonilisem viis funktsioonide defineerimisel ja kasutamisel. Pythonis on ootuspäraselt märksa rohkem võimalusi funktsiooni parameetrite kirjeldamiseks. Järgmine alamprogramm nimega `tuletis` arvutab numbriliselt suvalise etteantud funktsiooni 1. või 2. tuletise: $$f'(x) \\approx \\frac{f(x+h)-f(x-h)}{2h},\\quad f''(x) \\approx \\frac{f(x+h)-2f(x)+f(x-h)}{h^2}.$$ See alamprogramm vajab põhimõtteliselt kuni 4 parameetrit:\n",
"\n",
"- esmalt muidugi funktsioon $f$, mille tuletist tahetakse leida\n",
"- mitmendat järku tuletis arvutada\n",
"- mis kohal $x$ tuletis arvutada\n",
"- kui suurt sammu $h$ kasutada\n",
"\n",
"Neist esimene on tingimata vajalik, aga ülejäänutele võib anda mõistlikud *vaikeväärtused*, näiteks 1-järku tuletis kohal $x=0$ sammuga $h=10^{-8}$. Vajadusel saame alamprogrammi väljakutsel kirjeldada parameetrid *valikuliselt* ja *nimeliselt*:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9999999994736442\n",
"1.0000000000121023\n",
"-0.999999993922529\n",
"1.0\n"
]
}
],
"source": [
"from math import *\n",
"\n",
"def tuletis(f, järk=1, kohal=0.0, samm=1e-8):\n",
" if järk == 1:\n",
" return (f(kohal + samm) - f(kohal - samm)) / (2 * samm)\n",
" \n",
" if järk == 2:\n",
" return (f(kohal + samm) - 2 * f(kohal) + f(kohal - samm)) / samm**2\n",
" \n",
" raise NotImplementedError('Sellist järku tuletise algoritm ei ole realiseeritud')\n",
"\n",
"print( tuletis(exp) )\n",
"print( tuletis(exp, samm=1e-5) )\n",
"print( tuletis(sin, järk=2, kohal=pi/2, samm=1e-4) )\n",
"print( tuletis(lambda x: sin(x)*cos(x)) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin kummaski IF-lauses ei lähe ELSE-blokki tarvis, sest `return`-käsuga minnakse alamprogrammist kohe välja. Lisaks näeme, et funktsioon `f` ei pea sugugi olema nimeline (nagu on `sin` või `exp`), vaid võib olla ka anonüümne, realiseerituna `lambda`-avaldisena. Mistahes lihtsaid, üherealisi funktsioone võib `def` asemel realiseerida `lambda`-avaldise abil, nagu näidatud juba eespool."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Kodeeri alamprogramm, mis realiseeriks eespool sõnastatud finantsülesande lahenduse (parameetrid oleks seega $K_0$, $r$ ja $S$). Python lubab muuhulgas kasutada *rekursiooni*, st funktsiooni kehaks olev programmikood tohib ka sedasama funktsiooni (st iseennast) välja kutsuda. Sel juhul me võime algoritmi $K(n)$ arvutamiseks sõnastada hoopis nii: kui $n=0$, siis $K(n)=K_0$ (algkapital), vastasel korral $K(n)=(1+r)K(n-1)+S$ (vastavalt intressi definitsioonile).\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Jadad"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kõik senikasutatud arvandmed on olnud *skaalarsed* ehk üksikväärtused. Vähegi tõsisemate arvutusülesannete lahendamisel läheb tarvis *arvumassiive*. Tüüpiliselt läheb massiive vaja, kui on tarvis läbi töötada suur hulk ühetaoliseid andmeid. Sellised andmed tekivad näiteks mitmesuguste füüsikaliste mõõtmiste käigus (voolutugevuse sõltuvus pingest, optilise signaali sõltuvus lainepikkusest, deformatsiooni sõltuvus rakendatud jõust, jne). Andmemassiivina tuleb käsitleda ka mahukaid statistilisi andmeid (aegread jpm). Iga selline andmemassiiv võib sisaldada tuhandeid katsepunkte. Eksperimendi või vaatluste tulemuseks võib olla suur hulk selliseid andmemassiive, mille töötlemine ja analüüs oleks mõistlik automatiseerida.\n",
"\n",
"
\n",
"
\n",
"
pinge (V)
vool (mA)
\n",
"
\n",
"
\n",
"
0,50
41
\n",
"
\n",
"
\n",
"
1,00
83
\n",
"
\n",
"
\n",
"
1,50
125
\n",
"
\n",
"
\n",
"
2,00
166
\n",
"
\n",
"
\n",
"
2,50
207
\n",
"
\n",
"
\n",
"
3,00
248
\n",
"
\n",
"
\n",
"
3,50
291
\n",
"
\n",
"
\n",
"
4,00
332
\n",
"
\n",
"
\n",
"\n",
"Kuigi Pythonis klassikalist massiivi (*array*) ei eksisteeri, on olemas mitmeid järjestatud ühemõõtmelisi andmemassiive, mille üldnimetus on *jada* (*sequence*). Jada iga elemendi poole saab individuaalselt pöörduda elemendi järjekorranumbri ehk *indeksi* kaudu, mis näidatakse nurksulgudes jadamuutuja nime taga. Üks juba tuttav jada näide on *sõne*, mille elementideks on kirjasümbolid. Üldisemad jadad on *järjend* (*list*) ja *ennik* (*tuple*). Järjendit saab muuta, aga sõne ja ennik, olles korra loodud, [säilitavad oma sisu](https://en.wikipedia.org/wiki/Immutable_object) kuni oma eksistentsi lõpuni.\n",
"\n",
"Järjend on äärmiselt paindlik dünaamiline andmestruktuur, mis võib sisaldada mistahes tüüpi elemente (sh teisi jadasid). Meid huvitavad siin konkreetsemalt arvujadad. Oletagem näiteks, et takisti takistuse täpseks määramiseks (ja Ohmi seaduse kontrollimiseks) oleme süstemaatiliselt registreerinud voolutugevuse $I$ läbi takisti erinevatel pingetel $U$ (vt tabel). Vastavate järjendite tekitamiseks tuleb lihtsalt elemendid komadega eraldatult asetada nurksulgude vahele:"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"U = [0.50, 1.00, 1.50, 2.00, 2.50, 3.00, 3.50, 4.00]\n",
"I = [41, 83, 125, 166, 207, 248, 291, 332]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ennik kirjeldatakse samamoodi, aga nurksulgude asemel on ümarsulud.\n",
"\n",
"Lihtsaim ülesanne on milliamprite teisendamine ampriteks. Seda saab teha näiteks nii:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.041, 0.083, 0.125, 0.166, 0.207, 0.248, 0.291, 0.332]\n"
]
}
],
"source": [
"for k in range(len(I)):\n",
" I[k] /= 1000\n",
"\n",
"print(I)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`range(n)` genereerib parajasti $n$-elemendilise jada kõik indeksid $0\\ldots n-1$, sest Pythonis indekseerimine algab nullist. Tarvis on veel vaid funktsiooni `len(A)`, mis annab elementide arvu jadas `A` ehk jada pikkuse (*length*).\n",
"\n",
"Pythonis on jada mõistega tihedalt seotud FOR-tsükli realiseerimine. Nimelt koodiga `for x in A` tekitatakse tsükkel, kus tsükliloendur `x` omandab järgemööda kõik väärtused jadas `A`. Seega alternatiivne lahendus on tekitada esialgu tühi järjend, lisades sellele aina uusi elemente meetodiga `append` täpselt sellises järjekorras nagu need esinevad algjadas `I`:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.041, 0.083, 0.125, 0.166, 0.207, 0.248, 0.291, 0.332]\n"
]
}
],
"source": [
"X = []\n",
"for i in I:\n",
" X.append(i / 1000)\n",
"\n",
"print(X)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python lubab sellise tegevuse kirja panna siiski märksa elegantsemalt (ja ka arvutuslikus mõttes efektiivsemalt), kasutades konstruktsiooni, mis kannab nimetust *list comprehension*:"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.041, 0.083, 0.125, 0.166, 0.207, 0.248, 0.291, 0.332]\n"
]
}
],
"source": [
"I = [i/1000 for i in I]\n",
"print(I)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Et saada võimalikult täpne hinnang takistuse $R$ väärtusele, tuleks läbi saadud katsepunktide sobitada Ohmi seadust esindav sirge $I = \\frac{1}{R}U$. Kui eeldada, et põhiline mõõtemääramatus kaasneb sõltuva muutuja (antud juhul voolu $I$) mõõtmisega, siis [vähimruutude mõttes](fit.html) parim hinnang takistuse väärtusele on\n",
"$$R=\\frac{\\sum_k U_k^2}{\\sum_k U_k I_k},$$\n",
"kus $k$ on katsepunkte nummerdav indeks.\n",
"\n",
"Summade arvutamiseks on jällegi erinevaid võimalusi. $\\sum_k U_k^2$ arvutamiseks saaksime kasutada lihtsaimat FOR-tsüklit. Kui aga tahame FOR-tsüklis sünkroonselt liikuda läbi mitme (sama pikkusega) jada (nagu $\\sum_k U_k I_k$ arvutamisel), tuleb kasutada kas indekseid (mis on ebamugav) või funktsiooni `zip`:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Σuu=51.00, Σui=4.231\n"
]
}
],
"source": [
"Σuu, Σui = 0, 0\n",
"for u,i in zip(U,I):\n",
" Σuu += u*u\n",
" Σui += u*i \n",
"\n",
"print('Σuu=%.2f, Σui=%.3f' % (Σuu,Σui))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nii nagu `range`, tekitab ka `zip` iteraatori, millest vajadusel saab järjendi/enniku käsuga `list`/`tuple`:"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(0.5, 0.041),\n",
" (1.0, 0.083),\n",
" (1.5, 0.125),\n",
" (2.0, 0.166),\n",
" (2.5, 0.207),\n",
" (3.0, 0.248),\n",
" (3.5, 0.291),\n",
" (4.0, 0.332)]\n"
]
}
],
"source": [
"from pprint import pprint #pretty print\n",
"pprint( list(zip(U,I)) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Veel lihtsama lahenduse `Σuu` ja `Σui` arvutamiseks pakub funktsioon `sum`, mis leiab arvujada (järjendi, enniku) või iteraatori summa. Pane tähele, et siin funktsiooni `sum` argument ei ole nurksulgudes. Selline konstruktsioon tekitab iteraatori (mitte järjendi)."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Σuu=51.00, Σui=4.231\n"
]
}
],
"source": [
"Σuu = sum(u*u for u in U)\n",
"Σui = sum(u*i for u,i in zip(U,I))\n",
"print('Σuu=%.2f, Σui=%.3f' % (Σuu,Σui))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On mõeldav, et juba lähteandmed on sisestatud tabelitaolise struktuurina. Sel juhul muidugi `zip`-funktsiooni enam tarvis ei lähe:"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Σuu=51.00, Σui=4.231\n"
]
}
],
"source": [
"andmed = ((0.5, 41),\n",
" (1.0, 83),\n",
" (1.5, 125),\n",
" (2.0, 166),\n",
" (2.5, 207),\n",
" (3.0, 248),\n",
" (3.5, 291),\n",
" (4.0, 332))\n",
"\n",
"Σuu = sum(u*u for u,i in andmed)\n",
"Σui = sum(u*i/1000 for u,i in andmed)\n",
"print('Σuu=%.2f, Σui=%.3f' % (Σuu,Σui))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Viimaks saame arvutada takistuse:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R = 12.054 Ω\n"
]
}
],
"source": [
"R = Σuu / Σui\n",
"print( 'R = %.3f Ω' % R )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mõned muud põhioperatsioonid jadadega:\n",
"\n",
"* Kahe jada liitmisel `A+B` moodustatakse uus jada, mis sisaldab (samas järjestuses) esmalt jada `A` ja seejärel jada `B` elemente.\n",
"* Koodidega `x in A` ja `x not in A` saab kontrollida, kas element `x` sisaldub (või ei sisaldu) jadas `A`.\n",
"* `A.reverse()` muudab järjendi `A` elementide järjekorra vastupidiseks.\n",
"* `A[a:b]` tagastab alam-jada indeksite vahemikus $a\\leq i \\lt b$. Seda nimetatakse jada \"viilutamiseks\" (*slicing*). Nagu näha, element indeksiga $b$ jääb parajasti välja. Sellist skeemi on hulga mugavam ette kujutada nii, et indeksid `a` ja `b` osutavad mitte elementidele endile, vaid nende vahekohtadele, nii et jada alguses on indeks 0 ja lõpus `len(A)`. Indeksid tohivad olla ka negatiivsed, sel juhul loendamine toimub jada lõpust. Indeksi tohib ka ära jätta, kui tahetakse kopeerida teatud pikkusega lõik jada alguses või lõpus. Konstruktsiooniga `A[a:b:s]` tagastatakse elemendid sammuga `s`.\n",
"\n",
"\n",
"\n",
"Enniku saab sageli kirjeldada ka ilma sulge kasutamata:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tuple"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 1, 2, 3\n",
"type(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Alati seda siiski teha ei saa, näiteks funktsiooni väljakutsel `f(1,2,3)` ja `f((1,2,3))` on täiesti erineva tähendusega (esimesel juhul 3 täisarvulist parameetrit, teisel juhul üks ennik).\n",
"\n",
"Igasuguse (piisavalt lühikese) jada saab lihtsasti \"lahti pakkida\" üksikelementideks:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a=1, b=2, c=3\n"
]
}
],
"source": [
"a, (b, c) = [1, (2, 3)]\n",
"print('a=%d, b=%d, c=%d' % (a,b,c))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Muuhulgas lubab see ühe võrdusmärgiga omistada väärtuse mitmele muutujale:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"a, b, c = 1, 2, 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sellisel viisil on mugav ja efektiivne ära vahetada kahe muutuja väärtused (mis traditsioonilisemas keeles nõuaks ajutise muutuja kasutamist):"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a = 2\n",
"b = 1\n"
]
}
],
"source": [
"a, b = b, a\n",
"print('a =', a)\n",
"print('b =', b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Jadadega seonduvalt vaatame *määramata* parameetrite arvuga funktsiooni defineerimist:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4.4"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def keskmine(*arvud):\n",
" if len(arvud) == 0:\n",
" raise TypeError('Funktsioon vajab vähemalt ühe argumendi!')\n",
" return sum(arvud) / len(arvud)\n",
"\n",
"keskmine(2, 4, 8, 3, 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin funktsiooni argument kujul `*arvud` annab mõista, et funktsiooni väljakutsel Python peaks kõik funktsiooni argumendid kokku koguma ühte järjendisse nimega `arvud`, mida saaks siis funktsiooni kehas kasutada. Antud funktsioon on ilmselt mõttetu, kui parameetrite arv on 0, sel juhul programm katkestatakse veateatega (luuakse üks Pythoni standardne erind `TypeError`).\n",
"\n",
"Operatsioon toimib ka vastupidi: funktsiooni väljakutsel `funk(*jada)` jada elemendid edastatakse funktsioonile eraldi argumentidena, st `funk(*jada)` on ekvivalentne koodiga `funk(jada[0], jada[1], ...)`. Koostame näiteks funktsiooni `summa`, mille argumendid tohivad olla (läbisegi) nii arvud kui ka jadad. Objekti andmetüüpi saab kontrollida funktsiooniga `isinstance`. Seda algoritmi on mugav realiseerida rekursiooni abil."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"45.0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def summa(*objektid):\n",
" if len(objektid) == 0:\n",
" raise TypeError('Funktsioon vajab vähemalt ühe argumendi!')\n",
" tulemus = 0.\n",
" for x in objektid:\n",
" if isinstance(x, (int, float)):\n",
" tulemus += x\n",
" elif isinstance(x, (tuple, list)):\n",
" tulemus += summa(*x)\n",
" else:\n",
" raise TypeError('Argumendi tüüp on tundmatu!')\n",
" return tulemus\n",
"\n",
"summa(2, 4, (8, 6), 3, [5, 9, (7, 1)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Eespool sisestati katseandmed tabelina andmed, mille iga element kirjeldas 2-elemendilise ennikuna ühte katsepunkti. Realiseeri vähemalt kolm erinevat lahendust, kuidas sellest tabelist eraldi järjenditena kätte saada pinge- ja vooluväärtuste massiivid, näiteks:\n",
"
Harjutus. Kodeeri funktsioon summa(*objektid) ilma rekursioonita!
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Graafikud"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Matplotlib](http://matplotlib.org/contents.html) on mahukas teek mitmesuguste graafikute kujundamiseks Pythonis. Tegemist on keerulise objekt-orienteeritud süsteemiga, kuid moodulisse `matplotlib.pyplot` on koondatud komplekt funktsioone, mis realiseerivad Matlab'ile sarnase lihtsa käsustiku. Enamus graafikuid saab tehtud selle käsustiku baasil.\n",
"\n",
"Uus joonis luuakse käsuga `figure`. Viimasel on ka hulk nimelisi argumente, millest olulisimad on joonise mõõdud tollides (`figsize`) ja punktide (pikslite) arv tolli kohta (`dpi`). Joonisele paigutatakse üks või mitu teljestikku käsuga `subplot` või `axes`. Näiteks käsuga `subplot(231)` antakse mõista, et joonisele kavatsetakse paigutada kokku kuni 6 graafikut kahes reas ja kolmes veerus ning luuakse ja aktiveeritakse 1. teljestik (st teljestik 1. rea 1. veerus). Seejärel andmete kandmine aktiivsele teljestikule toimub käsuga `plot`, millele tuleb anda argumentidena andmemassiivid. Käsu `plot` korduva väljakutsega saab ühele teljestikule lisada rohkem kui ühe andmeseeria. Lisaparameetritena saab näidata iga andmeseeria jaoks ka nime ja kujunduse. Seeriate eristamiseks üksteisest on põhimõtteliselt hulk võimalusi: ühelt poolt joone värv, stiil ja paksus, teiselt poolt sümboli värv, kuju ja suurus. Lihtsamate juhtude jaoks on olemas spetsiaalsed lühikesed koodid. Näiteks koodiga `r-` tehakse punast värvi (*red*) pidevjoon, koodiga `bo--` tehakse sinised (*blue*) mummud, mis on kriipsjoonega ühendatud, jne. Andmeseeria tähis ja nimi kantakse legendile, mis tekib käsuga `legend`. Telgede nimed/tähised ja teljestiku pealkiri kuvatakse käskudega `xlabel`, `ylabel` ja `title`. Käsk `grid` lisab ruudustikujooned (*grid lines*). Viimaks graafik kuvatakse käsuga `show`. Pärast graafiku kuvamist hakkavad järgmised käsud kujundama juba uut graafikut.\n",
"\n",
"Käsud `figure` ja `subplot` (või `axes`) tohib ka üldse ära jätta, sel juhul teljestik luuakse automaatselt. Seejuures käsu `plot` korral tekib ristkoordinaadistik, käsu `polar` korral polaarkoordinaadistik.\n",
"\n",
"Niisiis elementaarne kood lihtsa graafiku kujundamiseks on järgmine:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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lgzh119Fxozx2or0YH1LG1jfYnGQjz+OVCe3UhC2h01PaBC1tbVpu1efPvDgg3r9559bSS9WWBjpD99vP7j88rTZ5gY1NTXMmTOn43BIRxyh48yBfq22aJH7xmUAcevbSRkwAK69NrVr+EXjWN+yycQZg32Lqxpb3wL4px6bjIiOBAU68cff/95yv4ka28ajizQ0NKT1fldeqWdpgR6SU14etfP++yMDux99FLL8/egDgQDffvstgUCg44MfekgnHAadf03MGXRsKgnp20loanL2en7S+MorYa+99Ozr00+P2Wmwb3FdY+tbfFWPTUiAHkIAACAASURBVCUQgMMP19Gg/vhH2G672P3maWxD9biAV6F6AN58E846S6//5S+hDoGVK/Xg9WBQB456//202mQEt9yiR/8DvPsunHSSt/ZYfEVDAxxyCJx5pnbuPXt6bVH62bChlXJb32J9i8UxCgr07Gov8lfbUD2dnDPO0G9TQL9eKi9H508LBxftrDMD77478om8/XY9Nd1iiZOxY2HJErjvPvjPf7y2xhtabTBb32J9i8UxdtrJm4ZjMtjGo4ukK1RPNErB44/r7BDz58MWP36hw9UDXHSRHpOUARQXF/PQQw/FH7pgq620Ywed03HyZPeMywAS1jeDqanR2egAdt4ZrrrKmev6WeNgEOaOW2G8b0mLxp3ct/i5HnvNxo26R78jTNTYNh5dpEfSuQNT47DDdNq03/wGuPdevbFLl8g3YAbQq1cvTj31VHr16hX/SbfcAttuq9fvvz/SY2LZhKT0zVBGj9ZzQkB/hHJznbmuXzWeM0ePfzxm5O6sYhejfUvaNO7EvsWv9dgEnntO/yB9/HGd8bItTNTYNh5dJNepb5lkWbBAj8EB3V2y887e2uMg3bp1Y5999qFbt27xn9S9O/z1r3p95Up4+WV3jMsAktI3A6mujryN3WsvuOAC567tV4379IEffoBGyeYB7jHat6RN407sW/xaj70m7FtKSmD8eB2Mvy1M1Ng2Hl1k48aN3hpw3300ksXk7ItZeeF93triMLW1tSxYsCDxcEjXXKPjrIDuIUjzjHi/kLS+GcZzz0FpqV4fNap9B58oftV4333hnH46k8xELuH7Eeb6lrRq3El9i1/rsdck4ltM1Ng2Hl2krq7Ou5vPncvG9z9hP5ZwYeNE/ja2v3e2uEBt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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.pyplot import *\n",
"from math import sin, cos, pi\n",
"\n",
"n = 200 # mitu andmepunkti\n",
"X = [4 * pi * i / n for i in range(n)] # vahemikus 0...4pi\n",
"Y1 = [sin(x) for x in X]\n",
"Y2 = [cos(x) for x in X]\n",
"\n",
"figure(figsize=(6,3), dpi=120)\n",
"plot(X, Y1, 'r-', label='sin(x)')\n",
"plot(X, Y2, 'b--', label='cos(x)')\n",
"xlim(0, 4*pi)\n",
"title('harmooniline võnkumine')\n",
"xlabel('aeg')\n",
"ylabel('signaal')\n",
"legend(loc='lower left')\n",
"grid(color='gray', linestyle=':')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Polaarteljestikuga graafik tekib analoogiliselt:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figure(figsize=(4,4), dpi=120)\n",
"n = 300\n",
"θ = [2 * pi * i / n for i in range(n)]\n",
"R = [2 - sin(6*t) - 0.5 * cos(30*t) for t in θ]\n",
"polar(θ, R, 'b-')\n",
"ylim(0, 3.5)\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mitut graafikut sisaldava joonise konstrueerimiseks tuleb käsku `subplot` välja kutsuda mitu korda. Vaikimisi tekib ristkoordinaadistik, polaarkoordinaadistik luuakse parameetriga `projection='polar'` või `polar=True`.\n",
"\n",
"Olgu meil eksperimentaalselt mõõdetud sõltuvus, mida teoreetiliselt peaks kirjeldama astme-, eksponent- või logaritmfunktsioon. Selle veenvaks demonstreerimiseks tuleks graafik (st selle üks või mõlemad teljed) viia logaritmilisse skaalasse, nii et see sõltuvus muutuks lineaarseks:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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4FpgcghhVdTxtDVmdhkwHhgedFOE5J5ycUwpF0dLuTgeVDi77TTdklGRWjfVAiJ5YGbfA2YCM0IIP4k6nrYmdSPQAuDHwAdm1jV1qEPqeFcgGUKojShEaV2Ui2NKuThaysXxoa4abg0wyMwa/yExNLVem+d4hAOJejYwO4Twg4jDaat6AL3xIah2NFgm4pdrdwAPRhadtDbKxTGkXBwLysUxoeHoADMbCzwJXB1C+F2D/YuBYWgIpLwzs1nA7cD3Qwizoo6nrTKzYmBkE4em43d1jwW2hRBU0MgxUy6OH+XieFAujg911QBCCIvN7BngXjPrjI9ROREYA1ynRJ1fZnYrnqj/AjxhZgclixDCikgCa4NCCLuBFxrvN7NvAPtDCIccEzlaysXxolwcH8rF8aHCOe1S/C7h2/H+dG8DE0MICyONqm0an1qPSS2NWR5jEZH8Ui6OD+VikUbUVUNEREREJAO6OVBEREREJAMqnEVEREREMqDCWUREREQkAyqcRUREREQyoMJZRERERCQDKpxFRERERDKgwllEREREJAMqnEVEREREMqDCWUREREQkAyqcRUREREQyoMJZRERERCQDKpxFRERERDKgwllEREREJAMqnEVEREREMvD/ihJss89MXsoAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from math import exp\n",
"\n",
"# \"eksperimentaalsed\" andmepunktid\n",
"X1 = [1, 2, 3, 4, 5]\n",
"Y1 = [2.5, 8, 20, 56, 173]\n",
"\n",
"# teoreetiline sõltvus (pidevjoon) peenema sammuga\n",
"X2 = [0.1*i for i in range(55)]\n",
"Y2 = [exp(x) for x in X2]\n",
"\n",
"figure(figsize=(7,3), dpi=120)\n",
"subplot(121)\n",
"plot(X1, Y1, \"bo\", label=\"katse\")\n",
"plot(X2, Y2, \"r-\", label=\"teooria\")\n",
"grid()\n",
"legend()\n",
"subplot(122)\n",
"plot(X1, Y1, \"bo\")\n",
"plot(X2, Y2, \"r-\")\n",
"yscale('log')\n",
"grid()\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Automaatne skaalakriipsude (*ticks*) valik ei pruugi olla alati optimaalne. Näiteks äsja saadud graafikutel võiks skaalakriipsud olla kohati tihedama sammuga. Kõige konkreetsem lahendus on kõikide kriipsude (ja vajadusel ka nende tähiste) asukohad jadana ette anda (käsuga `xticks` või `yticks`)."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figure(figsize=(7,3), dpi=120)\n",
"subplot(121)\n",
"plot(X1, Y1, 'bo')\n",
"plot(X2, Y2, 'r-')\n",
"xticks( tuple(range(6)) )\n",
"grid()\n",
"\n",
"subplot(122)\n",
"plot(X1, Y1, 'bo')\n",
"plot(X2, Y2, 'r-')\n",
"yscale('log')\n",
"xticks( tuple(range(6)) )\n",
"asukohad = 1, 3, 10, 30, 100\n",
"yticks( asukohad, asukohad ) # kriipsud ja nende tähised\n",
"grid()\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vajadusel saab käskudega `xticks` ja `yticks` skaala kriipsud ja tähised ka üldse ära kaotada (andes argumendina tühjad jadad). Koordinaatteljed tervikuna (koos kõigi tähistega) saab ära peita käsuga `axis('off')`. \n",
"\n",
"Et kasutada kujundatud graafikut artiklis või esitluses, tuleks see salvestada. Lihtsaim variant on kasutada käsku `savefig`, millele tuleb anda failinimi (kui faili teed ei näidata, tekib fail samas kataloogis, kus asub Jupyteri töölehe fail). Failitüüp valitakse automaatselt failinime laiendi järgi. Olemas on nii vektorgraafika (näiteks PDF) kui ka rastergraafika (PNG) formaadid. Parameeter `bbox_inches='tight'` eemaldab tühja ala joonise ümbert ning parameetriga `dpi` saab muuta punktitihedust (vajaliku teravusega rasterkujutise saamiseks). Käsk `savefig` tuleb anda enne käsku `show`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Eespool toodi pinge ja voolutugevuse andmed takisti mõõtmisel. Kanna katsepunktid koos lähendussirgega graafikule, vormista see korrektselt ja salvesta viimaks nii PDF kui ka PNG formaadis (kaks savefig käsku järjest). Ava failid ja võrdle nende sisu!
Harjutus. Lissajous' kõverate parameetrilised võrrandid on järgmised:\n",
"\\begin{align}\n",
"x &= \\cos(at+\\delta)\\\\\n",
"y &= \\sin(bt)\n",
"\\end{align}\n",
"Siin $t$ muutub vahemikus $0\\ldots 2\\pi$. Iga kujundi jaoks on $a$, $b$ ja $\\delta$ kindlad konstandid. Konstrueerige järgnev joonis kolme Lissajous' kujundiga, mille parameetrid on näidatud vastava teljestiku kohal.\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## NumPy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python on dünaamiline programmeerimiskeel, näiteks muutujate tüüp võib meelevaldselt muutuda programmi täitmise käigus. Sellest tulenevalt on Pythoni kood võrdlemisi aeglane, mis avaldub hiljemalt siis kui hakata matemaatilisi operatsioone sooritama suurte arvumassiividega (liikudes FOR- või WHILE-tsükliga element-haaval läbi massiivi). Igasugused standardsed operatsioonid arvumassiividega tuleks võimaluste piires [vektoriseerida](https://en.wikipedia.org/wiki/Array_programming), st vältida ilmutatud kujul tsükli kasutamist ja realiseerida mõnes kiires madala taseme keeles, nagu Fortran või C. Liiatigi on paljud klassikalised arvutusalgoritmid juba ammu realiseeritud [tuntud teekides](https://en.wikipedia.org/wiki/List_of_numerical_libraries) ja neid ei ole mingit mõtet hakata Pythonis ümber kirjutama.\n",
"\n",
"Pythoni teek [NumPy](http://docs.scipy.org/doc/numpy/reference/) (*Numerical Python*) realiseerib teadusarvutusteks sobivad andmemassiivid (`numpy.ndarray`) ja põhilised (vektoriseeritud) matemaatilised operatsioonid nende massiividega. Kui Pythoni järjend või ennik on sisuliselt mäluviitade massiiv (kus viidad võivad osutada suvalistele Pythoni objektidele, mis on arvuti mälus laiali), siis NumPy massiivid on *homogeensed* ja *sidusad*, st kõik elemendid on sama tüüpi ja paiknevad arvuti mälus katkematu rivina. Selle tõttu NumPy massiivid nõuavad vähem mälu ja matemaatilised operatsioonid on kiiremad.\n",
"\n",
"Sõltuvalt olukorrast saab NumPy arvumassiivi tekitada mitmesuguste võtetega:\n",
"* anda elemendid ette järjendi või ennikuna (funktsioon `array`)\n",
"* tekitada lihtsamaid arvumassiive funktsioonidega `arange`, `linspace`, `geomspace`, `zeros`, jne\n",
"* luua mitmesuguseid juhuslike arvude massiive mooduli `numpy.random` funktsioonidega\n",
"* lugeda arvumassiiv tekstifailist (`loadtxt`)\n",
"\n",
"Vaatame esmalt triviaalse näite varal (jällegi takistuse mõõtmise andmed) NumPy massiivi tegemist ja vektoriseeritud arvutusoperatsiooni tähendust. Andmed sisestatakse endiselt Pythoni jadana, mille funktsioon `numpy.array` konverteerib NumPy massiiviks ehk andmetüübiks `numpy.ndarray`. Vajadusel oleks võimalik täpsustada ka massiivi elementide [andmetüüpi](arvud.html), aga praegu valitakse sisestatud andmete põhjal automaatselt andmetüübiks ujukomaarv (sisuliselt sama mis Pythoni `float`)."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([12.19512195, 12.04819277, 12. , 12.04819277, 12.07729469,\n",
" 12.09677419, 12.02749141, 12.04819277])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"U = np.array( (0.50, 1.00, 1.50, 2.00, 2.50, 3.00, 3.50, 4.00) )\n",
"I = np.array( (0.041, 0.083, 0.125, 0.166, 0.207, 0.248, 0.291, 0.332) )\n",
"\n",
"U / I"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Seega õnnestus arvumassiivid `U` ja `I` element-kaupa läbi jagada ilma tsüklit kasutamata.\n",
"\n",
"Nende näidisandmetega jätkates, ka valemis\n",
"$$R=\\frac{\\sum_k U_k^2}{\\sum_k U_k I_k}$$\n",
"sisalduvad arvutusmustrid on hästi tuntud ja triviaalsed realiseerida NumPy vektoriseeritud operatsioonide abiga:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R = 12.054 Ω\n"
]
}
],
"source": [
"R = np.sum(U**2) / U.dot(I) # või np.sum(U**2) / np.sum(U*I)\n",
"print( 'R = %.3f Ω' % R )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Eespool mitmesuguste graafikute tegemisel tuli üsna palju vaeva näha andmete prepareerimisega. NumPy teeb selle töö märksa lihtsamaks. Kasulikuks osutub funktsioon `numpy.linspace(a,b,n)`, mis tekitab $n$-elemendilise arvuvektori, kus arvud vahemikus $a$ kuni $b$ paiknevad konstantse sammuga. Matplotlib aktsepteerib (ja kasutab ka sisemiselt) NumPy massiive. Näiteks siinuse ja koosinuse graafiku saab nüüd nii:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.pyplot import *\n",
"from numpy import sin, cos, pi, linspace\n",
"\n",
"x = linspace(0, 4*pi, 200) # 0 kuni 4*pi, 200 punkti\n",
"\n",
"figure(figsize=(6,3), dpi=120)\n",
"plot(x, sin(x), 'r-')\n",
"plot(x, cos(x), 'b--')\n",
"xlim(0, 4*pi)\n",
"xlabel('aeg')\n",
"ylabel('signaal')\n",
"grid()\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rõhutame, et siin funktsioonid `sin` ja `cos` on võetud moodulist `numpy`. Vastavad `math` funktsioonid ei oska NumPy massiividega midagi teha.\n",
"\n",
"Tõsisema näitena joonestame graafiku soojuskiirguse spektritega erinevatel temperatuuridel ([Plancki kiirgusseadus](https://en.wikipedia.org/wiki/Planck%27s_law)):\n",
"$$B(\\lambda, T)=\\frac{2\\pi c^2}{\\lambda^5}\\cdot \\frac{1}{\\exp\\left(\\frac{hc}{\\lambda kT}\\right)-1}.$$\n",
"Selle võrdlemisi keerulise matemaatilise avaldise saame NumPy abiga loomulikul kujul kirja panna ja tsükleid kasutamata läbi arvutada 200-elemendiliste massiividega. Kuna kvantiteedid muutuvad siin mõlema koordinaadi sihis mitmeid suurusjärke, oleme sunnitud kasutama topelt-logaritmilist skaalat. Käepäraseks osutub siin funktsioon `numpy.geomspace(a,b,n)`, mis tekitab $n$-elemendilise arvuvektori, kus arvud vahemikus $a$ kuni $b$ paiknevad ühtlase sammuga logaritmilisel skaalal."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAp8AAAG3CAYAAADy/z7OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASdAAAEnQB3mYfeAAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd3hU1dbA4d9OgYQUSCA0G106QRFQioCEEhRJBKQXBRHLFb2AFQjYEFTA69UriIBSpYMCgh9FUJoFpYMgRQkSE1ogAZLs74+dTiCTzCRnJrPe5znPnLLnzBo9JCu7Kq01QgghhBBCFAYPqwMQQgghhBDuQ5JPIYQQQghRaCT5FEIIIYQQhUaSTyGEEEIIUWgk+RRCCCGEEIVGkk8hhBBCCFFoJPkUQgghhBCFRpJPIYQQQghRaCT5FEIIIYQQhcbL6gDE9ZRSJYH7gZPAVYvDEUIIIYS4mWLAbcAmrfX53ApL8umc7geWWx2EEEIIIUQePAysyK2QJJ/O6STAsmXLqFatWoF8QHx8PDt27KBx48b4+/sXyGcIAcDFi7BjB/zyi9kOHIArV+y7Z8mSUKMG1KtntrvvhuBgx8QrhI3k56hwdoX1jP7+++906dIFUvOX3Ejy6ZyuAlSrVo06deoUyAdcuHCB06dPU6tWLQIDAwvkM4QbO30aFiyAZctgyxZISrpxWaUgJAQCAsDPD7y8ICWF5MRErsbE4JOYiLp0Ket7zp+HnTvNlnaPRo2gfXvo0AGaNDH3EaIAyc9R4ewseEZt6iooP52diFIqChhjdRxC5EtyMqxcCZ98AmvXQkpK1uuentCwITRtCnXrQq1aUKUKlC+fY6J46cIFNmzYQOvWrQlUCk6ehGPHYP9+2LsXfv4Z9uwxn6t1RjL6xhumZvShh6BfP2jTxny2EEIIpyDJpxPRWkcBUUqpOsAei8MRwjaXLpmE84MP4PjxrNcqVTJJYHg4tGhhajbzIyAAatc2W3h41s/escMku2vWwK5d5vz58zB7ttkqVoRevUwiWq9e/j5fCCGEw8hUS0KI/Ll8Gd59FypXhn//OyPxLFkSnnoKtm6Fo0dNUtqhQ/4Tz5vx84PWreHtt01/0uhomDULunaF4sVNmVOnTJz160PjxjB3Lly75vhYhBBC2ESSTyFE3mgN8+fDnXfCiBEQE2PO16wJH38Mf/0F//2vaV5XqnBjK1/e1HAuXGj6nU6bZmpc0+zcCb17m4R5/HiIiyvc+IQQQkjyKYTIg337oGVL6NkT/vzTnKtVyySje/bAk08WTA1nfpQqBYMGwXffmRrY0aPNwCYwCfLLL8Ntt8G//mVqR4UQQhQK6fMphMjdtWswcSKMHQtXUwczli1rmrv793f+AT2VK5vYX37ZNLtPmmSS5cuX4T//MTWkTz0FL75ovpcQRVRKSgp///03V65cISX7oEBR5Fy7do3g4GCio6P5559/8vReDw8PihcvTrly5fDwcGxdpdR8CiFu7uhRaNYMXn3VJJ4eHjBsGBw6BI895vyJZ2Y+Pibm336DdeugXTtzPjER3n/fjL5/5RVpjhdFUkpKCidOnODcuXNcvXoVrbXVIYkC5uXlRUhICF55nHpOa83Vq1c5d+4cJ06ccPgfKlLzKYS4sQULYPBgM1E8mNHmn31m5tF0ZUpB27Zm27IFXnsNNm0yo+fffhs++giiouDpp8Hb2+pohXCIv//+m4SEBIKDgylbtiyqsPtki0KXnJzMxYsXCQgIwDOPFQVaa86cOUNcXBx///03FSpUcFhcUvMphLheUhI8/zz06JGReA4bZubWdPXEM7vmzWHDBvj2W7j3XnPu/Hnz/evXh2++sTY+IRzkypUreHp6SuIpbKKUomzZsnh6enLF3lXpspHk04kopaKUUhqZ41NY6exZM5fm5MnmODjYTB4/aVLG9EVFjVLwwAPw/fewfDmkLWt74ICZJqpzZzh82NoYhbBTSkoKnp6ekngKmyml8PT0dHizuySfTkRrHaW1VkBdq2MRbur4cVP7t26dOa5f39R2PvigtXEVFqVMorlnD0yYYCa3B5N8160L48ZlDLgSwgVJ4inyqiCeGUk+hRDG7t1w331w8KA5fuQRUxN4xx3WxmWF4sXNHKZpg6qUMknnmDFw111mAn0hhBD5IsmnEAJ++MFMxp423+W//w1ffgn+/tbGZbXy5WH6dJNspi3NuXevGf3/r39l9IcVQghhM0k+hXB3338P7dubQTZg5vN8910zpZIwmjSBn36CN980taJam/lB69SB//s/q6MTwq0ppWzaNm7c6LDP/Pbbb9Pvm9P8mUePHiUyMpJSpUrh7+9PWFgYP//8c473mj9/PqGhofj4+FCxYkWGDRtGfHx8rjEcO3YMpRTvvvtulvPJyck89thjKKV466238vcFC5j8dhHCnW3ZYgbUxMebpuXp02H4cKujck7e3mYO0F9/Nas8AZw8aaZrev55SEiwNj4h3NTWrVuzbOHh4fj6+l53/q677nLI58XHxzN48GAqVqyY4/WYmBhatGjBoUOH+Oyzz/jyyy9JTEykVatWHEzr1pRqzpw59OzZk3vuuYfVq1czZswYZs6cSWRkZL5iu3r1Kt27d2fWrFl89NFHvPLKK/m6T0GTeT6FcFc//ggdO2YknjNmmNWKxM3deaeZmmnqVNM94fJlMzPA2rUwezY0bGh1hEK4laZNm2Y5DgkJwcPD47rzjvLSSy8RFBREp06deOONN667PnHiRGJiYvjhhx+4I7XPfPPmzalatSqjR49mwYIFgKmhHDFiBO3atWPatGkAtG7dmoCAAHr37s3q1avp2LGjzXFdunSJLl26sGnTJubMmUOPHj1ITk52wDd2PKn5FMIdHTyYNfGcOVMSz7zw8DDr2P/6K6T9gtu3zzTPv/UWOOkPfCGEfTZv3szUqVP59NNPbzhp+9KlS2nTpk164gkQGBhIZGQkK1euJCkpCYBt27YRHR3NwIEDs7y/W7du+Pv7s3TpUpvjOnv2LG3btuX7779n2bJl9OjRIx/frvBI8imEu/nrL7OsZFo/pQ8/hH79rI3JVVWrBps3w+uvg5cXXLtmliFt2xaio62OTgiRg6SkJJu27MuPJiQk8PjjjzNs2LAbNuEnJCRw5MgR6tevf921+vXrk5CQwNGjRwHYs2dP+vnMvL29qVmzZvr13ERHR9OyZUv279/P2rVrCQ8Pt+l9VpJmdyHcSXw8dOoEJ06Y46goeOopS0NyeV5eZnnODh2gb18zMf3GjRAaaprhw8KsjlCImxo2DHbtsjqKDKGhGWtcFARvG5fMnTFjBgMGDEg/HjVqFMnJyYwdO/aG7zl79ixaa4KDg6+7lnYuNjY2y+uNyh47dsymON9//30A1q5dS/PmzW16j9Uk+RTCXSQnQ+/epqkYYOhQGD3a2piKkkaNTD/aZ54x3RjOnDGzCLzyiknyveTHrXBOu3bBpk1WR1F4du7caVO5ypUrp+/v2LGDyZMns2bNGnx9fXN9780mZs9+7UZlbZ3cvX379mzcuJEXXniB9evXExISYtP7rCQ/DR1MKfUY8ApQHjgJPKi1PmJtVEIAL78MK1aY/fbt4YMPTH9P4Th+fmbgVuvWJrm/fNlMz/TddzB/PtxgdKwQVgoNtTqCrAo6nlAbPyBzn87HHnuMyMhIGjVqxLlz5wBITEwE4MKFCxQvXpyAgACCgoJQSqXXamYWFxcHZNR0li5dGjA1oOXKlbuubE41ojlp27Ytzz33HBEREbRu3Zr169dTtmxZm95rFUk+HUgp9RAwDOgM7AeqAnGWBiUEwLx5Zv5OgNq1YcECqYkrSP36wT33QPfuZqnOzZvNykiLFoGLNIsJ91GQTdzOKD/N7nv37mXv3r0sXLjwunJVq1alQYMG7Nq1C19fX6pVq8bu3buvK7d79258fX2pUqUKAPVSF67YvXs3tWvXTi+XlJTEgQMH6Nmzp83fqWPHjixfvpwuXbqkJ6DZE1pnIr99HGsU8LzWel/q8e9WBiMEYJKfQYPMfnCwWae8ZElrY3IHtWrB9u1mJaTp0+Hvv02N6KRJ8PTTUusshEXy0+y+YcOG667PnDmTWbNmsWzZMm655Zb08xEREUyePJmTJ09y2223AXDx4kWWLFlC586d8Ur9w79JkyZUqFCBmTNn8uijj6a/f9GiRcTHx+d5rs/27duzfPlyHn744fQE1Fmb4N02+VRKBWCSxVCgIVAGGKu1jsqhrD/wBtAdCAYOAOO11vMzlfFMvU9dpdRMIAn4DHhDZx8yJ0RhOX8eIiNN869SMHcupP7VLQpBiRLw6admCqZnnjHrwz/7LOzcCf/7H9jQd0wI4ViNGjXK83tatWp13bm0FZOaNWtGmTJl0s8PHz6cL774gk6dOjFu3DiKFy/O+PHjSUxMJCoqKr2cp6cnEyZMoG/fvgwZMoSePXty+PBhRo4cSVhYGB06dMhznO3atWPFihXpCei6devwd8Jlkt15qqXSwBNAcWBZLmWXAP2BsUBHYCcwTynVK1OZcphkvh1QD2gN9EndhCh8Wpsaz8OHzXFUlOnrKQrf4MGm32da7cjnn5vm9+PHrY1LCOFwISEhbN68mapVq9K/f3+6du2Kt7c3GzdupGbNmlnK9unTh7lz57Jt2zbat2/P6NGj6devH0uWLMn354eFhbFy5UqOHz9O27ZtiXbCad+Uu1bKqdRhZFprrZQqA8SQQ82nUioc+BropbWel+n8WqAOcLvWOlkpFYTp33m/1vq71DIvAPdorW/YcUMpVRbIXi9eFVi+bds2atWqZec3zdmlS5fYsWMHjRs3xs/Pr0A+Q1jL+/PP8X32WQCuhYWR8OWXLrVee1F8RtWZM/gOGIDX998DkBISQsKcOSQ3aWJxZCI/XO0ZjY6OxsvLi0qVKlkdiigkycnJXL58mRIlStxwUvzcHDt2jKSkJCpUqHDDMvv3709bUaqu1npvbvd022b3PDSFRwDxQPZexjOAuUAT4Aet9Vml1KlsZWzp1PUUMCanCzt27OD06dM2hpk/O3bsKND7C2v4//UX96eu0Z4YFMSGvn256qJzqRS1Z1Q9/zx1goKo+tVXeMTE4BMezq6nn+bP1q2tDk3kk6s8o8HBwYSEhHDx4kWrQxGF7PLly/l+77Vr14iJieHAgQM3LHMibe5oG7lt8pkHdYH9WuukbOd/y3T9h9T9mcBIpdQvQElgMKav6M18xPWJbVVgeePGjaXmU+Td1av4PfAAnleuoJUiecYMmrlgYlOkn9GwMBJmzcLnhRfwTEri7ilTqOvhwZXRo12qdtrdudozmlbzGRAQYHUoopA4ouYzNjaWsmXL0qBBgxuW2b9/f57uKcln7koDR3M4H5fpepqxwH+BP4GLwFSt9eyb3VxrfQY4k/lc2sSy/v7+BAYG5i9qG/n5+RX4Z4hCNmoU/Gb+NlIjRuD38MMWB2SfIvuMPvss1KsHjzwCcXEUnzSJ4kePmlWRnHCAgLgxV3lG/0ldUje/SYhwXZ6envn+/66Uwtvb+6bPeF4HNcmf2La5WRN9+jWt9VWt9WCtdUmt9a1a63F5+RClVJRSSgO2LegqRHY//ghvv232GzQwa44L59WqFezYYaZlAli+HFq2lHXhhRBFmiSfuYsla+1mmrSlBxw2ibzWOkprrTBN+ULkzZUrMGCAWUbTywtmzYJixayOSuSmalXYutWsDQ/wyy9w772Qx2YsIYRwFZJ85m43UEsplb2LQr3UV4fVUkrNp7DL66/D3tRBhqNGmZpP4RpKljST/w8ebI6PH4dmzczKSEIIUcRI8pm7pYA/8Ei28/2BU8B2R32Q1HyKfNuzB955x+w3bGjWcReuxcsLPvkE3kgdo3j2LISFQQ7L+QkhhCtz6wFHSqmOgB+QNvSvtlKqa+r+Kq31Za31aqXUOuBjpVQgZsnMnkAHoI/WOrnQAxcis5QUGDIEkpLMSOnp08HGtYuFk1EKXn0Vbr3VLBBw5Qo8+ij8+Sc8/7zV0QkhhEO4dfIJfAzckem4W+oGUBk4lrofCbwJjCNjec2emZfXFMIy06fDD6mzfT33nKn5FK6tf3+oWNGMhL94EV54AU6cgPfek6mYhBAuz61/immtK2mt1Q22Y5nKxWutn9NaV9BaF9daNyiIxFP6fIo8O3MGRo40+7fdBuPyNMGCcGZhYWZJzrRVRSZPNrWgiYnWxiWEEHZy6+TT2UifT5FnL78M586Z/f/8R+aHLGpCQ2HbNqhd2xwvWgSdOpnaUCEEYOahtGXbuHGjXZ/z2muv8eCDD3LLLbeglGLAgAE3LHv06FEiIyMpVaoU/v7+hIWF8fPPP+dYdv78+YSGhuLj40PFihUZNmwY8fHx15WLj49n2LBhVKxYER8fH0JDQ5k/37Z6sLFjx6KUSp/rNc2RI0eoUqUK5cqVY9euXTbdyxEk+RTCVf34I8yYYfY7dQIXn0xe3MDtt8OWLdCihTlevx7atoXYWGvjEsJJbN26NcsWHh6Or6/vdefvuusuuz5n0qRJxMbG0rlzZ4rdZBq7mJgYWrRowaFDh/jss8/48ssvSUxMpFWrVhw8eDBL2Tlz5tCzZ0/uueceVq9ezZgxY5g5cyaRkZHX3TcyMpJZs2YxZswYVq9ezT333EPPnj2ZO3duvr7P7t27adGiBcnJyWzZsoXQ0NB83Sc/3L3Pp1NRSkVxg3XehchCa9O/U2szuOj9962OSBSkoCD45hvo1g2+/tpMTH///bB2rekbKoQba9q0aZbjkJAQPDw8rjtvr4sXL+KR2uf6iy++uGG5iRMnEhMTww8//MAdd5hhJc2bN6dq1aqMHj2aBQsWAGbpyxEjRtCuXTumTZsGQOvWrQkICKB3796sXr2ajh07ArBq1SrWrVvH3Llz6dmzZ3rZ48ePM2LECB599NE8rWC0bds2wsPDKVeuHOvWrePWW2/N+38QO0jNpxORZndhs3nzsg4yqlHD2nhEwfP1haVLIfUXD3v3QvPmcDSn1X+FEI7mYeNgv6VLl9KmTZv0xBMgMDCQyMhIVq5cSVJSEmASwOjoaAYOHJjl/d26dcPf35+lS5dmuae/vz/dunXLUnbgwIGcOnWK7dttn/Vx3bp1tG3blqpVq7J58+ZCTzxBkk8hXE9CArz4otkvV85MKC/cg7e3Wft96FBz/McfJgHdI2MUhbBVUlKSTZvWN1tZO2cJCQkcOXKE+vXrX3etfv36JCQkcDT1D8Y9qf9us5f19vamZs2a6dfTytaqVQsvr6wN1mnv3WPjz4DFixfz4IMPcs8997B+/XrKlClj+5dzIGl2F8LVTJli5n0EePNNCAy0Nh5RuDw84L//hVKl4O23zTrwLVvC6tXQpInV0QkXNGzNMHadLrzBJrkJLR/K5A6TC+z+3jbOgzxjxoybDirKydmzZ9FaExwcfN21tHOxqf21015vVPbYsWPpx7GxsVSpUiXXe+bmySefpEqVKqxevRofHx+b3lMQJPkUwpXExsL48Wa/Th2zlrtwP0rBW2+ZvqAjR5rVkB54AJYvN69C5MGu07vYdHyT1WEUmp07d9pUrnLlyvn+DKWUzdduVNbWcrldy6xz586sWLGCqKgoxqf9LrGAJJ9ORAYciVy9+SacP2/2x4+HPHQwF0XQiBGmBnTIELh0CcLDTb/Q8HCrIxMuJLR84Y1ytkVBx2PrqO68DOBJExQUhFIqx5rIuLg4IKO2snTp0oCptSxXrtx1ZTPXiJYuXdqme+Zm2rRpBAcH884775CSksKECRNsep+jSfLpRLTWUUCUUqoOMtG8yO7YMdPcCqaZtVMnS8MRTmLwYChZEnr3hqtXoUsXsx68TL0lbFSQTdzOqCCb3X19falWrRq7d+++7tru3bvx9fVNbz6vV69e+vnaaXP5YvqkHjhwIH1Ue1rZefPmkZSUlKXfZ9rn1K1r2zhlDw8Ppk+fjlKKiRMnkpKSwrvvvpun7+gIknwK4SrGjjXJBcCECabpVQiA7t3Bxwe6doVr18zr/PlmeU4hRBYF3eweERHB5MmTOXnyJLfddhtgpmlasmQJnTt3Tk8emzRpQoUKFZg5cyaPPvpo+vsXLVpEfHx8lrk+IyIimDZtGosXL85SdtasWVSsWJEmeejvnZaAenp68t5775GSksL7hTxdnySfQriCw4fh88/NfkSEDCwR1+vcGZYtg8hIuHLFLMU5Z455FUKka9SoUb7et2nTJmJiYgAzR+fx48dZtGgRAPfffz8hISEADB8+nC+++IJOnToxbtw4ihcvzvjx40lMTCQqKir9fp6enkyYMIG+ffsyZMgQevbsyeHDhxk5ciRhYWF06NAhvWzHjh0JCwtj6NChXLhwgWrVqjFv3jzWrFnD7Nmz89xFQCnF1KlTUUoxadIktNZMmjQpX/9d8kOSTyFcwdixkJKSsS9ETsLDYcUK0+SemAi9epma0D59rI5MCJc3ZswYNm3KGJi1cePG9CU7N2zYQKtWrQAzyf3mzZsZPnw4/fv3JykpiXvvvZeNGzdSs2bNLPfs06cPnp6ejB8/npkzZxIcHEy/fv148803r/v8JUuW8OqrrzJ69Gji4uKoWbMm8+bNo0ePHvn6PkopPvnkEzw9PZk8eTIpKSlMmTIlX/fK82fnZx4rUTCyDzjas2cPderUKZDPunDhAhs2bKB169YEylQ9zm3/fjOyXWvTvJq6OkZRJ8+oHdavh4cegsuXTfeM6dMh20TWwn6u9oymzS+Z05Q9omhKTk7m4sWLBAQE5GsAFdj23Ozduzet32ldrfXe3O4pk8w7EVnhSOQoKsoknkrBGJkMQdigTRsz76efn3l2HnsMpk61OiohhAAk+RTCue3fb0Yug2lCzTQiUoibatnSrP0eEGCOhwyBjz+2NiYhhECSTyGc2/jxGbWer71mdTTC1dx3H3z7rZmKCeCpp6QGVAhhOUk+hXBWf/xhRiuDmTInW0d1IWzSuHHWBHTIEPjsM2tjEkK4NUk+hXBWEydCcrLZf+UVa2MRrq1RI9MEnzYoZtCgjKm7hBCikEnyKYQzio7OqJ3q2BEaNrQ2HuH6GjeGNWvA39905Rg4EObOtToqIYQbkuTTiSilopRSGllaU0yebCYKB3j1VWtjEUXHvfdmjIJPSYG+feHLL62OSgjhZiT5dCIy1ZIA4OJF+OQTs9+8OTRrZm08omhp3hy+/hp8fU0C2qsXLFlidVRCCDciyacQzmb6dDh/3uyPGGFtLKJouv9++Oorsx58crJZgnP5cqujEkK4CUk+hXAmSUmmyR2gRg148EFr4xFFV5s2JuEsXtw8d926mSZ5IYQoYJJ8CuFMFi+G48fN/vPPg4f8ExUFqF07WLoUihUza8BHRkLqWtVCCFFQ5DebEM5Ca3jvPbNfujT062dtPMI9dOxoVtHy9ITERLMm/PbtVkclhM2UUjZtG+34w+rkyZNERERQpUoV/Pz8KFmyJA0bNuTDDz8kKSnpuvJHjx4lMjKSUqVK4e/vT1hYGD///HOO954/fz6hoaH4+PhQsWJFhg0bRnx8/HXl4uPjGTZsGBUrVsTHx4fQ0FDmz59vU/xjx45FKcU///yT5fyRI0eoUqUK5cqVY9euXTbdyxG8Cu2ThBA3t3Ur7Nxp9p96CkqUsDYe4T46d4YvvoDevSE+Hjp0MDWgDRpYHZkQudq6dWuW49dff50NGzawfv36LOdr27E88aVLlwgMDGTUqFHcfvvtXL16lVWrVvHss8+ya9cuPv300/SyMTExtGjRgqCgID777DN8fHx4++23adWqFTt37uTOO+9MLztnzhz69OnDoEGDmDRpEocOHeLFF19k3759rF27NksMkZGR7Ny5k/Hjx1OjRg3mzp1Lz549SUlJoVevXnn+Trt376Z9+/Z4e3uzZcsWqlevnu//PnmmtZbNyTagDqD37NmjC8r58+f1smXL9Pnz5wvsM0Qe9eihNWjt7a11dLTV0VhOnlELTJtmnkHQOiRE6/37rY7IqbnaM3rkyBF95MgRq8MocP3799d+fn6F8lndu3fXXl5eOjExMf3ciBEjtLe3tz527Fj6ufPnz+syZcro7t27p59LSkrSFSpU0O3atctyzzlz5mhAr1q1Kv3c119/rQE9d+7cLGXDwsJ0xYoVdVJSUo7xJSUl6bNnz+pRo0ZpQMfExGittd66dasOCgrSNWvW1CdPnrzpd7TludmzZ48GNFBH25DnSLO7EM4gOhoWLTL73bpB+fLWxiPc06BBMGmS2Y+JgbZtzTKvQogchYSE4OHhgaenZ/q5pUuX0qZNG+644470c4GBgURGRrJy5cr0Zvpt27YRHR3NwIEDs9yzW7du+Pv7s3Tp0iz39Pf3p1u3blnKDhw4kFOnTrE9D11l1q1bR9u2balatSqbN2/m1ltvzdN3dgRpdhfCGXzyiRlxDPDss9bGItzbsGFmrtnRo+Gvv0wCunkzVKxodWSioAwbBoXY3y9XoaEZs34UgJz6aObE09MTpVSWc1prkpOTuXjxImvXrmXmzJn8+9//xsvLpFMJCQkcOXKEiIiI6+5Xv359EhISOHr0KDVq1GDPnj3p5zPz9vamZs2a6dcB9uzZQ61atdI/J/M9067fd999uX6nxYsX869//Yv77ruPFStWEBAQYMN/CceT5NOJKKWigDFWxyEK2dWrGZPK3303NGlibTxCvPaa6fs5YQIcPWoS0E2bICTE6shEQdi1y/z/dRPe3t42lZsxYwYDBgzIcu6dd97h5ZdfBsxAp1deeYU33ngj/frZs2fRWhMcHHzd/dLOxcbGZnm9Udljx46lH8fGxlKlSpVc75mbJ598kipVqrB69Wp8fHxsek9BkOTTiWito4AopVQdZIlN97FkCZw+bfaffRay/aUtRKFTCsaPNwnoRx/B/v3Qvj1s2AAlS1odnXC00FCrI8iqgOPZmTawMxeVK1e+7tyAAQNo27YtcXFxrF+/nokTJ3L+/Hn+85//ZCmXvcb0ZtduVNbWcrldy6xz586sWLGCqKgoxo8fb9N7CoIkn0JY7aOPzGuZMmalGSGcgVLwn0X/7eEAACAASURBVP+YBPTzz+GXX8yo+DVrzNKcougowCZuZxRqY3KbuR9nmvLly1M+tU9+u3btCAoK4qWXXuKxxx6jYcOGBAUFoZTKsSYyLi4OyKitLF26NGBqLcuVK3dd2cw1oqVLl7bpnrmZNm0awcHBvPPOO6SkpDBhwgSb3udoMuBICCvt22f60wEMHGiWOxTCWXh4mOVeu3Qxx999Bz16ZPRPFsIFeXt727TNmjUr13s1btwYgEOHDgHg6+tLtWrV2L1793Vld+/eja+vb3rzeb169dLPZ5aUlMSBAweoW7du+rl69eqxf//+6/qrpr03c9mb8fDwYPr06QwcOJCJEycyfPhwm97naFLzKYSVpk3L2B882Lo4hLgRLy+YN8/M/blpE6xYYZ7Vzz6TLiLCJdnT7J7dhg0bAKhWrVr6uYiICCZPnszJkye57bbbALh48SJLliyhc+fO6YOGmjRpQoUKFZg5cyaPZmr1WrRoEfHx8URGRma557Rp01i8eHGWsrNmzaJixYo0ycNYgbQE1NPTk/fee4+UlBTef/99m9/vCJJ8CmGVxERI+8u6TRsozAl+hcgLHx+TdLZuDT//DDNnmm4iEydaHZkQedaoUaM8v2fMmDH8/ffftGzZkltuuYVz586xZs0apk2bRrdu3bj77rvTyw4fPpwvvviCTp06MW7cOIoXL8748eNJTEwkKioqvZynpycTJkygb9++DBkyhJ49e3L48GFGjhxJWFgYHTp0SC/bsWNHwsLCGDp0KBcuXKBatWrMmzePNWvWMHv27By7CNyMUoqpU6eilGLSpElorZmUNs1aIZDkUwirLFoEZ8+a/SFDrI1FiNwEBsLq1dC8ORw+DO++a0a/jxxpdWRCFLhGjRrxwQcfsGzZMmJjY/Hx8aF27dpMmjSJoUOHZikbEhLC5s2bGT58OP379ycpKYl7772XjRs3UrNmzSxl+/Tpg6enJ+PHj2fmzJkEBwfTr18/3nzzzetiWLJkCa+++iqjR48mLi6OmjVrMm/ePHr06JGv76SU4pNPPsHT05PJkyeTkpLClClT8nWvPH+2NivqCCeSNtp9z5491KlTp0A+48KFC2zYsIHWrVsTGBhYIJ8hctGypenvGRICf/4JxYpZHZFTkWfUSR07Bs2awalT5vjTT+Hxxy0NySqu9owePXoUIMcpe0TRlDYnaUBAQJ5rR9PY8tzs3bs3rd9pXa313tzuKQOOhLDCgQMZA40GDJDEU7iOSpVg7VoICjLHTzwBmVZiEUKI3EjyKYQVZszI2B80yLo4hMiPOnVg1SooUQJSUswI+NSBF0IIkRtJPh1IKbVRKZWolIpP3dZbHZNwQklJZt5EMP3natSwNh4h8qNpU7NAgre3WaWrc2f46SeroxJCuABJPh1vkNbaP3VrY3UwwgmtXZuxolG2pduEcCnt25s/pJQyk9F36AAHD1odlbgJGech8qognhlJPoUobGlN7iVKQPfu1sYihL169IAPPzT7//wD7drBX39ZG5PIkVKKlJQUq8MQLiYlJcXm5Ttt5bbJp1IqQCk1QSm1VikVo5TSSqmoG5T1V0pNVkqdSm1W36WUutHcBpNS77deKXVXwX0D4ZJiY818iQBdu0JAgLXxCOEITz0FY8ea/RMnIDwczp+3NiZxHW9vb5KSkq5bJUeIG0l7Xry9vR16X7dNPoHSwBNAcWBZLmWXAP2BsUBHYCcwTynVK1u5kUBl4HbgK2C1UqqUI4MWLm7ePNM/DsxymkIUFaNGmSQU4LffzJKcV65YG5PIIm06qDNnzkjzu8iV1pozZ84AOHwqMXeeZP44EKS11kqpMkCOQ46VUuFAGNBLaz0v9fQGpdQdwESl1AKtdTKA1npHpre+r5R6DLgPWFVg30K4lrQVjSpXNvN8ClFUKAUffADR0WbqpY0boX9/mDvXrBEvLBcQEECJEiU4f/488fHxeHp6Orw5VTgXrTXXrl0jNjY2T/+vtdYkJyeTnJxMiRIlCHBwK53bJp/a9j/7IoB4YGG28zOAuUAT4IcbvDfXzjVKqbJASLbTVQHi4+O5cOGCjWHmzaVLl7K8ioLncfgw/j/+CMCV7t25Eh9vcUTOTZ5RF/Xxx5SIjsZr2zZYsIArZcpw5a23rI6qQLjiMxoYGIiHhwcJCQnS/O4GkpKSiIuLIzg4OH1NeVsppfD398ff35+LFy/etGx8Hn+fuW3ymQd1gf1a6+z/Sn/LdP2H1Ob1e4DvAA08CZQHtuZy/6eAMTld2LFjB6fTRkUXkB07duReSDhEzblzuTN1f/Ptt3NJ5kW0iTyjrsf76adp8eefBPz5J8X/+18OX77MkYcftjqsAiPPqHB2cXFxBXr/EydO5Km8JJ+5Kw0czeF8XKbrAN7A20BN4CrwKxCutT6by/0/4vpa1arA8saNG1OrVq18BZ2bS5cusWPHDho3boyfn1+BfIbIRGv8hw0DIPmuu2jcp4/FATk/eUZdXMOGpISF4REdTd0ZM6jSvDlJXbtaHZVDyTMqnF1hPaP79+/PU3lJPm1zsyZ6DaC1jgEa5fnGWp8BzgCkjrZPrwX19/cv8PWC/fz8XGJNYpe3datZExvw7NdP/pvngTyjLqpOHVizBlq0gAsXKPHkk3DHHfDAA1ZH5nDyjApnV9DPqL+/f57KSy/w3MWSUbuZWXDqq8PqsrXWUVprhWnKF0XJ7Nnm1dPTzIsohDuoXx+WLTOrIF27BhER8OuvVkclhLCYJJ+52w3UUkplryWul/q6p5DjEa7m2jVYsMDst20L5cpZG48Qhal164zlZC9ehI4d01sBhBDuSZLP3C0F/IFHsp3vD5wCtjvqg5RSUUopjSS0RcvatWZyeQDp6yncUY8e8P77Zj862izDmfZvQgjhdtw6+VRKdVRKdQUeSj1VWynVNXUrAaC1Xg2sAz5WSg1WSrVWSk0FOgAj0+b4dARpdi+i0mo9fXygCI/4FeKmnn8eXnjB7B88CA89BJcvWxuTEMIS7j7g6GPgjkzH3VI3MCsVHUvdjwTeBMZh+noeAHpqrecXTpjCZSUmmj5vAJ06yXKawr1NnAinTsH8+WYQXt++8OWXpi+0EMJtuHXNp9a6ktZa3WA7lqlcvNb6Oa11Ba11ca11g4JIPKXZvQj65hvTzw3g0UetjUUIq3l4wMyZph8owJIlMHKkpSEJIQqfWyefzkaa3YugtCb3EiUgPNzaWIRwBsWLm6Szdm1z/P778OGH1sYkhChUknwKUVASEmDFCrP/0EMgk1ALYZQqBV9/nTHzw3PPwcqV1sYkhCg0knwKUVBWrYK0NZ+lyV2IrCpVgq++Mq0CKSlmRPyPP1odlRCiEEjy6USkz2cRk9bk7u9vppYRQmTVqBHMm2f6gl6+DA8+CMePWx2VEKKAOTT5VErdppTqoJTKaUUgkQvp81mEJCSYZkWAzp3B19faeIRwVp07w5QpZv/vv03f6HPnrI1JCFGg8p18KqXeUEpNynTcFjgEfA0cUkrVcUB8Qrimb77JmMOwa1drYxHC2T3zjJkHFGDfPnjkEbh61dqYhBAFxp6az0eAfZmO3wB+AyKA48BrdtxbCNe2ZIl59fWF9u2tjUUIVzBxoln7HWD9ehg8GLS2NiYhRIGwJ/m8BfgdILWZ/R5gtNZ6BTAeaG5/eO5F+nwWEVevZozc7djRDKgQQtycpyfMng1Nmpjjzz+HceOsjUkIUSDsST5Vpvc3A5KB71KPo4EydtzbLUmfzyJi48aMPmuPPGJpKEK4lBIlzPRklSub46gomDXL0pCEEI5nT/J5BHgwdb8HsENrnZB6XAE4a09gQristCZ3b2+zpKYQwnZly5ppyoKCzPGgQaYZXghRZNiTfH4CPKeUigUeBaZlutaMrP1BhXAPyckZa7m3bQslS1objxCuqGZN8++oWDFISoLISNi71+qohBAOku/kU2v9MdALmAP011pnbhvxBWbaF5oQLmjrVjNdDJhfmEKI/GnZEmbMMPvnz5spmE6ftjYmIYRDeNnzZq31fGB+DuefsOe+QristFpPDw8zf6EQIv969YJjx+DVV+HECTMJ/aZNslStEC5OVjhyIjLa3cVpDcuXm/177zV914QQ9nn5ZXj8cbP/00/Qt69ZjlMI4bLsmWT+D6XU0ZttjgzUHchodxd38CD8/rvZl1pPIRxDKfj4Y9OHGmDpUnjlFWtjEkLYxZ5m901A9hmAywD3AReAjXbcWwjXs2JFxr4kn0I4jrc3LFxoWhQOHIB33oE774SBA62OTAiRD/lOPrXWA3I6nzrh/DrMMptCuI+0ieWrVze/GIUQjlOqFHz1lZmEPjYWnnjCzAfaqpXVkQkh8sjhfT611rHARGCMo+8thNOKiYEffjD7nTubpkIhhGNVrXr9FEyHDlkdlRAijwpqwNE/QJUCurcQzmfVqoxBENLkLkTBad4cpk83+2fPmhHwcXHWxiSEyBOHJ59KKW9gMPCHo+8thNNK6+8ZHAz33WdtLEIUdX36wGuvmf3Dh80ytlevWhuTEMJm+e7zqZTKab2z4kANIBjon997uyulVBTSXcH1XLkC33xj9sPDwcuu6XOFELYYO9Y0uX/5JWzcCEOHwqefSpcXIVyAPTWfHoDKtl0AFgEttNaz7Q/PvchUSy5q82a4dMnsP/igtbEI4S48PGDmTGjc2Bx/9hlMnGhpSEII29gz2r2VA+MQwnWtWmVePT2hXTtrYxHCnfj6moUdmjQxKyC99JKZbSIiwurIhBA3URB9Pn0cfU8hnFpa8nnffRAUZG0sQrib8uXNNGf+/maVsd69zUpIQginZc8KR48qpZ7KdFxNKbUPuKSU2qyUkt/Coug7csSsbASmv6cQovDVrw8LFpim+IQEeOgh+PNPq6MSQtyAPTWfwwG/TMcTgSBgClATkPXPRNG3enXGviSfQlgnPBwmTTL70dEmAY2PtzYmIUSO7Ek+qwB7IL2pvT3wotb6BeA1oIv94Qnh5NKa3G+5BerVszYWIdzds8/CU6kNcrt2mSmZkpOtjUkIcR17ks8SQOoQX5pgpllKqwbaB9xix72FcH6XL8OGDWY/PFymeBHCakrBlCnQvr05Xr7cDEISQjgVe5LPaCA0db8DcFBrHZN6HARcticwIZzexo2QmGj2pcldCOfg5WX6f9aubY7ffddMySSEcBr2JJ9LgDeVUouB54AFma7VB47YE5gQTi+tv6e3NzzwgLWxCCEylCwJX30FZcqY4yeegO+/tzYmIUQ6e5LPUcAcoDowF5iQ6dqDwLd23NstKaWilFKa1L60wsmtXWtemzWDgABrYxFCZFW5MixebP44vHbNzP15/LjVUQkhsCP51FonaK2f1FrX11oP0lonZLrWVGv9qmNCdB+ywpELOXbMLO0HGf3LhBDOpWVL+Phjsx8TA507ywh4IZyAPfN8PqOUKuXIYIRwGWm1niCrGgnhzB5/HIYNM/u//WZGwKekWBuTEG7Onmb3D4BopdQCpVR7pWSor3Aj33xjXsuUgdDQm5cVQlhr4kTo0MHsL18Oo0ZZG48Qbs6e5LMWJgFtBqwCTiql3lRKVXdIZEI4q6Qk+L//M/thYWZVFSGE8/LygvnzoWZNc/zWWzBnjrUxCeHG7OnzeVBr/SJwO/AQ8APwAnAgdXnNgQ6KUQjnsnMnnD9v9qW/pxCuoWRJWLECglJXfn78cdi+3dqYhHBTdlfZaK1TtNartNbdgQrAs8AdwDR77y2EU0prcgdT8ymEcA3Vq8OiReDpCVeuQJcusga8EBZwWHuhUioQ6A70BW4FEu28n4dSqp8jYhPCodIGG9WtCxUrWhuLECJv2rSB//zH7J8+DQ8/DJcu3fw9QgiHsjv5VEo9oJSajVnx6H+pp4dgakHt4Q3MsPMeQjjWuXMZTXUyyl04oaSUJBKTEknRMqL7hoYOzVgD/uefYcAAGQEvRCHyyu8blVJjgf7AbcDfwIfADK31gTzcY/RNLnvnNzYhCsymTRm/pKTJXRSyFJ3C4djD/BT9Ewf+OcDhuMMcP3ecM5fOEHM5hvir8VmSTi8PLwKLB1KmRBnK+pXljpJ3UCWoCtWDq1O/XH1qhdSimGcxC7+RhSZPhgMHYP160xT/+uswZozVUQnhFvKdfAIvAV8BzwCrtdbJ+bjHa8BS4EIO1zztiM1SSql7ge+B0VrrN6yORzhQ2ih3b29o0cLaWESRp7Vmb8xe1h5Zy7qj6/jh5A9cuJLTj8ucJaUkEZcQR1xCHIdiD7GFLVmue3l4EVo+lGa3NaPF7S1oW6UtJX1KOvprOCdvb1i4EJo0gd9/h6gosx58t25WRyZEkWdP8nmL1vofOz9/D/C51vrr7BeUUj7AADvvX+iUUh7AJGCn1bGIApCWfDZtCn5+1sYiiqx9MfuYu3suX+79ksNxh3Mso1DcVvI2qgRVobx/eUJKhBBYPJDinsXx8vDiavJVriRf4VziOf65/A+n409z7Nwx/rzwJxoNmOT0x1M/8uOpH5myfQpeHl60uL0Fnap34sEaD1KjdA2K9BTOwcGwcqX593z+PPTvD1WqwN13Wx2ZEEVavpNPBySeANNvEsM1YKwDPqOwPQFsB9yk+sCNREfDvn1m/4EHrI1FFDlXk6+ycO9C/vfT/9hyYst1128veTsPVH6AJrc0oVHFRtQpWwcfL588f86VpCscij3Er3//yi/Rv7D1z638FP0TV5OvkpSSxIZjG9hwbAPD1w2nenB1etfrTf/Q/lQqVckB39IJ1axp5gDt1AkSEswApJ07oYK9wxaEEDeSp+RTKfUZ8LrW+o/U/ZvRWuvHcynw35tcS6YAk0+lVAAwCggFGgJlgLFa66gcyvoDb2BG8wcDB4DxWuv52coFA8OAezG1n6Io2bAhY1+ST+Egl65e4tOfP+Xdre/y54Ws0/40vqUx3Wp3o/OdnakeXN0htZDFvYpTr1w96pWrR5/6fQBITErku+Pf8dWhr/jq0Ff8ce4PAA7HHSZqUxRRm6JoU7kNA0MHElkrkhLeJeyOw6l06ADvvQfPPw9//WWmYNq4EXx9rY5MiCIprzWfrYEpqfttILXtJmc3u3ZDSqk3tdav5ue9eVQaU0v5K7AMGHSTskuAezD9XA8BvYB5SikPrfXcTOXeAiZrrc8W6aYqd5XW5O7nB40bWxuLcHnXkq/x6c+fErUpijOXzqSfDykRwmMNH2PQXYOoFlytUGLx8fKhXdV2tKvajikdpnDgnwN8degr5u2Zxy+nfwFg/R/rWf/Hep5e9TSDGg7iuabPcXvJ2wslvkLx3HOwZw9Mnw47dsCgQTB7NsjPciEcLk/Jp9a6cqb9Sg6PxngeKIzk8zgQpLXWSqky3CD5VEqFA2FAL631vNTTG5RSdwATlVILtNbJSqmGQGPg6bwEoZQqC4RkO10VID4+ngsXbB9ckBeXUue1uyTz29lGa/y//RYP4Np995GQmAiJdk1lK3JRlJ/Rb499y0sbX+Lw2Yz+nFVLVeX5e56ne83uFPcqDlBg//5zc0vxWxhSbwhD6g1hd8xu5uydw5cHviQ2IZYLVy7w/rb3+WDHB0TWiOTZu5+lftn6lsTpcOPHU2L/frx++AHmziWxWjWu/vvfNyxelJ9RUTQU1jMaHx+fp/JK63xVUBYYpVSC1rpQ2zpSk88Ycmh2V0pNA3pgEtWkTOd7AnOBZlrrH5RSwzBN82n/B0oCScAirfUNlxpVSkUBOc7v8cEHH3D77UWoZsGFlYiOJmzoUAD2DBjAkS5dLI5IuKKz184y/a/pbDmX0aezbLGy9K7Qm+almuOpnHeSj2sp1/jxwo+s+mcVu+N3Z7nWwL8B3ct3p45/HYuic5xi58/TcsQI/M6Y2ujtL7/M6SZNLI5KCOd24sQJ/vWvfwHU1Vrvza28Myafl7XWhdqhKJfkcyvgqbVunO18Hcxo/SFa66lKqRJAYKYiU4A/MH1Dz93ks29U87l827Zt1KpVK5/f6uYuXbrEjh07aNy4MX4yajtX3jNm4DtsGADx331HSoMGFkdU9BW1Z3TRwUW88H8vcP7KeQACigXwYtMXeaLBE+k1na7i59M/8+HPH7L00NIs84q2rdSWUfeNIrRcqIXR2c9j3z78wsJQ8fFof38uffstKTn8LC5qz6goegrrGd2/fz9NmzYFG5PPvA44OgpEaK1/VUr9QS59PrXWVfNyfydVGjiaw/m4TNfRWl8GLqddVEolAPE3SzxT33cGOJP5XFp/UX9/fwIDA3N6m8P4+fkV+GcUCdu2mdfSpfFv1gw8HLYyrciFqz+j5xPP88zqZ5j92+z0c11rd2VKhylUDHDN5VlbBbaiVY1WHDt3jElbJzH156kkJiXy7bFv+fbYt3Sr3Y3XW7/OnWXutDrU/GnaFL74AiIiUPHx+PfubfqBBgfnWNzVn1FR9BX0M+rv75+n8nn9DbqJjAnhN+WyfZfHezuzPA+s0loPyOsE80qpKKWUxtSoCmehtRn5CnD//ZJ4Cpvt/ns3d0+9Oz3xLO1bmiXdl7Cw20KXTTwzq1SqElM6TuHIv44wtNFQvDxMfcbCfQup/VFthn41lNjLsRZHmU9dusDY1AlXjhyBHj0gKenm7xFC2CRPv0W11gO11n+k7g9IPb7hls+YnG1oYSyptZvZpP0JHJfDtXzRWkdprRVQ11H3FA5w6BCcPm32W7WyNBThOubvmU/T6U05cvYIAO2rtmf30N1E1IqwODLHqxhQkY86fcSBpw/Qp34fFIoUncL/fvofNT6swcc7PyY5JT+L4FnstdfgkUfM/rp1MHKktfEIUUQ4YxXO91YHkM1uoJZSKnsXhXqpr1JLWdRt2pSxL8mnyIXWmjEbxtBzcU8uX7uMQvFG6zdY1XsVFQKK9sTlVYOr8kXEF/z65K+EVQkDIC4hjqdWPUWjaY1ynDzfqXl4wMyZUD91NP+kSTBrlqUhCVEU5Dv5VEq1UUp1y3RcTim1Sil1Win1eerymHmmtW6b35gKyFLAH3gk2/n+wCnMakYOIc3uTiqtyT04GOq4/mheUXCuJl9lwPIBjPtuHABBPkGs6r2KV1u+iodyxr/1C0a9cvX4ps83LOm+JH1lpF2nd9FiRgsGLBtAXILDGowKnr8/LFsGpVMbwIYMge0O+7EvhFuy56fhOKB2puMJQAvgB6ArMMKOexcKpVRHpVRX4KHUU7WVUl1TtxIAWuvVwDrgY6XUYKVUa6XUVKADMDJ1JSaHkGZ3JyT9PYWNLl29xEPzHuLzXz8HoEpQFbYN2kaHah0sjswaSikiakWw76l9RN0flb4U6KxfZ1Hrv7VYtG+RxRHmQeXKsHAheHrClSsQEQGnTlkdlRAuy57fpDWAnwFSm6QjgBe11pHAaKCn/eEVuI+BhUDaUqHdUo8XAmUzlYsEvsAk3GuAJkBPrfWcwgtVWOLwYbOmO0iTu7ihi1cu0nFOR9YeWQuYZTG3Pr6VGqVrWByZ9Xy9fRnTagz7n95PePVwAM5cOkO3hd145MtHOB1/2uIIbdS6NUxJXeAvOhoiI2WhCSHyyZ7kMxBIm0bobsAPWJF6vAOwa3Z0pVQXpdRCpdQOpdRv2bZf7bl3Gq11Ja21usF2LFO5eK31c1rrClrr4lrrBtnXdXcEaXZ3Qpn7e95/v3VxCKd1LvEc7Wa3Y/OJzQCEVQljfb/1lPUrm8s73UulUpX4qudXzI6YTWlf04S9ZP8Sav+3Np//+jnONud0jp56yiy7CbB9Oz7PP29aR4QQeWJP8nkGqJ663xY4rrX+M/U4ALiW3xsrpUZg1lNvmXqf2GybC3UYsp00uzuhtCb3oCCoV++mRYX7ib8aT/iccLb9aeaBfajGQ6zouQK/YjLheE6UUvSu35t9T+/j0TqPAnA28Sz9l/Wn+6Luzt8XVCn48EO47z4Ais2dS5WVKy0OSgjXY0/yuQZ4Syn1HvACsCzTtZrAMTvu/RSmKbyi1rqZ1rp19s2OewthG+nvKW4iMSmRLvO7sPXPrQBE1IxgUfdF6X0bxY2V9SvL/K7zWfboMsr5lQNg0b5F1Pu4Ht8e/dbi6HJRvDgsWQK33gpA3Zkz8Vy/3uKghHAt9vw2fQXYBQwGfsGsa56mF2bgUX6VBuY6cjCPEHl25EjGoALp7ykySUpJoseiHvzfH/8HQIdqHZjfdT7FPItZHJlrebjmw+weupuH73wYgFMXTxH2RRgvfPMCiUlO3J+yXDlYtgzt44NKSaHEwIHw++9WRyWEy8h38qm1/kdr3UFrHai1bqu1ztxe0hp43o64vgcKZlFzJyZ9Pp3M5s0Z+y1aWBeHcCpaa55b/RzLDy4HoOUdLVncfbEknvkU4hfC0keXMu2haZTwLgHApG2TaPJpEw7+c9Di6G7i7rtJ+PBDANS5c/Dww3DxosVBCeEaCqQdUWt9QWt91Y5bDAOeVkp1Vkq5zU906fPpZNKSz4AAaNDA2liE03h/6/t89ONHANQvV5+VPVemJ00if5RSDLprELuG7KLxLY0B+O3v32g0rRHzds+zOLobS+rWjcMRqStW7dsHfftCSoq1QQnhAuxKPpVSlZRSI5VS/1VKfZZtm27HrX8HvsVM8H5ZKXUh23benriFsMmW1NVY7rvPzO8n3N7S/UsZvm44ALcE3MLXvb4msHigxVEVHdVLV2fLwC281OwlwAzo6rWkF09+9aTTNsPv69OHa2FmNSeWL4eoKEvjEcIVZF8y0mZKqU6YEememJHvV7IVsWf+iQnAM5g+pfsBe2pRhci706fNHJ8gTe4CgL1n9tJ3aV8A/Iv583Wvr7k18FaLoyp6vD29ebvt27S4owV9l/YlLiGOT376hO1/bWdht4VUC65mdYhZeXqS8OmneLdrBwcPwuuvm5kxunXL/b1CuCl7aj7fxPTNrKi1rqi17Ok8ewAAIABJREFUrpxtq2LHvQcA72it79Ja99ZaD8y+2XFvpyV9Pp3IlkxrUDdvbl0cwimcTThLlwVduHTtEgrFvEfm0aC8dMUoSOHVw9k1ZBf33novYJbnvHvq3aw86IRTG5UqZWo9A1NrwQcMgF8dMh21EEWSPclndUyCeMZRwWTiiVnS0q1In08nkpZ8entD48bWxiIslaJT6L2kN7/HmdHMY1uN5cEaD1oclXu4reRtbBqwieH3mq4OF65coPP8zozbNI4U7WR9K++8E+bNM3OBXr5sBiDFxFgdlRBOyZ7k8zjg76hAslkLNC2gewuRu7TBRo0aga+vtbEIS72z5R1W/74agC41u/Bqy1ctjsi9eHt6M7HdRBZ3X4x/MfMrZ8zGMUQuiOTClQsWR5dNeDi8/bbZP34cHn0UkpKsjUkIJ2RP8vkWMFwpVRDDPF8H+iilnlNKVVNKBWffCuAzhTAuXoRdu8y+9Pd0a9+f+J5RG0YBUD24OrO6zMJDyWIDVoisFcn2QdvT+3wuP7jcOadjGjkSevY0+xs2wIgR1sYjhBOy56doY6As8LtSao5S6oNs2xQ77v0rZpWk94GDQEwOmxAFY+vWjOlSpL+n24pLiKPn4p4k62SKeRZjQdcFMrLdYrVDarNz8E7Cq4cDcOCfAzT+tDFrfl9jcWSZKAWffgqhoeZ48mT44gtrYxLCyeR7tDtmNHqanjlc18Bz+bz3OOwbLe+SlFJRwBir43B7mSeXb9bMujiEZbTWDF45mJMXTgLwXrv3aFihocVRCYBSPqVY0WMFYzaO4c3Nb3LhygU6ze3ElA5TeKbxM7nfoDCUKAFLl5puO7Gx8MQTULs23H231ZEJ4RTynXxqrQus7UlrHXWja0qpUkCR7ISX+r2jlFJ1kBHv1vn+e/Napw4ESw8PdzT7t9ks2b8EMP08n77naYsjEpl5enjyRps3aFCuAf2W9SMxKZFnVz/LgX8OMLnDZLw87KlXcZBKlWDBAmjfHhITISICfvwRypa1OjIhLOeKnZc6AdutDkIUUUlJsD318ZImd7d08vxJnl39LABl/coy9cGpKKUsjkrkpFudbnz3/+zdeZyN5fvA8c81ixlm7PtORJRE2QkhZIuxRFKiTUWb+pYKLdqLNpWikH3fl0olS4qQLMmafV9mBrPdvz/uOWbyG8bMWZ5zZq736/W85nnOOfPcF44z19zLdd/3M8UiiwHwyW+f0GZCG06f95N9SJo1g3fesef//mtrf8bHOxuTUn7A7eRTRFqKyBsiMkpEyiQ/VktECrtxzyQRSUzrAMYC+pNAecfGjbZMCkC9es7GonzOGEOfOX04fcEmL6PajaJwRKY/ypQP1CpZizV913BTMTvHcsmOJdT7qh67T+12NjCXJ56Au++25z//DE8/7Ww8SvmBTCefIpJLRJYCC4FngfuBQslPPwM850Zcr6RxvA+swe521NWNeyt1eStXppzXr+9cHMoRX/3xFUt32hLD9990P+0rt3c4InU1SuctzfLey+lQuQMAW45tod5X9Vh/aL3DkWEXII0aBTVr2uuPPoKvv3Y0JKWc5u4OR7cAUUBe/tsbuQRontkbJxdbH3rJMdAYUw+YhHuJrVKX50o+CxWCin62jZ/yqoNnD/LMElvMvFSeUnzQ6gOHI1IZEZkjkhndZvB0PduzeCj6ELeOuZWlO/xgv5KcOe0CpELJ/TMPPwy//eZsTEo5yJ3kswvwkjFmJnDukuf2AmXcuPeVTAJaeOneKrtbtcp+rV/f9liobOPxhY9fHG4f2WakllUKQEESxLu3v8vwlsMRhLNxZ7ljwh2M2+AHpY7KlIGpUyE4GC5csAuQDh92OiqlHOFO8lkY+OsyzyXhvRXpYYCfbWvhGbq3u8MOHIDdu+25DrlnK7O2zmL6lukAdL2+q26fGeAG1B3A5M6TyRGcg4SkBHrN6sWbv7yJMQ5X8GvSBN5/357v328XIMXFORqSUk5wJ/ncD1S7zHM3ArvcuHeaRKQQdn7pe56+tz/Qvd0d5ur1BE0+s5GYuJiLq9vzh+fnw1YfOhyR8oQu13dhSc8l5AvPB8Dz3z/P4wsfJzEp0dnAHn8cevWy58uXw1NPORuPUg5wJ/mcAQwSkdSVl42IlAWeBKZm9sYisktEdl5y7AUOAnWAfqke3+HGn0GpFK75niEhtji0yhaGLR/GvjP7AHir+VsUjSzqcETKUxqXa8wvvX+hVJ5SgC3F1GVqF87FXzpTzIdE4LPPUj5jPvkERo92Lh6lHOBOJd6hQDPsCvRN2B2JxgAVsFtivunGvX8iG+5wpBzm6vmsUcMuEFBZ3vbj23l31bsA1CpRiz41+zgckfK064tcz6o+q2j9bWs2HdnEzK0zaTGuBfN6zLvYK+pzOXPCjBk2AT1yBB55xG5qUaeOM/Eo5WPu7HB0VkTqY7fQbAPsAGKBN4DhxphM/2ppjLkvs9+rVKacPw9r19pzHXLPFowxDFg0gLjEOAThkzs+IUgCcd8NlZ5SeUqxvPdyOk7uyI+7f2TFvyto+k1TFvdcTJEIh3YcKl3aLkBq1szO++zUyX4GFSvmTDxK+ZBbn7TGmHPGmDeNMY2MMZWMMfWNMcOMMbGeClApn1i3LmXivyaf2cKC7QtY+M9CAPrU6EOtkrUcjkh5U77wfCy6exGdqnQCYP2h9TQa04h/T//rXFC33grDh9vzAwegc2ddgKSyBXeKzO8UkeqXee4GEdmZ+bCU8rHVq1PO69Z1Lg7lEwlJCTyz1Nb0zBuWl2HNhjkckfKFsJAwJneezH033QfA38f/puGYhmw/vt25oPr1g9697fmKFTBggHOxKOUj7vR8lsOWPUpLOFDWjXsr5Vuu/dyLFbPDYSpLG7V2FFuPbQXgxVtf1C00s5GQoBC+av8V/Wv3B2Dv6b00GtOIjYc3OhOQCHz6KdSuba8/+wy+/NKZWJTyEXcnOF1uUdA1wFk3762U77iSz7p1tbh8FnfmwhkG/zgYgHL5yvFY7cccjkj5WpAEMbzVcF6+9WUADsccpvHXjVm9b3U63+kl4eEwfToUTa608Oij/x2NUSqLyVDyKSL3isgPIvJD8kMjXdepjlXA18Cqy99JKT9y+DDs2WPPdbVplvfWL29xNPYoAG80e4PwkHCHI1JOEBGGNh3Ke7fbstGnzp+i+djmfLfzO2cCKlUKpk2zpd5cC5AOHnQmFqW8LKM9n7mwOxsVxvZ65kt17TpCgcnAQ54LM3vQHY4c4ur1BE0+s7iDZw/ywWq7Z3udknXodn03hyNSTnuq3lOMajcKQYiJj6HNhDbM2TbHmWAaNoSPPrLnBw9CVJTdilOpLCZDyacxZqQxppoxphp2//Yo13Wq4xZjTG9jzF7vhJx16Q5HDnElnyJaXD6Le33565xLsFXg3mr+FqJTLBTQt2ZfJnWeREhQCHGJcURNiWLGlhnOBPPQQ9C3rz1ftQr693cmDqW8KNNzPo0x5Y0xG9wNQETCRaSaiORK47kG7t5fqXS5ks/rr4fcuZ2NRXnN7lO7+WLtFwDcXuF2Gpdr7HBEyp90vb4rs7rNIiw4jISkBLpO7crUvzK9UV/micDHH6dU3fjiC3solYW4XVFZRIqISC0RufXS4yq+tx7wL/AjcFRE/nfJSxa6G59SV5SYCGvW2HMdcs/Shv40lPikeABea/qaw9Eof9SmUhtm3zWb8JBwEk0i3ad3Z+KfE30fSFiYXYDkKjj/+OP/nR6kVIBzp85ncRH5Drvf+mpgWarjx+Sv6XkPeNoYUxCoCdwpIqNFLm4zomNiyru2boWzyYUZNPnMsrYe28rYDWMB6HhdRy0ory6rZcWWzO0+l5whOUk0ifSc2ZPxG8f7PpASJf67ACkqyi6OVCoLcKfn82OgBvAc0Bq4LdXRNPlreqoaY8YCGGO2AU2AIsA0EcnhRmxKXZ3UvQlaXD7LevXnV0kySQjCK01fcToc5eeaX9OcBXcvIFdoLpJMEr1m9uLr9V/7PpAGDVJ2QNq/H7p2hfh438ehlIe5k3w2Bp4xxrxrjFlijPnp0uMq7nFaREq6Lowx54E7gfPAIjfjUyp9ruQzMhKqVnU2FuUV249vZ9KmSYCd13dDEV3Pp9LXpFwTFt29iIjQCAyG+2ffz5frHCj+3q8f3HuvPf/5Zxg40PcxKOVh7iR3Bjtf0x3fAb3/c1NjEoC7gR1ATjfvr9SVuZLPW26B4GBnY1FeMeyXYSSZJAAGNRrkcDQqkDQq24jFPReTO0duDIYH5j7A579/7tsgRGDkSKhZ016PGAHjHZgGoJQHuZN8TgXautn+I8D7lz5orAewW3gq5R3nzsGm5JKqrq3tVJay8+ROxm0YB9i5ntWKVnM4IhVoGpRpwJJ7lpAnLA8AD89/2PcJaM6cMGMGFCxorx98ENav920MSnmQO8nnFKCNiHwoIi1EpOalR3o3MMbEGWNiUz8mIq+nel5rhSrvWb/ernYHre+ZRb35y5skGvtv/OKtLzocjQpUdUvV5fte35MvPB9gE9DRf4z2bRBly8KkSRAUZH9x7tQJTpzwbQxKeYg7yecPQAXgMez8zN9SHb8nf82MJ92ISamr91uqt2gtXf2c1Rw4e+DiIpG2ldpSs3i6vw8rdVm3lLiFJT1TekD7zunLpM2TfBtE8+bw5pv2fNcu6N495RdopQKIO8ln71TH/ZccrscyI2DLK4nIVBE5LCJnRGSjiLg7LUF5kyv5LFjQ9iqoLGXE6hEX63q+0PAFh6NRWUGtkrVYdPciInNEYjA8suQRfj75s2+DeOYZ6NLFni9ZAi+/7Nv2lfKAkMx+ozHmG08GkvrWXrqvLwwBthtj4kSkNrBURK4xxhx3OC6Vlt9/t19r1bKT+lWWcebCGT5b+xkADcs0pF7peg5HpLKKeqXrsfDuhbQc35LY+FiG7xlO9b+r0+uWXr4JQARGj4a//oLNm2HYMDttqGNH37SvlAdoKSMPMsb8ZYyJS75MAsKAklf4FuWUM2dg2zZ7rkPuWc4Xa7/gzIUzADxb/1mHo1FZTcMyDZnfYz45Q3KSRBJ9FvZh9tbZvgsgMhJmzoQ8dgoAvXrBli2+a18pN2Uo+RSRl0WkRKrzKx0veSdkzxCR3CLytogsEZGjImJEZMhlXhspIsNF5ICInBeR9SJy12Ve+62InMfOef0O+NN7fwqVaWvXgknuZNfFRllKXGIcw1fbwtxVClWhTaU2DkeksqIm5Zowsf1EQiWUhKQEukztwvy/5/sugEqV4Ntv7Xl0tO35PHPGd+0r5YaM9nwOAUqlOk/vyAxfjX8WBB7E9k7OSue1M4B7gaHY3Zx+AyaKSI9LX2iMuRuIBFoC3xtjAnkaQdblGnIH7fnMYib+OZH9Z/cDMLD+QIJEB3iUdzQt25Tnyz9PjuAcxCfF02lKJxb/s9h3AbRtC4MH2/Nt22wx+qQk37WvVCZlaM6nMSYorXMPW+Gl+15qD5DfGGNEpBDQN60XicgdQAughzFmYvLDy0SkLPCOiEw2xvxnuWFyofwlItJfRLYZYxZcLggRKQIUvuThCgDR0dGc8dJvsjExMf/5mt3kXLmSUCCpRAmiIyK0x8APZeY9aozhvZXvAVAsohhty7b12v8hpWJiYqiZpyajmo+i79K+xCXGceekO5nRaQYNSjXwTRBPPEHO1asJXbwYZs3i/ODBxOkuSCqZr37WR0dHZ+j1mV5w5C3GmOY+audqeyQ7AtHYovqpjQEmAHWAlZf53mCgYjr37wcMTuuJNWvWcOjQoasMM3PWrFnj1fv7q+bJyefhUqVYs2yZ0+GoK8jIe/Sv6L/486id6XJb7ttYufxy/zWV8py8h/PydJmneXv325xPPE/U9CherfgqFXOl9/HvGSH33EPjDRuIPHSIsNdf54+gII7U1NJiKoW3f9bv3Zuxsux+l3z6oRuALcm9maltTPX8ShEpBjTA1jy9AHQCmgLPp3P/T/n/iW0FYHbt2rWpUqWKO7FfVkxMDGvWrKF27dpERER4pQ1/JcePE3HkCAD5b7+dpk2bOhyRSktm3qNfzf0KgLDgMF7t8CqFchXyZogqm0v9Hm0a0ZRrtlzDg4se5FzSOV7f+zoLuyykSiHvfIb/PxUqYJo1Q2Jjqfvhh0T/+COmfHnftK38lq9+1m/J4II3TT7TVxDYmcbjJ1I97/IE4Nr2YjvQ3RhzxT3QjDFHgCMAyQueLvaCRkZGkse1mtFLIiIivN6G31mZ0hsW3rAh4dntzx9grvY9uvvUbubvsAs+elTrwTXFrvF2aEoBKe/RB+o8QEJQAv0W9OPk+ZN0nNmR5b2XU6FABe8HUbcujBkD3bohp06Ru1cv+1mXzToXVNq8/bM+MjIyQ6/325n4InJnctH2NckF21MfG3wczpWG6A2AMeaQMaaRMSZv8nGLMWZmhhoxZogxRrC9qcpb1q5NOdeV7lnGJ2s+IcnYxRb96/R3OBqVXT1S6xHebGZ3IToYfZDm45qz78w+3zTetastQg+wcaPdA17XvCo/5JfJp4gMxK4wvxWIB45fcvhyQ9vj/Ld306VA8lfdXDfQrFtnv5Yta3c3UgEvNj6WL//4EoBby97KTcVucjgilZ091/C5i7tq7T61mxbjWnA05qhvGn/jDbjtNns+YQKMGOGbdpXKAL9MPrGLcEYDJYwxDYwxTS89fBjLn0AVEbl0ikK15K+bPNWQiAwREePJe6o0uJJPnZCfZUzaNIlT508B0L+29noq571222s8VusxALYe20rL8S0vvke9KiQEJk2CMmXs9TPPwI8/er9dpTLAI8mniFQWkQYi4qnJJQWBCZeWMHLITGzdzqhLHr8XOAD86qmGdNjdB06cgN277fnNNzsaivKckb+PBKBE7hJ0uK6Dw9EoBSLCiNYj6FXdbrv5x6E/aDuhLTFxPihvV7gwTJ8OYWGQmGiH4/f5aOhfqavgVvIpIr1EZB+wGfgZqJz8+BQRecCNW68AvL5EUERai0hnoF3yQ1VFpHPykQvAGLMQWAqMFJEHRKSpiHwBtAKe9ZMEWV0tV68naM9nFvH7gd/5/YDdNOCBmg8QEqTrKJV/CJIgvmr/FR2vs/uur/h3BZ2mdOJCwgXvN37LLTDS/lLG0aMQFQUXfNCuUlch08mniHQBvgbWAY/x352J1gFd3YjrCeBREWkvIjncuE96RmLLHLlWqHdJvp4KFEn1uk7AOOAVbCmlOtiV7N96MTblDZp8Zjmf/f4ZAMESTN+aae4VoZRjQoJCmBg1kdsr3A7Akh1L6D69OwlJl1bv84LeveGRR+z5mjXw2GPeb1Opq+BOz+fzwBhjTHvgi0ue2wJUdePe/2D3RZ8JxIrImUuO027c+yJjTDljjFzm2J3qddHGmAHGmOLGmDBjTHVjzCRPxJCazvn0AVfyWaIEFC3qbCzKbafOn2LiJrvxWLvK7SiVp1Q636GU74WFhDGj6wwalLa7Hs3cOpM+c/pcrM7gVcOHQ7169vzLL2HUKO+3qVQ63Ek+qwCXS8BOkPYK8av1NrY3dQMwGZh+yTHDjXv7LZ3z6QOu5FPne2YJ4zaMIzY+FoCHb37Y4WiUuryIHBHM6zGPGsVqADB2w1gGLhnI1W+2l0k5csC0aVCsmL1+7DFYvdq7bSqVDncmR8UCeS/zXEngpBv3vg94yxiT3u5ASl2906dh+3Z7rkPuAc8Yw6h1thenfL7ytKjQwuGIlLqyfOH5WNxzMQ3HNOTv43/z/ur3KRpZlGcbPOvdhkuUgKlToWlTiIuDzp3tL+JFiqT/vUp5gTs9nyuAx0RE0njuPuBHN+4djF3kk63osLuXrU+12ZQmnwFv7cG1/HnE7uPet2ZfgsRfK8cplaJwRGGW9FxCidwlAHjuu+f4ev3X3m+4YUP44AN7vn8/dOsGCT6Yd6pUGtz5tH4FqAusAfpjd/rpJCJzscXhX3fj3kuS752t6LC7l+lioyzlq3V2H/cgCeLe6vc6HI1SV69svrIs7rmYfOH5AOg7py9zt831fsOPPgo9e9rzH3+EF17wfptKpSHTyacx5negNbYG5nvY1e4vAJWAO4wx7vTevQr0FJEBIlJRRApcerhxb5VduZLPwoWhZElnY1FuiY2PZcKmCQC0qtiKknn031MFlhuK3MDc7nMJDwkn0STSdVpXVuxd4d1GReDzz+HGG+31O+/YeqBK+Zhb41TGmGXGmCrAtUBD4DpjTGVjzI9uxrUBuA54H9gGHE3jUCpjUi82SnO2iAoUM7bM4MyFMwDcf9P9DkejVOY0LNOQKZ2nECzBnE84T9uJbdl0xMuzrnLlsgln3uQlG/fdB1u2eLdNpS7hkWrMxpgdwA4AEQk3xpx385avYIfxlfKM2FjYutWe16jhbCzKbaP/sKV5C+cqTLvK7dJ5tVL+q13ldnzZ/kt6z+7NqfOnaDm+JSvvX0nZfGW912jFijB+PLRrB9HR0KmTrQOaO7f32lQqlUwnnyLSDShojPk0+boiMAeoLCIrgfbGmEyteDfGDMlsXIFMRIYAg52OI0vatAmSkmvqafIZ0Had3MWy3csAuOfGe8gR7M19KJTyvvtuuo8jMUd47rvnOHD2AC3Ht+SX+3+hUK5C3mu0bVt46SV49VX7i/n998OUKToqpHzCnWH3Z4DUe7m/A+QHRmCHzHUmcwbpgiMvSr3S/aabnItDuW3cxnEXz3vX6O1gJEp5zsD6A3mq7lMAbDu+jTu+vYPouGjvNjp4MLRsac+nTYP33vNue0olcyf5vIbkkkAiEg60BJ4zxjwFvAjc6X54SnmIK/mMiIAKFZyNRWWaMeZi8lmjWA1uKKK/p6msQUR45/Z36HmjXY3+24HfiJoSRVxinPcaDQ6GCROgXDl7/dxzsGyZ99pTKpk7yWcuICb5vA4QBixMvt6MLTSvlH9wJZ/Vq0OQ1oMMVKv3reafE/8AdshdqawkSIIY3X40rSu2Buw+8L1n9/buNpwFCtgFSOHhdmpSt26wb5/32lMK95LPg4Br/LIVsM0Y41qFnh+7A5JSzktMhI0b7bkOuQc0V69nkATRvVp3h6NRyvNCg0OZ2mUqdUvZUtcT/pzAs0u9vANSzZowcqQ9P3oUunSBCxe826bK1txJPmcAr4vIdGAAdg92lxtJXv2urp7ucOQlO3ZATHInvSafAetCwgUm/2U/ZlpWaEmxyGIOR6SUd0TkiGBe93lcV+g6AN5b9R4jVo/wbqP33QcPPWTPV6+Gp57ybnsqW3Mn+XwJ+BZb43MC8Haq59oC32XkZiLyu4i8LSJ3iEi2rPegC468RBcbZQkLti/gxLkTgA65q6yvYK6CLLx74cVfsp5c/CTTN3u5IPyIEVC7tj3/9FMYO9a77alsy50djs4ZYx42xtxojOlrjDmX6rm6xphBGbxlfuwK+rnAcRFZLSJviMjtIpIrs3EqdTH5DAqCGzSvD1Tj/xwPQO4cuelwXQeHo1HK+8rlK8eCHguIzBGJwXD3jLv5Ze8v3mswLMyuei+UXOLpoYf++8u7Uh7iNysvjDEVgNLAvcA4oDDwHHYR00kR+UVEXhWR25JX1yt1dVwfntddBzlzOhuLypTT508z/+/5AHSq0olcofr7qMoeahSvwfSu0wkJCuFC4gXaT2zPlqNe3JGodGmYNMn+sn7+vC1AfzJTJbuVuqxMJ58iMjqd46uM3tMYs98YM94Y0yc5GS0D9MYO65cABgFLgROZjVtlQ67kU4fcA9bsbbO5kGgXQHS/QRcaqezl9gq382W7LwE4ef4krb9tzcGzB73XYLNmMGyYPd+1C3r2TNmkQykPcKfn8zag6SVHZ+A+bI3Ppu4GZ4zZZ4wZC/RPPlwTXsLcvbfKJg4fhoPJH9KafAasiZsmAlAoVyGaXdPM4WiU8r17b7qXV5u+CsCe03toM6ENZy+c9V6Dzz4LHTva8wUL7E5ISnmIO3M+yxljyl9y5AGaA0eATE/KEpEIEWklIm+JyBpsT+dMoDwwHOiY2XurbGbDhpRzTT4D0vFzx1m6YykAXap2ISQo07sCKxXQBjUaxIM1HwTgj0N/0HlqZ+IT473TmAh8/TVUqmSvhw61SahSHuDxOZ/GmB+Aj7HbbF41EWkhIsNEZBVwCrtPfGNgGTaRLWiMucUY87QxZo6n4/YHWmrJC1JPlq9e3bk4VKbN3j6bRJMIwF033OVwNEo5R0T4pM0ntLm2DWCL0D8w9wGMMd5pME8emDnT7gxnDNx9N+zc6Z22VLbirQVHm4HaGfyexcBjwGqgDZA/edX8c8aYBcaYM54O0t9oqSUv+PNP+7VoUShSxNlYVKbM2DYDgBK5S9CwTEOHo1HKWSFBIUzuPJlaJWoB8M2Gbxj842DvNVi1Kowebc9PnYKoKIjVPWSUe7yVfDYGjmXwe/4EIoBHsDVE/ycizbXMknKLK/msVs3ZOFSmnIg/wS/7bGmZbtd3I0j8pkCHUo6JyBHBvB7zuCb/NQC8+vOrfLH2C+812LVrStH59evhkUdsT6hSmZTpyVMi8nIaD4dhdzdqDbyTkfsZY6qLSH5s4toEaA+8ACSIyFrgJ+BHYIUxJjqzcatsJD4etiSXJNHkMyCtPLUSg/0h1+36bg5Ho5T/KBJRhEV3L6L+6Pociz3GI/MfoWTukrSp1MY7Db75Jvz+O/z8sy0+X7euTUKVygR3Zu4PSeOxC8Bu4GUymHwCGGNOArOSD0SkADYRbYIdih8IJInIOmNM3UzErLKT7dshLs6ea/IZkFadWgVAmbxlqF0yozN5lMrari14LfO6z6PpN005l3CObtO6sbz3cmoUr+H5xkJDYcoUuw/8gQMwYADUqGGTUKUyyJ3V7kFpHDmNMVWMMcOMMW4vwTPGnDDGzACGAW8As4FgoJa791bZgGvIHTT5DEBHYo5V9OmWAAAgAElEQVSwOWYzAJ2rdEZEHI5IKf9Tp1QdJkZNRBBi4mNoO7Et+87s805jRYvC1Kk2EY2Ph86d4cgR77SlsjS/nEAlIkVFpJuIjBSRLcB+YDx2KP53MtGrqrKhTclFA0TspHkVUOb+M/fikHtU1SiHo1HKf3W4rgPvt3wfgANnD3i3Bmj9+vDBB/Z8/37o1g0SErzTlsqy3NnhqMwVjlIikjuD9+siIp+KyGbgADAReACIBT7AJp4FjDF1jDH/y2zcKhtx9XxWrAi5dN1aoJm9fTYAxSOKU7eUDu0pdSUD6gzg0VqPArDx8Ea6TutKQpKXksJ+/eyuRwA//ggvvOCddlSW5U7P525g12WOPcApEdkqIvde5f0mAw8B8cBH2ELyhYwxNxtjnjHGzDfGeHE7B5XluJLPG7RyVaA5Fnvs4ir3dte201XuSqVDRBjeavjFGqCL/lnE4wse904NUBH4/HO48UZ7/c47MH36lb9HqVTc+UR/EJtkbgGGAv2AV4GtyY//D9gLjBaRq9mMuQtQxBhT3RjzhDFmtjHmlBvxqewsOjqlGLLO9ww4s7emFJbvcG2mN0tTKlsJCQphUudJ1ChmFxx9tvYz3l/1vncay5ULZsyAvHnt9X33pVQXUSod7iSfZYC/gGrGmFeMMZ8bY4ZgC6Rvxg6R345duf5kejczxkw3xhx3I56ApzscedBff6Wca/IZcKZvsb0oeUPyUq9EPYejUSpwROaIZG73uZTMXRKAgUsHMn2zl3olK1SA8ePteXQ0dOoEZ3WAUqXPneSzN/CZuaRPP/n6c6BX8kPfArra4yroDkcepCvdA9aZC2f4bud3ANTJW4fgoGCHI1IqsJTMU5L5PeYTmSMSg6HnzJ78uu9X7zTWti289JI937oV7r9fC9CrdLmTfBYCcl7muXAgf/L5cUBrpCjfciWf4eF2wZEKGIv+WUR8kq3UVjevLjRSKjOqF6vO1C5TCZZgziecp/2k9uw6ucs7jQ0eDK1a2fNp0+C997zTjsoy3Ek+1wMvJO9KdFFyYfhByc8DlAYOudGOUhnnKrNUtSoEa89ZIJm1dRYAuXPkplqk9lorlVmtKrbi4zs+Bmzd3DYT2nDy3EnPNxQcDN9+C+XK2evnnoNlyzzfjsoy3Ek+BwLXAXtEZJaIfC4is7Cr4CsBzyS/rgYw160olcoo3dM9IMUnxrNg+wIAmpdrTmhQqMMRKRXYHr7lYZ6pZ38cbzm2hagpUcQlxnm+oQIF7Ir38HBISrL1P/fv93w7KktwZ4ejX4A6wCKgLnB/8teFQF1jzMrk1z1tjHnCA7EqdXUOH4ajR+25Jp8B5ac9P3H6wmkA2lTw0h7VSmUzb7V4i6gqdqOGZbuX8dC8h7xTgqlmTRg50p4fPQpduqRscaxUKplKPkUkWEQqAf8aY7oaY4oZY0KTv3Yzxmz0cJxKXb3Ui420xmdAcQ25hwSF0KJcC4ejUSprCJIgxnYcS+2StQH4ev3XvL78de80dt998OCD9nzVKhg40DvtqICW2Z5PwZZT0hooyv/oSveAZIxhzrY5ADQp14R84fkcjkiprCNXaC7m3DWHcvnKAfDSspeY8OcE7zQ2YgTccos9//BDmDjRO+2ogBWSmW8yxiSIyCH8dG94lc25ks8CBaB4cWdjUVftj0N/8O+ZfwHoUFkLy6uMMQZOnLDTDI8eteUmo6Pt40FBEBpq66HnzQtFi0LJkpAjh9NR+1bRyKIs6LGA+qPrc+r8KXrP7k2ZvGVoWKahZxsKD7er3mvWtP8offva3ZCuv96z7aiAlankM9kkbC3P+R6KRSnPSL3YSLTKV6Bw9XoCtK/c3sFIlL+Li4N162DlSvjjD9i82ZaYjI29+nuI2N9NK1eGKlWgenWoVcvO1AnNwuvcqhSuwoyuM2g5viVxiXF0nNyRX/v+yjX5r/FsQ2XL2hXwd9xh/2GiomDNGsiTx7PtqIDkTvK5HugmIj8AM4CDwKUF52e4cf+AIyJhwEigOZAPOzXhKdfiK+UDSUkpuxvpkHtAmb/d/h5bvWh1yuQtw5kzZxyOSPmTvXth7lyYP99W8Tl/3r37GQMHDtgjdVWgnDmhUSNbtrJlS5uYZrXfYZuWb8pnbT+jz5w+HIs9RruJ7Vh5/0ryhuf1bEOtWtkaoEOGwLZt0KcPTJmS9f5CVYa5k3yOTf5aEmiSxvMGyG4FFkOwpaYaAvuAe4A5IlLGGJOB38lVpu3cCefO2XNNPgPGoehD/H7gdwDaXKur3JV19ixMngzjxsHPP6f9mqJFbW9l1aq2zGSpUvax3LkhMtKWoExKsr2lp0/DyZNw8CDs22c/LrZssUdMjL3fuXOwZIk9wN6vZUvo3BmaN4cQd35q+pH7a9zP1mNbeWflO2w+uplu07oxr8c8QoI8/Ad86SVYvRoWLbJD8cOHw5Pp7ritsjh33mVNPRZFFmGMiQFeSfXQNyLyAXAtsMGZqLIZXWwUkFy1PQHaVNLkM7v75x/4+GMYPfr/bxVeogS0aQNNmkCDBlCmjPsdaUlJ8Pff8NtvsHy5TTz37LHP7dsHX31lj6JFoXt3uOceqFHDvTb9wRvN3mDb8W3M2TaHxTsW89Tip/iw9YeebSQoyO7/fvPN9i914EC7GKlRI8+2owJKppNPY8xPngzECSKSG3gJuAlbDL8QMNQYMySN10YCrwFdgQLAVuBNY8ykK9y/MnYL0h0eD16lTcssBSTXkHvBnAWpU7KOw9Eop/z9N7zyil0cnZSU8njx4tCjh038atb0/KhtUBBcd5097rnHDslv2waLF9vDNcx/+LDtuBs+3Pa09uyZg3LlArcrNDgomG87fUvD0Q3ZcHgDH635iMoFK/No7Uc921DBgrbXs0ED2wXdtaudrFusmGfbUQEju69WLwg8CIQBs9J57QzgXmAo0Br4DZgoIj3SerGI5MROTXjNGBPtsYjVlbmSz3Ll7Lib8nsXEi6wZIcd42x9bWuCg7LbbB11+LBdEF2lil2j4ko8mzeHOXPg33/h3Xdt55kvpguK2ER0wABYsAAOHbK9sE2bprS/eTO88EI4ffrczvPPh7HLS9ume1tkjkjmdp9LsUibCA5YNODi/0ePuuUW250N9i+0WzeIj/d8OyogZCj5FJHRIlI+1fmVjq+8E7JH7QHyG2MaA89f7kUicgfQAuhnjPncGLPMGPMAsBR4R0SCL3l9KDAV2zs6zGvRq//PlXxqr2fAWL53OdFx9vczne+ZvcTHw3vvQaVKdlg7Kckmd127wsaNsHQptGtn5206KW9e6N0bfvjBjhy/8QZce6197ty5UD79NIyKFaFTJzu9MdCUzluaOXfNITwknESTSJepXdh8dLPnG+rb1xahBzuJ94UXPN+GCggZHS9oCoxIPr+NS1a3X8ILe3d5lrn6/cU6AtHYhDK1McAE7DajKwFEJAjb45kI9EmvDREpAhS+5OEKANHR0V5b8RuTPLve9TVLOHeO3Nu3I8CFSpW4oKulA8LMTTMBCJZg6hWpd/E9nyXfo+qijRuDePTRnGzcmJJZtmwZz5AhF6ha1XZ9+uN/4bx5oV8/ePhhmDMngXffTeTPPwuTlAQzZ9qjRYt4Bg26QI0aSenf0E9Uzl2ZkbePpPeC3py5cIY237bhh+4/UDBnQc829OabRKxdS/Cff8K77xJ7440kdNC6vt7iq8/R6OiMDfBmKPk0xpRPdV4uQy0FthuALcaYhEse35jqeVc5pc+B4kCrNF6fln7A4LSeWLNmDYcOHcpEuFdvzZo1Xr2/L+XduZMmyeN1fwL7U9dPUX5r1hY74+W6XNexftX6//d8VnqPKkhMFKZOrcTUqZVITLSDbyVLnqVPn03UrHmEw4ftMHwgyJsXXn0Vdu/Ow9y51/DTT6VISAhm6dJQli4NpU6dg3TvvpVy5fwwi05DfvLTvVh3Jh6ayO7Tu2k7ri1DKwwlNMizhU9z9etHk6efJjQ2ltCHHmLV2bNElyzp0TbUf3n7c3Tv3r0Zen3gzpT2rYLAzjQeP5HqeUSkLNAXOA8ck5TJSa2NMcsvc+9P+f89qhWA2bVr16ZKlSruxH1ZMTExrFmzhtq1axMREeGVNnwtNFWifl2XLlSqWtXBaNTV2HlqJwfWHwCgS40uNK2VUkQjK75Hs7v9+4W+fXOycqX90RMcbHjqqTgGDjSEhV0PBNYOOK73aNeu19G7dwT79sXy7rthjBsXSkKC8Ouvxfn11+J07hzPkCHnKV3a7wcEaWKakLAogalbp7I5ZjMzE2by6e2fIh6ebBufPz+hd91F6LlzNPn4Y2K+/x70/7nH+epzdMuWLRl6vSafVy/dKQbGmD3Yfe+v/qbGHAGOAIjIEFL1gkZGRpLHy7tBREREeL0Nn9mRXFQgNJTIm2/O2tuUZBErt6Xsv3Dn9Xem+V7MUu/RbGzpUrta/fhxe121KowfL9SoEYZd8xm4XO/RqlXtwqSXXrI9omPHQmIiTJsWyvz5oTz3nK00lCuX0xFf2diosez7Zh+r9q1iwuYJVCtejf81/J9nG+nWzU7sHTaM4C1byPPMM7Ykkxag9wpvf45GRkZm6PUZXXC0U0SqJ5/vSr6+3JGVygsdJ7l38xIFkr+eSOO5DDPGDDHGCHYYX2XU5uQJ8pUqaeIZIBb9swiAYpHFuLHojQ5Ho7zBGBgxwm5240o8+/a1NTWzQq3MtJQvb5PQLVvs4imwxeuHDLGr6CdPtn8v/io8JJxZd82ibN6yADz//fPM2OKFDQtfeQWaNbPnEybAp596vg3llzJaaukn4Eyq8ysdl9mPIiD9CVQRkUt7il1VzDf5OB6VFle3v5emKijPikuM44ddPwDQskJLjw/rKeclJMBDD8ETT9iV7OHhtnNr1Cj/7/3zhGuvtYnmzz+nJNr//gt33QWNG6d8ZPmjIhFFmNdjHrlz2JJ198y8h3UH13m2keBgW9S1VCl7/eSTgVkuQGVYhpJPY0xvY8yu5PP7kq8ve3gnZEfMBCKBqEsevxc4APzqiUZEZIiIGDSZzbhz57hYaE+Tz4CwYu8KYuLtCsxWFVs5HI3ytNhY6NjRJpoAJUva3YPuvtvZuJzQqJHt6R01Cgon1zZZvhxuuskOz8fFORvf5dxQ5AYmdZ5EkAQRGx9Lu4nt2H9mv2cbKVwYpk61o1Xx8XYf06NHPduG8juZLjIvIoXSeb5mZu/tSyLSWkQ6A+2SH6oqIp2Tj1wAxpiF2JqeI0XkARFpKiJfAK2AZ40xiZ6IRYfd3bBtW8o4liafAcE15C4ILa5p4XA0ypNOnoTbb4d58+x1zZo2+brlFmfjclJwsJ1usH079O9vpzbGxcHLL9u/n1WrnI4wbXdcewfv3/4+AAfOHqDDpA7Exsd6tpG6deGDD+z5/v12cnCiR36sKj/lzg5Hc0UkPK0nROR6YLEb9/alkdjV5qOTr7skX08FiqR6XSdgHHbv9kXY2p7djTHf+i5UdVmpx680+QwIi3fYj4haJWtRMJeHawkqx5w4YafxrVhhr5s1gx9/tFtkKlueacQIm2xWS5649ddfdufJ/v3BH8va9q/Tn4dvfhiAtQfXcv/s+7n6MtlXqV8/u4cqwPff26xcZVnuJJ9Fgf+XeIlIRWwvoR/PZklhjClnjJHLHLtTvS7aGDPAGFPcGBNmjKl+pX3dM0OH3d3gSj5FoHJlZ2NR6Tp49iAbDm8A7HxPlTWcOGG3xPzjD3vduTPMn6873aalTh1YuxZefx3CwuzAzUcf2bmhv3pkIpfniAgftv6Q28rfBsDkvybz+vLXPd0IfPEFXJ9cbmvYMJg717NtKL/hTvJ5B9BERN53PSAiZYDvsfMgdZ+8DNJhdze4ks9y5SBnTkdDUelLvXe0zvfMGk6d+m/ieddddi1JWGBXUfKq0FC7w+TGjXZeKNhh+QYNYPBg/9r6PDQ4lCmdp1AhfwUAXlr2kudXwEdEwPTpKb+t3HNPSgk9laVkOvk0xmzFDkX3E5H+IlIUm3ieBW43xpz1UIxKpU9XugeUpTuXApA3LC+1S9Z2OBrlrnPnoH37/yae48ZBiFaSviqVKsGyZfD22zYhTUy0VYjq14etW52OLkXBXAWZ033Of1bAbzi0wbONVK4MY8bY89OnISrKvsFUluJOzyfGmJ+wO/q8B7jqIzQ3xnik7qVSVyUhAf7+255r8un3jDF8t/M7AG4rfxshQZqhBLKEBJtsLk/ew61TJ008MyM42Bag/+23lLmgv/9uh+G//NJ/6oJWLVyVSZ0nIQix8bG0n9SeIzFHPNtIVBQ884w937DBzgf1l78A5REZLTJf4NIDWAB8BOQCugJxqZ5TGaBzPjNp586U8SlNPv3eX0f/4nCM3by7+TXNHY5GucMYeOQRmDPHXjdtCt9+q4mnO6pXtwnowIF2GuT58/DAA9CzJ5z1k/HEO669g7eavwXA3tN76TS5ExcSLni2kTfegFtvtedff20zcJVlZLTn8xhwNI1jAFAY+P2Sx1UG6JzPTNKV7gHF1esJmnwGuvffT8kJatSAWbNsIXnlnrAwOwT//fdQrJh9bMIEuPlmWL/e2dhcnqn/DL2q9wJgxb8r6De/n2dXwIeE2Ar9rr+Axx6zXcEqS8jo76evcOU9zpXyPU0+A4or+SydpzTXFrjW4WhUZs2da3vnAEqXhgULwItbR2dLTZvaUed77oElS+xiJFdJzIcfdnYbdBHh87af8/fxv1m9bzWj14+mWtFqPFH3Cc81UqwYTJli/yLi4mz5hLVroaCWZgt0GUo+jTFDvBSHUpnnSj6LFoX8+Z2NRV1RfGI8P+7+EbC9nrqlZmDatMnWATfGLlCeOzelg0p5VpEisHAhvPkmvPQSXLhgp0CuXAmff+7sNqXhIeHM7DaTWqNqse/MPp5e8jRVClWhZUUPlk9r1AjeeQeeegr27LHzD+bPhyC3lqwoh+m/nh/ROZ+ZpCvdA8av+3+9uKWmDrkHpjNn7HqQmBjb8zZhgp2nqLwnKMiWZPrxR7tNKcD48XY1/M6djoZGschizL5rNjlDcpJkkug2rRvbjm3zbCNPPGF7PQEWLbJ7kqqApsmnH9E5n5lgTEotEk0+/V7q+Z7NyjdzMBKVGcZA794pxSWGDrUllpRvNGoE69ZBkyb2esMGu2XpYof3E6xZvCbf3PkNAKcvnKbdxHacPHfScw2IwOjRKRuIDB1qk1AVsDT5VIFt//6UJaCafPo9V/JZrUg1ikYWdTgalVHvvw8zkuuKt24NgwY5G092VKQILF0KTz9tr0+etP8Ww4Y5W42oy/VdePlWuyXm9hPb6TqtKwlJCZ5rIHdu++aLiLB/0Lvvht27PXd/5VOafKrApouNAsbZC2dZvc+WA9Yh98Dz++/wv//Z83Ll7LCvTrtzRkgIvPuu3UEqVy6biw0aBN26QWysc3ENbjKYqCpRgP1F8+nFT3u2gapVU8ornDhhh+LPn/dsG8on9KNDBbbNm1PONfn0a7/s/YVEkwjokHugiY62C4wSEmziM2UKFNBKzo676y5YtQoq2B0vmTrVlsbcv9+ZeIIkiG/u/IbqRe0k4A/XfMiotaM828hdd0H//vZ87VoYMMCz91c+ocmnCmyuns/cuaFECWdjUVe0bPcywP6AalS2kcPRqIzo3x/++ceev/461KrlbDwqxY03wpo1cNtt9nrtWvvv41RJzIgcEczpPociEUUA6LegHz/v+dmzjbzzDtSrZ8+/+MIWoVcBRZNPP6Kr3TMh9Up3Ldvj11zJ583FbyZPmBaEDBQzZqRstX3bbSm7Hir/UaCAXX/z8MP2+uBBuzhpyhRn4imTtwwzus4gNCiUhKQEoqZEsfvUbs81kCOH7eYtXNheP/KIXX2lAoYmn35EV7tngpZZCginz59m3cF1ADQt19ThaNTVOno0JaEpUADGjtV5nv4qNBQ+/RQ++sj+G50/b+eAvvaaMwuRGpRpwBftvgDgWOwx2k9sz9kLHtwftGRJmDQp5Q8bFQWnTnnu/sqr9GNEBa7jx+1PR9Dk08/9vOdnkkwSAE3La/IZKB57LOW/2Mcfp9SYVP5JxP6bLVgAefPax156CR56yM7X9bX7brqPp+o+BcCfR/6k58yeFz8HPOK22+wyf4AdO6BXL0jy4P2V12jyqQJX6pXuVas6F4dKl2tXo2AJpmGZhs4Go67KtGkpw7YdO9p1HiowtGxpFyKVLWuvR42CDh3swjFfe7vF27Sq2AqAOdvmMHjZYM828Oyz9g8Hdqutt97y7P2VV2jyqQKXllkKGK75nrVK1iIyR6TD0aj0nDgBjz5qzwsUsMO5OqU6sFSpYhPQGjXs9YIFdov0w4d9G0dwUDCToiZRuaAtEP/a8teYtnma5xoQgW++gYoV7fWLL8L333vu/sorNPlUgcuVfIaFQfnyzsaiLuvEuROsP7Qe0PmegeL55+HIEXv+4Ye6b3ugKl4cfvrJ9oSCXQFfr17KDlW+kjc8L7Pvmn1xoeG9s+5l4+GNHmwgL0yfDjlz2mH37t2dqzelroomnypwuZLPSpUgONjZWNRl/bznZwx2xYMmn/5v5UpbvQagRQvo0cPZeJR7cue2o9G9e9vrXbvsnvArV/o2jsqFKjMxaiKCEBsfS4dJHTgWe8xzDdx4I3z2mT0/ehS6doX4eM/dX3mUJp9+REstZZCudA8IrvmeoUGhNCjTwNlg1BXFx9vFKWAHFHS4PWsIDYWvvoLBydMtjx+HZs1Stkr1lTuuvYNhzewCod2ndtNtWjfPbsHZqxc8+KA9X7nSzgdVfkmTTz+ipZYyICYG9uyx55p8+jVXgelaJWuRKzSXw9GoK/nwQ9iU/Kvviy+mTKNTgU8Ehgyxu1MGB9vqRJ07p/Ry+8pzDZ6j2/XdAPhh1w88s8TDhWNHjICaNe358OG2HqjyO5p8qsC0bVvKuSaffuv0+dMX53veWuZWh6NRV3L4MAwdas8rV4aBA52NR3lHnz52GD4iwtb/fOgh3y4QFxFGdxjNTcVuAmDEryMY88cYzzUQHm5LNeTPb6/vv/+/Py+UX9DkUwUmXekeEFb+u/LifM9by2ry6c8GDYKzyTXAR4yww+4qa2rdGn74wVYyAPjf/+wiM18Vo88VmotZ3WZRKFchAB6e/zC/7vvVcw2ULw/jxtnz6GhbgD4mxnP3V27T5FMFJlfyGRRkFxwpv+Qacg+SIOqXru9wNOpy1q6F0aPtedu2KaujVdZVu7ZdCV+8uL1+8027S2Viom/aL5uvLNO6TCMkKIS4xDg6Tu7IgbMHPNdAmzbwwgv2/K+/7FZdTmz1pNKkyacKTFu32q/ly9thFuWXft5rk8/qRauTNzyvw9GotBgDAwbYr6Gh8P77TkekfOWGG+CXX+Caa+z155/D3XdDXJxv2m9crjHDWw4H4GD0QaKmRHEh4YLnGnjlFbsLEsD48fYPqPyCJp8qMLkK1VWu7Gwc6rLOxZ/jt/2/ATrk7s9mzoQVK+z5gAFw7bXOxqN865prbAJ6Q/Iy18mT4c47ITbWN+33q9WPvjX6ArB632oemf8IxlM9lMHBMHEilChhrwcMsMVOleM0+VSBJykJtm+35/qT0m/9uv9X4pNsnb1GZRo5HI1KS3y8nesHULCgXeGush9XMfo6dez1woXQqhWcPu39tkWEj+/4mHql6gEwZv0YPl7zsecaKFLE7hMbEmK7dDt3trWmlKM0+VSBZ/9+WycEdL6nH3PN9wRoVFaTT3/01Vcpgwgvvmg3ilHZU4EC8N13tv4nwPLldsTaF3laWEgY07tOp2TukgA8ufhJlu1a5rkGGjSAt9+253v2wD332E4M5RhNPv2IFpm/Sqn3htPk028t37scgOsKXUeRiCIOR6MuFR1t6z4ClCtnF5uo7C0yEubPh44d7fW6dTYBPXrU+20Xz12cmd1mEhYcRqJJpMvULuw6uctzDTzxhO31BNu1O2yY5+6tMkyTTz+iReavUurkU4fd/VJ8Yjwr/7X79+mQu38aPtzW9gR47TUtraSssDA7Su3aVnXjRmjSBA4d8n7btUrW4ot2tur98XPHuXPyncTEeahEkojt6nd1WLz8su3qVY7Q5FMFHtd8z7AwKF3a2VhUmv449Aex8XbFgiaf/ufUKXj3XXtevTp07+5sPMq/hITA2LF2t0qAzZttAnrAg5WQLqdX9V48WfdJADYe3kjv2b09twApTx5bgD5nTlveoXt32LfPM/dWGaLJpwo8rp7PihVtnU/ld1y9ngANyzR0MBKVlg8+SFlM8uqr+t9I/X/BwTBmDPS1C9HZtg0aN4Z///V+22+3eJvm1zQHYOrmqbzxyxueu3m1aikll44dg65dfVdbSl2kHzkq8Lh6PnW+p99a8a+t3VM8sjjl8pVzNhj1HydO2OQT4JZbbFF5pdISFGTzNNd84H/+sQno7t3ebTckKITJnSdzTX5bgPTFH15k3t/zPNfAPffYfUUBVq2CZ5/13L3VVdHkUwWW+HjYudOea/Lpl4wxrNhrk88GZRogIg5HpFJ7772UbTRfecVOhVPqcoKC4JNPbIlMgF27bALq+hj2lgI5CzD7rtlEhEZgMPSY3oMtR7ek/41Xa/hwuPlmez5ihJ3oqnxGk08VWHbvhoQEe66LjfzS7lO7ORh9EID6pXRLTX9y/Dh8+KE9r1vX1nJUKj0itrf8mWfs9d69cOutKYNQ3nJDkRsY19Hu0X427iwdJnXg1PlTnrl5eLid/5k/v73u0ydl5zzldZp8qsCS+tNOez79kmvIHWzPp/IfH35oSywBDB2qvZ7q6onYUpmu7dL374emTWHHDu+227FKRwY3HgzA9hPb6TG9B4lJHtqAvlw5GGeTW6KjbSmmGA+trldXpMmnCixa49PvuYbcc4bkpEaxGg5Ho1zOngNGHr0AACAASURBVE3p9axVC1q0cDYeFXhEbFmul1+2164EdJcHy3Gm5eXGL3PndXcCsPCfhQz6YZDnbt6mDQxKvt9ff9m5oJ5aXa8uS5NPFVhcyWfu3HbbNOV3XD2ftUvWJjQ41OFolMvIkbbEEtjeK+31VJkhYjcncOVr//5rC9Hv2eO9NoMkiLF3juX6wtcD8NaKt5jylwfnaA4dmrK107ffwmefee7eKk2afKrAknqlu/709Dunz59m0xG7QVeD0jrk7i/OnYP337fnVatC+/bOxqMCm4gt0eVaJL57t01AvVkyM3dYbmbdNYt84fkA6D27NxsPb/TMzYODYcIEKGm39+SJJ+C33zxzb5UmTT49SEQeE5E/RCReRIY4HU+W5Or51CF3v7R632oMdsiqfmldbOQvxoxJ2c3o+ee1rqdynwi8+SY89ZS93rnTDsF7sxB9xQIVmRg1EUGIjY+l4+SOnDh3wjM3L1LErngPCbF1Pzt39s3G9tmUfgR51n7gZWCW04FkSefOpVQ41pXufin1YqN6pes5GIlySUy05ZXArq+46y5Hw1FZiIjdKat/f3v9zz82AfXmVpytKrbi9dteB2DnyZ2eXYBUvz68844937vX1gNNSvLMvdV/aPLpQcaYmcaYucBpp2PJknbsSJkIrj2ffsm1s1HVwlUpkLOAw9EogFmzUmoyPv207dhRylNEbMlMVyH6v/+2Q/BHjnivzf81/B9RVaIAWLxjMS8te8lzNx8wALp0secLF8Lrr3vu3uqibJt8ikhuEXlbRJaIyFERMZcbKheRSBEZLiIHROS8iKwXEe0/8DVd6e7XEpMSWbN/DQD1Smmvp79wzfXMnx9693Y2FpU1icDHH8MDD9jrLVvs+p1jx7zVnjCmwxiqFq4KwBu/vMG0zdM8dXP48suUnzGDB8PSpZ65t7oo2yafQEHgQSCM9IfJZwD3AkOB1sBvwEQR6eHVCNV/pa7xqcPufmfLsS2cjbNb59QtVdfhaBTA6tWw0nZG8/DDEBHhbDwq6woKsovEXb/gbNpkNzE47aVxwNxhuZnVbRZ5w/ICcN+s+y4udnRbnjwwfTrkymVH23r08M2m9tlIdh6A2QPkN8YYESkE9E3rRSJyB9AC6GGMmZj88DIRKQu8IyKTjTGZnnAiIkWAwpc8XAEgOjqaM2fOZPbWVxSTXEg3JoAK6oZv2kQOIKlQIaKDgsBLfzcqc5ZtX3bx/IZ8N7j93g3E96i/efPNnEAooaGGe++N5swZrV/oSfoe/f/eew9iYsKZMiUHa9dCq1YJzJgR65VffIqGFmVUq1F0m92NmPgY2k9oz7Iey8gfnt/9m5cpQ+jw4eR88EE4doyEqChiFyyAHDncv7cP+eo9Gu3aveIqZdvk05irriLbEYgGpl7y+BhgAlAHWOlGKP2AwWk9sWbNGg55c+Z2chuBosG6dRQCThYuzC/LlqX7euVbc/bOASBnUE4ObDzAYTnskfsG0nvUnxw+nIu5c5sD0LDhv2zd+ofuHugl+h79r27dhL17b2H16hKsXh1C69bnGTToV3Lk8PzinRzkoHux7kw4NIFdp3fRaXwnBl0ziGAJdv/mRYpwY6tWlF+0iJDffuNo795s6ptmP5Xf8/Z7dO/evRl6fbZNPjPgBmCLMSbhksc3pnp+JYCIhGD/ToOBEBEJB+LT6Rn9lP+f2FYAZteuXZsqVaq4G3+aYmJiWLNmDbVr1yYiQMbiIpMnEOWuWZOmTZs6HI261PNjnwdscfnmtzV3+36B+B71Jy++GEZSkq2F+9prBbjhBv0/42n6Hr28Ro2ge/cEvv8+hA0bivD1160YO/YcoV7Yd6KxacyZuWeYt2Me686uY3X4al6s/6Jnbl6vHoktWxK8fj0V5s2jeKdOJERFeebePuCr9+iWLVsy9HpNPtNXENiZxuMnUj3v8iL/7cUcBPQGvr7czY0xR4D/rAuU5OLpkZGR5MmTJ8MBZ0RERITX2/CIM2cuLp/Mcf315AiEmLOR0+dPs/W47VZrWK6hR99TAfMe9SOxsTB+vD1v3Bjq1490NqAsTt+jaZszx877XL4cFiwI5bHHQhk/3tZ097Rvu3xLnS/rsPXYVt759R3qlq1Lpyqd3L9xnjwwcybUrAknT5Krf3+oVw+uu879e/uQt9+jkZEZ+4zJzguOMuJKQ/QXnzPGDDHGyCXH11fbiIgMEREDeGjWdBaii4382m8HfrtYXF4XGzlv4kQ4edKeP/64s7Go7CtXLpg3D2rVsteTJtmt071ROjNPWB5mdZtFnjCbYN076142H93smZuXKwfjxtnz6GiIirJfVaZp8pm+4/y3d9PFVcTQQ9srpCSv2KF8lZqWWfJrq/etvniuyaezjIGPPrLnpUpBhw7OxqOytzx5YNEiqFbNXn/1ld0V6apXXWRA5UKVGd/RdvlHx0Vz56Q7OX3eQ8vt27RJ2dB+82abRXvjD5FNaPKZvj+BKsnzOVNL/q+kvZQ+kTr5rFjRuThUmlzJZ8UCFSmUq5DD0WRvK1bAhg32/OGHtai8cl6BArZUpmvQasQIePll77TVrnI7hjQeAsD2E9vpObMnScZDXa1Dh9oCpmD3gh850jP3zYY0+UzfTCASuHSG8b3AAeBXTzWkw+5X4Bp2L1XKjuUov2GMuZh8aq+n8z7+2H7NkSOl6LdSTitaFL7/HsqWtdevvWZ3RvKGlxq/RLtK7QCY9/c8XvnpFc/cODjYJp0lS9rrJ54ArXSQKdk6+RSR1iLSGWiX/FBVEemcfOQCMMYsBJYCI0XkARFpKiJfAK2AZ92p8XkpHXa/AlfPpw65+50dJ3dw/NxxAOqW1OTTSYcP29rYAF27QpEizsajVGqlS8N339lEFODJJ1OmUnpSkAQxruM4KhW0Py+G/jSU2Vtne+bmRYrAlCl2SOH/2rvz+Kiq+//jr08S2TdlRy1L0RbEBUWt1roUbCEVZQdBBIVKq7bWtVVbxYrFn1qXqrUulYIgsoMLfq1SbbVaoIIiAiIoouxLBQOEJZzfH2eGjGNCQuZm7p3M+/l45DFn7tz53JNwmHxytrt3r78V55YtwcTOIlmdfAKP4bc5ejr2vG/s+RQg8WO7F/AM8Hvg//B7e17snJuQvqpmMeeKez6VfEbO3C+KO/9PP+r0EGsiY8fCvtimcD/7Wbh1ESlJ27Z+Dmh84fVll/lFSUGrX6M+M/vPpG61ugAMnjGYZZsD2uj2zDPh3nt9efVquOSSyllFVYVldfLpnGtVwur0+NeqhPMKnHPXOOeaO+eqO+dOdM49F3R9NOxeis2b4csvfVkr3SNn/tr5AFTLrcYJTU8IuTbZa/9+ePJJX27f3v9+FImik06CF16AGjWgqMh3Hr75ZvDXade4HeN6jgPgqz1f0eO5HmzfHdCd8a65xlccfDZ9113BxM0SWZ18Ro2G3Uuhle6RNm+Nn/N0UrOTqJabWbeeq0reeANWrPDlK66A2HbBIpF09tl+9Do3FwoLoXv34oVyQerx3R787uzfAfDRlo+4dMalwSxAMoOnnir+nXT77X5VlZSLkk+JvsQ9PpV8Rsreor0sXL8QgNNanBZybbLbE0/4x+rVYfDgcOsiUh7du8PTsUlv27bBj38MK1cGf52R544k/5h8AGZ9NItR/xoVTOB69fwk61q1/PSwgQPh88+DiV3FKfmMEA27lyLe85mbC61bh1sX+ZrFGxdTuK8QgFOPPDXk2mSvTZtg+nRf7tvXb20jkgkuvRTuv9+XN2yAH/0I1q0L9ho5lsOEXhNoe4Tfpu/2N27nxeUBTTTt0AEef9yXN2/2K/327AkmdhWm5DNCNOxeinjPZ+vWVMqNgaXC4vM9wd/TXcLxzDN+4S34IXeRTHLttXDLLb78ySe+BzR+h66gNKjRgJn9Z1Knmr8N5KDpg1i+ZXkZ7yqnSy4pXuH3n//AjTcGE7cKU/Ip0RdPPrXYKHLi8z3rVa93YFsTSS/nYMwYXz7mGDjrrHDrI1IRo0YV/+H0wQd+SH7nzmCvcVyT4xjbYywA23dvp8dzPfhq91fBBH/wQejUyZf/9CeYNCmYuFWUkk+JNuf8n8IA3/52uHWRb4j3fHZq0Ykc08dJGBYsgMWxiTpDh2qhkWQmM/jzn/1t08Hfqatfv+Ie/aD0ateLW87y3axLNy9lyMwhwSxAql4dpkyBww/3z4cPh2UBbe1UBem3hUTb5s3wVewv0zZtwq2LfM2OPTtYvNFnPae20HzPsPztb/7RzM+fE8lUubkwYULxHSxfegkuvzz4LTR/f97v6dq2KwAzls1g9JujgwncqhWM9/eWp6DAZ9IFBcHErmKUfEaIFhyVIN7rCer5jJiF6xce6DHQfM9w7N7t7/YHcP75/u6zIpmsenWYMQNOjf09O348/OY3wV4jNyeXZ3s9S5vDfYfG717/HbM/nh1M8Px8+O1vfXnJEhgxwo/gydco+YwQLTgqQeK+G+r5jJT4fE9Qz2dYXngBtm715csuC7cuIkGpWxdmzy7eWe/ee+Ghh4K9xuE1D2dm/5nUPqw2Dseg6YNYuTWgfZ5GjoQuXXz52WfhsceCiVuFKPmUaFPyGVnx+Z7N6jTjqHrqcgtDfMi9fn246KJQqyISqEaN/I2DmjXzz6+91m9KH6Tjmx7P0xf5jUa/LPySXpN7sXNvAKuccnN90nnkkf75r34F8+Yd/D1ZRsmnRFt82L1ZM7+Rr0TG/DXFi41Mq1zSbuNG/8sZYMAAqFkz3PqIBK11a98DWreuH7kePNjfyStI/Y7rx/VnXA/Aog2LuOKFK3BBDJM3buwXIOXl+VVTffvCli2px60ilHxKtMV7PjXfM1K+LPySlf/z/zadmncKuTbZadIkf19s0B2NpOrq2NHfQCEvz+/d3qOH34opSHd3uZtzW50LwIQPJvDIvEeCCXzGGXDffb68ejUMGhT86qkMpeQzQrTgqATxnk8NuUfKgnULDpRPaXFKiDXJXhMm+MdWreDMM0Otikil6tKleIrJtm3QtavP5YKSl5PHpD6TDkwfuu7v1/HW6reCCf7LX/o9owBeeQXuuiuYuBlOyWeEaMFRkl27YM0aX1bPZ6S8u/bdA+VTmiv5TLePP4a5c3154EDt7SlV36BBcM89vrx2LXTrVrzYLghNajdhat+pVMutxr79++g7pS9rv1qbemAzeOop+M53/PPbb4fXXks9boZT8inRtWpVcVk9n5Hy7jqffDav05zmdZuHXJvsE99eCfwvZZFscMMNcM01vrxkiV9kt2tXcPFPP+p0Hu72MADrC9bTd0pf9hQFcJ/2unVh6lQ/Mds5uPhi+OKL1ONmMCWfEl2JK93V8xkp8eRTQ+7p51zxkHvHjtC+fbj1EUkXM7j//uJR7Lfe8rdVj899DsJPT/4pwzoOA+Dtz9/muleuCyZwhw7w+OO+vHkz9O8f/O2bMoiST4kubTAfSdsKt7Fi6wpAQ+5hmD/fD7uDej0l++TkwNixcM45/vn06b43NKh93M2MR/IfoVMLv5Dy0fmPMu79ccEEHzy4+Ab2b78d/O75GUTJp0RXvOezdm1o0iTcusgBiYuN4h/Qkj4TJ/pHM7/Fkki2qVEDZs6E44/3zx99FO6+O8D4eTWY1m8ajWo1AmDEiyNYuG5hMMEfesgPWYDvxp0+PZi4GUbJp0RXPPls00YrKiIkPuQO6vlMt/37/daB4Ht+4ntYi2SbBg3g5Zfh6KP981tuKb6tehC+Vf9bPNf7OXIsh8J9hfSa3IutuwJY4VSjhp//Wb++f37ZZcVDGVlEyWeEaKulJNpmKZK02Cg877xTvAFEfN6bSLY68kh/o4UGDfzzyy8PdhP6zm06M7rzaABWfbmKgdMGUrQ/gAmmbdrAuNhQ/vbt0KdPsCunMoCSzwjRVksJ9u8vTj413zNS4tssabFR+k2a5B9zcqB373DrIhIF7dv7IfjDDvPrd3r2hKVLg4t/45k30rud/8/2yspXGPnGyGACX3gh3HSTLy9aBFdfHUzcDKHkU6Jp3TrYvduX1fMZGdsKt/HxVj9EpCH39Coq8qN1AOedp2nQInHnnANjxvjyl19Cfj5s2BBMbDNjzEVjaNeoHQCj3hzFrGWzggl+111w9tm+/PTT/itLKPmUaNI2S5G0cH3xpHsln+n11lv+bzLwu7SISLFBg+DOO3151Sro3h127Agmdt3qdZnefzp1q9UF4NKZl7J8y/LUA+flwXPPQdOm/vlVV8H776ceNwMo+ZRoStxmST2fkZG40v3k5ieHWJPsM3myf8zN9UOLIvJ1t97q532C35Js0KDg9gD9bqPvMrbHWAC2795Oz0k9KdhTkHrg5s19ApqTA4WFfv7ntm2px404JZ8STfGeTzN/82qJhHjPZ+NajWlRt0XItckeRUUwbZovd+4MjRqFWx+RKDKDv/zF3wseYNYsuP764OL3bNeTm8+6GYAlm5Yw7PlhuCA2GD333OJ7vq9Y4TPooDYujSglnxJN8eTz6KOhWrVw6yIHvLf+PQA6Nu+IafurtPn3v4vnsGmVu0jpDjvMz43uEFu2+9BD/isod553J+e3OR+AyR9O5v537g8m8E03wQUX+PL06fDAA8HEjSglnxJNWukeObv27mLpJr+MtGOzjiHXJrvE96HOyfGLZEWkdPXrw+zZfkQb4Npr/Yr4IOTm5PJs72dpWb8lADe9dhOvf/p66oHjt26Kj/TddJOf6F1FKfmUaErcYF4iYfHGxRQ5P4FKyWf6OAczZvjy2WdD48bh1kckExx9NLz0kr9BnnMwcCDMmxdM7Ea1GjG9/3Rq5NVgv9tP/6n9+Xzb56kHPuIIfxeJatX8XJv+/WHjxtTjRpCST4me7dth82ZfVs9nZCSudO/YXMlnuixYAKtX+3KvXuHWRSSTdOzoF+rl5Pg93Lt3h08/DSb2yc1P5rGfPAbApp2b6DOlD7v37U49cKdOxfME1q71WXNQq6YiRMlnhOgORzFa6R5J8fmetQ+rTdsj2oZcm+yReOvnHj3Cq4dIJsrP9/d+B9+J2K0bbA3gLpkAQ08ays87/RyAeWvm8cuXfxlM4BEj/FJ9gDlz4I47gokbIUo+I0R3OIpJTD7V8xkZ8Z7PE5udSI7poyNd4snnaacV38daRMrvZz8rvpnQRx/5EYTdAXRSAjzY9UG+d9T3AHhiwRP8dcFfUw8aX7bfvr1/fued/kb2VYh+g0j0aIP5yCnaX8SiDYsAzfdMp6VLYdkyX9aQu0jFjR4Nffv68j//CcOGBbObUbXcakztO5Umtf0tx66afRXz18xPPXCdOn7Zfu3a/vkllxTPv6kClHxK9MSTzwYN4PDDw62LALB8y3J27t0JKPlMp8Qhd20sL1JxOTkwbhyceaZ/PmEC3HZbMLGPrHckk/tMJtdy2V20m96Te7Npx6bUA7drB0895ctbt/rsec+e1ONGgJJPiR5tsxQ5iYuNTmp2Uog1yS7PP+8f27eHY48Nty4ima5GDb/xfNvYlPVRo3xCGoRzWp3DfT+6D4DPt3/OxdMuZt/+fakHHjDA33YT/HL9G25IPWYEKPmU6NE2S5ETX2yUl5NHhybZPSU5XdatK94a5qKLwq2LSFXRqJHfA/SII/zz4cPhzTeDiX3N6dcwoMMAAOZ8Oodb59waTOA//hFOPdWXH34YJk0KJm6IlHxKtOzbB5995svq+YyMeM9n+8btqZ5XPeTaZIcXXywud+8eXj1EqppjjvF75x52GOzd66e0rFiRelwz46nuTx34A/2et+9h2pJpqQeuXt3v/xmfhjZ8ePFk8Ayl5FOiZfXq4j3N1PMZCc65Az2fGnJPnxde8I9NmviV7iISnLPPhief9OUtW/ydLf/3v9Tj1q5Wmxn9Z1C/en0Ahs4aypJNS1IP3LIljB/vywUF0KcP7NiRetyQKPmUaNE2S5GzrmAdm3f6Tf9PaqrkMx127oRXX/XlCy6A3Nxw6yNSFQ0ZAjff7MsffeTzub17U4/b9oi2jO/lE8WCPQX0ntybr3Z/lXrg/Hy4NTaU/+GHfg+pIJbsh0DJp0RL4jZL6vmMhPgWSwAnND0hxJpkj9deg8JCX9a93EUqz6hR0Lu3L//jH35tTxD53AXHXsBtZ/vl9Ms2L+Py5y/HBRH4jjvghz/05fHji7tvM4ySzwCZWWMze8nMdpjZcjM7P+w6ZZx4z2dennbUjoj3179/oHxisxNDrEn2iA+5V68OXbqEWxeRqiy+BVOnTv75k0/C/fcHE/u2c26ja9uuAExdMpX73wkgcG4uPPssNG/un//iF/Duu6nHTTMln8F6FFgPNAZuACabWcNwq5Rh4j2frVpprDEi3t/gk88WdVvQqFajkGtT9e3fX5x8dulSvMe0iFSOWrX8tmZHHeWf33ij35IpVbk5uYzvOZ6W9VsC8OvXfs0/V/0z9cBNm/oV77m5ft/Pvn2DmbCaRko+A2JmdYAewO3OuZ3OueeB9wFtknIotMdn5MSH3TXknh7vvgsbNviyVrmLpEfz5n6Hidq1/bD7wIGwcGHZ7ytLw1oNmdZvGtVzq1Pkiug/tT9rv1qbeuAf/ADuvtuXP/3UT2Ddvz/1uGmStcmnmdU1s3vM7O9mtsnMnJmNLOXcOmb2oJmtNbNCM3vPzAYknXYMUOCc+yLh2AfAcZX0LVRNn37qH1u3DrceAkDhvkKWbfZbepzYVEPu6TB7dnH5Jz8Jrx4i2ebEE2HiRH9r9Z07/R9/a9akHveUFqfwaP6jAGzYsYF+U/qxtyiAlU3XXw89evjyCy/AffelHjNNsjb5BBoCVwDVgZllnDsdGALcAXQD5gMTzWxgwjl1gO1J79seOy7lsW0bfPmlLyv5jISlm5ZS5PzWV0o+0yOefJ5wQvEwoIikR/fufk938InnhRcGs6PRsJOHMbzjcAD+/fm/ufHVG1MPagZjxhQvzr3lFn/j+gyQzcnnZ8DhzrlzgJtLO8nM8oHzgSudc4875153zv0UeBW418ziExMLgHpJb68XOy7lEd9cHvycTwldfL4naNg9HTZuhPnzfTk/P9y6iGSrX/0KRozw5QUL4JJLghnRfjj/YU5pfgoAD819iIkfTEw9aIMGMHWqX51YVORvx7l+fepxK1le2BUIiyv/ngc98QnklKTjY4BngdOBt4GPgTpmdlTC0HsH4JmDBTezJvgFSom+C7Bo0SIKCiond921axerV69mwYIF1KxZs1Kucahy//Uv4jXZWVDA/rlzQ62PwCv/fQU2+ttqblu5jbmfpu/fJIpttLK9/HIeztUAoGXLncydmzlzuLJRNrbRbDF4MCxcWIN58/KYOROGDNnD1VfvSTnurW1uZeiyoWzfvZ3Ln7wc8qHN4alvK5h33XXUGD0a1q9nX34+hY88Arm5aWujnxTv0V2tPOdbIPtOZTgzawRsAu5wzo1Meu0dINc5d1rS8eOAxcAI59wTsWNTgG3AL4DO+MTzGOfc5oNceyRwe2DfjIiIiEg4LootuD6orO35PAQNgU9KOL414fW4K4GxwBZgDdD/YIlnzJ/5Zq9qHeBYfHJ7sD+1FuN7Vyvy+reBWfjV+CtLOSeTlPWzyKTrphqzou8/lPeV99zynFfaOWqj0b2u2qinNhrd6wYRsyIxsrWNVgOOBso16VQ9n5TZ87kcWOmc65Z0vDmwFrjZOXd3uuqaVAfnnLOKvJ7Qc9vBOfdhZdUxXcr6WWTSdVONWdH3H8r7yntuec4r7Ry10eheV230wHG10YheN4iYFYmhNlo+2bzgqLy28PXezbgjYo9bS3gtXe5I8fWqJKzvtTKum2rMir7/UN5X3nPLc162tFO10dTfrzZaudRGU4+hNloO6vmkzJ7PJ4CL8Svj9yUcHwBMBL7vnHs7jdUNRFT/GhKJUxuVqFMblaiLahtVz2fZZuDnYPZOOj4EP+yuJdkiIiIi5ZTVC47MrBtQG6gbO9TezPrEyrNjt8l82cxeBR4zs3rACnxPaFfgEudiO3Bnnk34bvpNYVdEpBRqoxJ1aqMSdZFso1k97G5mq4CWpbzc2jm3KnZeHeAuoB9+rucyYLRz7rk0VFNERESkysjq5FNERERE0ktzPkVEREQkbZR8ioiIiEjaKPkUERERkbRR8ikiIiIiaaPkU0RERETSRsmnHBIzu9rMFprZXjMbGXZ9JLuZWWMze8nMdpjZcjM7P+w6iSTSZ6ZEnZlVN7OnzWy1mW03s/+Y2ZmVeU0ln3Ko1gC3ATPDrogI8CiwHmgM3ABMNrOG4VZJ5Gv0mSlRlwesAs4CGgCPAc+bWa3KuqD2+ZQKMbOngC+ccyPDrotkp9jNH7YCbZxzX8SOvQGMc849HWbdRJLpM1MyiZltBc5zzr1fGfHV85mBzKyumd1jZn83s01m5kobzjGzOmb2oJmtNbNCM3vPzAakucoildFujwEK4olnzAfAcZX0LUgVp89WyQSV3U7N7DtATWBlJVQfUPKZqRoCVwDVKXsoZzowBH9v127AfGCimQ2s1BqKfFPQ7bYOsD3pfdtjx0UqQp+tkgkqrZ2aWU1gHDDKOVcQWI2T5FVWYKlUnwGHO+ecmTUChpd0kpnlA+cDA51zE2OHXzezlsC9ZjbJOVcUO3cO8P1SrveAc+7mYL8FyUJBt9sCoF7S2+vFjotUROCfrSKVoFLaqZkdBkwBlgF/qMxvQD2fGcjFlOPUnvhfxFOSjo8BWgCnJ8Ts7JyrUcqXEk9JWSW024+BOmZ2VMI5HYAPU62rZKfK+GwVCVpltFMzy8H3eBYBw8oZv8KUfFZtHYClzrl9SccXJbx+SMwsz8xqALlAnpnVMLPcFOspkqhc7TY2JDQLGGlmNc3sAuAk4Pm01VSyVbk/W/WZKSE6lBzgcaA50L+E8wOn5LNqa4hfDZxsa8Lrh+q3wC5g7KSAXgAACE1JREFUKHBrrDy4IpUTKcWhtNsr8X/BbwEewH9wbq7c6okcUhvVZ6aEpVztNDYMPxzfE7rZzApiXz+orIppzmfVd7Cu80PuVo9tEzKyopURKadytVvn3CYgv/KrI/IN5W2jI9FnpoSnzHbqnPsMsPRUx1PPZ9W2hZJ7N4+IPZb0F5FI2NRuJerURiUTRLadKvms2j4A2plZcg/38bHHxWmuj0h5qN1K1KmNSiaIbDtV8lm1zcDvedg76fgQYC0wN+01Eimb2q1EndqoZILItlPN+cxQZtYNqA3UjR1qb2Z9YuXZzrmdzrmXzexV4DEzqwesAC4GugKXaB86STe1W4k6tVHJBJneTnVv9wxlZquAlqW83No5typ2Xh3gLqAffp7HMmC0c+65NFRT5GvUbiXq1EYlE2R6O1XyKSIiIiJpozmfIiIiIpI2Sj5FREREJG2UfIqIiIhI2ij5FBEREZG0UfIpIiIiImmj5FNERERE0kbJp4iIiIikjZJPEREREUkbJZ8iIiIikjZKPkWkyjKzoWbmzKxVOt9bGczs3Fh9zk049jczKyjHe1eZ2YuVWsFDYGZPm9n/hXTtYWa2xsxqh3F9EVHyKSJSmpeAM4B1YVckZgG+PgvCrkgqzKwjMAT4bUhVGAvsAG4K6foiWU/Jp4hICZxzm5xz/3HO7Q67LgDOue2x+mwPuy4p+g0wzzn33zAu7pzbBzwOXGNmtcKog0i2U/IpIlnFzM43s1lm9oWZFZrZCjN73MwaJZ33jWF3M3vDzBab2alm9qaZ7TSzT8zsN2aWk/T+emZ2n5l9amZ7YkO9DyYP98au8YiZjTCz5Wa228yWmNmApPO+Mexeyvf3fTPbbGYvHmxo2cyuNLN9ZnbHweKbWavY8aEJx9qY2XNmtjZW3w1mNsfMTiqjbk2BnsAzScdLnOJQylSD+L/BGWb2tpntik0ruCz2+k/MbEHs3+YDM+taQlUmAPWAASW8JiKVLC/sCoiIpNm3gXeAp4BtQCvgOuAtMzveObe3jPc3wycvfwTuwCdTo4G1wDiAWI/aP4GjgD8Ai4DjgN8Dx5tZF+ecS4h5IXAecBt+SPhKYKKZ7XPOTS3vN2Zm/WJ1eBr4hXOuqIRzDLgX+CUw3Dn3t/LGTzAbyMUPXa8GGgFnAg3KeN+PgMOA1ytwzUTNgDHAPcAXwC+Ap83saKAP/me+Df/znGlmbZxza+Nvds6tN7NlwE/wPysRSSMlnyKSVZxzf4mXY4nY28AbwGdAN+D5MkI0BPKdc/Niz1+L9cwNJJZ84hO7E4DTE4aX55jZGmAq0BV4OSFmI+BU59yGWL1mA4vxSW25kk8z+zVwF3CLc+6eUs6pie917AJ0c87NKU/spBgNge8Av3LOjU94aXo53n4GsAtYdqjXTdIQ+LFz7t1Ynf4LbMQP6beNJ5pmthZ4D+gNPJwUYwH+5yAiaaZhdxHJKmbWxMz+YmafA/uAvfjEE6BdOUKsT0g84xYBLROeX4BPHt8zs7z4F/AK4IBzk94/J554AsR6LCcBbc3sqLK/JXsc3ws7sLTEE5+w/QM4DTirIolnzFZgJXCjmV1nZh2TpxwcRAtgU1Kvb0WsiyeeAM65rfjk873EHk5gaewx8d8mbiPQJPbvIiJppORTRLJGLEn6O9ALP2TbGZ+MfS92Ss1yhNlSwrHdSe9tiu/53Jv09RVg+J7OROtLiBk/1rCM+lQD+gMf8vXe1GTHAqcDLzvnFpcRs1SxxLEzPpG+Cd+DuMnM/mRmdct4e02gsKLXTrC1hGN7ko875/bEijVKOL8Q/29R0msiUon0F5+IZJMOwInAUOfc2PhBM2sb8HU244eXLz/I64malXBO/FhJyW6i3fj5oq/gpwB0dc79r4Tz3gGmAH/1sw34uXNuf8Lr8aSwetL7khNlnHOfAcMAzOxYoB8wEp8I/+wgdd0MnHyQ15N/J9U5yLmpOgLY7Zwrc59UEQmWej5FJJvEh3uTt08aEfB1XsQvbNrinPtvCV+rks7vHFsJDoCZ5eJ7M1c6574o62LOuYXAOfgFTm+YWZNSzhuLX+F9GTAudp24eJ1OSHrbhWVce7lzbhTwAQdPLMHP9WxoZvVLef3EpOdnlREvFW2AJZUYX0RKoZ5PEckmy/DzFe+OLTbaCnQHzg/4Og/iF7n8y8wewM8JzQG+hV/x/Ufn3NyE8zcD/zCzOyle7f5dDmErIOfcUjP7AfBa7LpdSkpcnXNTzWwnfiFTTTO72Dm3J7YC/DXgZjP7H34ebGf8FIUDzOwE4BF8L+rH+OHuH+KT1rvLqOYb+KHu0/HTH5Ldb2b1Ytf+Pv7nAPBjM1vrnFte5g+iHGLTL04D/hpEPBE5NOr5FJGsEdtGqTuwHL/R+ESgCQGvenbO7QB+APwNuAJ/t6TJ+FXwX1Dcyxj3PD6hGwVMw2//NMg5N+kQr/tJ7LoOeNPM2pRy3mwgH58Iz4qtggcYDMwB/h8+uTwSuDjp7evxCfyV+AR2Fv5nej1+a6OD+Tf+e7+olNf/gF+x/jI+6e2G343gKvwK+6CcC9THb5klImlmqS86FBGRijIzBzzqnLs67Lqkg5ldD9wKHOmc2xU7NhS/b2frEqYkVEYdngHaOOe+X9nXEpFvUs+niIik06P4DeCvCuPiZvZt/HzaX4dxfRFR8ikiImnknCvED+8nL/pKl28BVzvn3grp+iJZT8PuIiIiIpI26vkUERERkbRR8ikiIiIiaaPkU0RERETSRsmniIiIiKSNkk8RERERSRslnyIiIiKSNko+RURERCRtlHyKiIiISNoo+RQRERGRtFHyKSIiIiJp8/8BVJBOlgCgqMEAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from numpy import exp, geomspace\n",
"from scipy.constants import micro, c, h, k\n",
"\n",
"# λ on lainepikkus või lainepikkuste vektor [µm], T on temperatuur [K]\n",
"def planck(λ, T):\n",
" λ = λ * micro\n",
" a = exp(h * c / (λ * k * T)) - 1 # abimuutuja\n",
" return 2 * pi * h * c**2 / λ**5 / a * micro\n",
"\n",
"x = geomspace(0.1, 100, 200) # 0.1 kuni 100 µm, 200 punkti\n",
"\n",
"figure(figsize=(6,4), dpi=120)\n",
"for temp, värv in zip( (400, 1000, 3000), ('b', 'g', 'r') ):\n",
" plot(x, planck(x, temp), '-', color=värv, label='T=%.0f K' % temp)\n",
"\n",
"xlabel('lainepikkus (µm)')\n",
"ylabel('kiirguse intensiivsus\\nW m$^{-2}$ µm$^{-1}$')\n",
"ylim(ymin=1)\n",
"xscale('log')\n",
"yscale('log')\n",
"legend()\n",
"grid()\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"NumPy massiivide [indekseerimine](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) on väga paindlik. Üldjoontes toimib see samuti nagu Pythoni jadade korral, aga on ka hulk lisavõimalusi. Näiteks, kui `A` on 2D massiiv, siis `A[2,5]` tagastab 3-nda rea 6-nda veeru elemendi (indekseerimine algab nullist), `A[2,:]` ehk `A[2]` tagastab 3-nda rea tervikuna (1D massiivina), `A[:,5]` tagastab 6-nda veeru, `A[:4,:]` ehk `A[:4]` tagastab esimesed 4 rida, `A[:,-2:]` tagastab viimased 2 veergu, jne. Kui `A` on 1D massiiv ja `I = [2,4,7]`, siis `A[I]` tagastab elemendid indeksitega 2, 4 ja 7, `A[0::2]` tagastab kõik paarituarvulised elemendid ja `A[1::2]` kõik paarisarvulised elemendid (viimane komponent nurksulgudes määrab sammu). Enamikel juhtudel nende operatsioonidega ei tekitata mitte koopiat massiivi elementidest, vaid tagastatakse vastav *vaade* (*view*) algsele massiivile. Samal viisil saab massiivi elemente või terveid alam-massiive üle kirjutada. Toimib ka massiivi \"lahtipakkimine\", näiteks kujul `a,b,c=A`, kui massiivi `A` pikkus esimese mõõtme sihis on 3.\n",
"\n",
"Massiivi mõõtmete teadasaamiseks on hulk võimalusi. Sarnaselt jadadele `len(A)` tagastab massiivi `A` pikkuse. Mitmemõõtmelise massiivi korral on tulemuseks massiivi pikkus esimese mõõtme sihis, mida võib tõlgendada kui ridade arvu. Atribuut `A.size` sisaldab elementide koguarvu massiivis. Kõige detailsemat infot annab `A.shape`, mis sisaldab ennikuna massiivi kõiki mõõtmeid. NumPy massiivide üks omapära on see, et massiivi \"kuju\" ei ole kindlalt fikseeritud. Kindel on vaid elementide arv massiivis (mis on kõik arvuti mälus ühe sidusa rivina), aga mitmeks reaks, veeruks või veel kõrgemaks mõõtmeks need elemendid jaotuvad, on juba tõlgendamise küsimus. On lubatud atribuudile `shape` omistada mingi muu arvukombinatsioon, tingimusel et nende arvude korrutis endiselt võrdub elementide koguarvuga (`size`) massiivis. Sama teeb meetod `reshape`. Oletagem näiteks, et eespool kirjeldatud takistuse mõõtmise katseandmed on lihtsuse huvides sisestatud 1D massiivina, kus pinge ja voolu väärtused on vaheldumisi. 2D massiivi saab sellest järgmiselt:"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.5 41. ]\n",
" [ 1. 83. ]\n",
" [ 1.5 125. ]\n",
" [ 2. 166. ]\n",
" [ 2.5 207. ]\n",
" [ 3. 248. ]\n",
" [ 3.5 291. ]\n",
" [ 4. 332. ]]\n"
]
}
],
"source": [
"andmed = np.array( (0.50, 41, 1.00, 83, 1.50, 125, 2.00, 166,\n",
" 2.50, 207, 3.00, 248, 3.50, 291, 4.00, 332) )\n",
"\n",
"andmed = andmed.reshape(-1, 2)\n",
"print( andmed )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin nõutud ridade arvuks on märgitud `-1`, mis tähendab, et see arvutatakse automaatselt. Paaris- või paarituarvulistest elementidest saaks andmevektorid koostada ka massiivi indekseerimise teel, nagu kirjeldatud eespool."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Reprodutseerige ühes eelnevas ülesandes mainitud Lissajous' kujundite joonis NumPy massiivide abil.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numbrilised algoritmid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lisaks andmemassiividele sisaldab NumPy ka hulga kasulikke funktsioone, kuid enamus numbrilisi algoritme on koondatud omaette paketti [SciPy](http://docs.scipy.org/doc/scipy/reference/) (*Scientific Python*). Nimetatud teekidest võib leida vahendeid lineaaralgebra, statistika, interpoleerimise, optimeerimise, diferentsiaalvõrrandite, signaalitöötluse jm probleemide lahendamiseks. Vaatleme siin vaid paari näidet: regressioonsirge sobitamist läbi katsepunktide ja transtsendentse võrrandi lahendamist.\n",
"\n",
"Sirge on 1. järku polünoom, ja suvalist järku polünoomi sobitab vähimruutude mõttes läbi andmepunktide funktsioon `numpy.polyfit`. See tagastab NumPy massiivina optimaalse polünoomi kordajad. Sirge $y=ax+b$ korral võib kordajad kohe lahti pakkida eraldi muutujatesse (tõus $a$ ja algordinaat $b$), aga üldjuhul saab polünoomi väärtuse arvutada mugavalt funktsiooniga `numpy.polyval`, mis tahab kõik kordajad ühe massiivina.\n",
"\n",
"Mõõtemääramatuse simuleerimiseks saab juhuslikke arve mooduli `numpy.random` vahenditega, näiteks `randn(n)` tekitab standardnormaaljaotusega juhuslike arvude vektori pikkusega `n`. Juhul kui me tahame saadud juhuslike arvude järjestust (ja seega kogu arvutust) hiljem täpselt reprodutseerida, tuleks eelnevalt ka juhuslike arvude generaator algväärtustada mingi kindla \"seemnega\", kasutades funktsiooni `numpy.random.seed`."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmYAAAGdCAYAAAC4kb/NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASdAAAEnQB3mYfeAAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd3hUVf7H8fchDC0h0iQogkgHe4toFEEXUUHFvpZd/NkBxYaCghBAIGJHwe5aWV37Cii4CqhRCDYEFlZAAdeVgFJCQpuE8/vjZJgkpM1MJnMn+byeJ0+SM2fmnswJ5uO9536PsdYiIiIiIrFXJ9YDEBERERFHwUxERETEIxTMRERERDxCwUxERETEIxTMRERERDxCwUxERETEIxTMRERERDxCwUxERETEIxTMRERERDxCwUxERETEI+rGegChMsbsB5wK/ALsjvFwRERERMpTD2gDzLfWbq2oc9wFM1woez/WgxAREREJwXnAPyvqFI/B7BeA9957j44dO0blALm5uWRlZZGamkpSUlJUjiGh07x4j+bEmzQv3qM58abqmJdVq1YxYMAAKMwvFYnHYLYboGPHjhx66KFROUBOTg7r16+nW7duJCcnR+UYEjrNi/doTrxJ8+I9mhNvquZ5qdTyKy3+FxEREfEIBTMRERERj1AwExEREfEIBTMRERERj1AwExEREfEIBTMRERERj1AwExEREfGIeKxjJiIiItXE74fMTNi0CZo1g7Q08PliPaqaS8FMRERE9uH3Q0YGTJ0K2dnB9latYPBgGDFCAS0aFMxERESkGL8fBgyAWbPAmOKPZWfD6NGwcCG8+67CWVXTGjMREREpJiPDhTIAa4s/Fvh+5ky4//7qHVdtoGAmIiIie/n97vJlyTNlJRnj+vn91TOu2kLBTERERPbKzHSXK0ueKSvJWli/3vWXqqNgJiIiIntt2hTd/lI+BTMRERHZq1mz6PaX8imYiYiIyF5paZCSUrk1Zq1auf5SdRTMREREZC+fD4YMqdwasyFDVC6jqimYlSIxMZHevXuTmJgY66FIEZoXEZHqMWIE9Ovnvi555izwfb9+MHx49Y6rNlAwK0VCQgLJyckkJCTEeihShOZFRKR6+HyueOz48e6yZlEpKa5dxWWjQ5X/RUREZB8+H4wa5c6Kaa/M6qNgJiIiImXy+aBXr1iPovbQpUwRERERj1AwExEREfEIBTMRERERj1AwExEREfEIBTMRERERj1AwExEREfEIBTOP+vTTT7n66qvp2rUriYmJtG7dmvPOO49vvvkm6s9/7rnnMMaQlJRUrP3777+nX79+tG3bloYNG9KsWTNOPPFEXn311bB+xmj57rvvGDBgAAceeCCNGjWia9eujBs3ju3bt1f43Hnz5mGMKfVjwYIF5T63rPcNICsri759+9K4cWOSkpLo3bs3mZmZYf+MIiJSM6mOmUc9+eST/PHHH9xyyy10796djRs38tBDD9GjRw9mz57NaaedFpXn//rrrwwbNowDDzyQrVu3Fntsy5YttGnThssuu4zWrVuTl5fHa6+9xl/+8hfWrFnDqFGjquznD9e///1vTjrpJLp06cKjjz5KixYt+Oyzzxg3bhzffPMN77//fqVeZ+LEifTu3btY22GHHVZm//Let0WLFtGzZ09SU1N55ZVXsNYyefJkTj/9dObOncuJJ54Y+g8qIiI1k7U2rj6AQwG7dOlSW5NlZ2fv07Zt2zabkpJiTz/99Kg9v3///vacc86xAwcOtImJiZUa6wknnGDbtGlTqb6hOvXUU+3AgQMr3X/kyJEWsKtWrSrWfv3111vAbtq0qdznz5071wL2zTffDGmc5b1vffv2tSkpKTYvL29vW05Ojm3RooU96aSTQjqO12zdutW+9957duvWrbEeihShefEezYk3Vce8LF261AIWONRWIufoUmYFLrjgAg466KB92vPz8znqqKPo06dPVI7bsmXLfdqSkpLo3r07v/zyS1Se/+qrrzJ//nymTZsW0lhbtGhB3brFT77+9ttvJCUl8ec//7lY+4wZM/D5fIwcOTKkY1SWr3CfkP32269Ye5MmTahTpw716tWr8mNW9L5lZmbSq1cvGjVqtLetcePG9OzZky+//JLffvutysckIiLxScGsAj179uTXX39l7dq1xdoffvhhVqxYUeofY2st+fn5lfoIxdatW/n222859NBDw/pZynv+hg0buPXWW8nIyCg1iBa1Z88e8vPz2bhxI9OmTWP27NkMHz68WJ8DDjiAu+66i3/84x9717XNmzePiy++mEGDBjFhwoSwfoaKDBw4kCZNmjBo0CB++ukntm3bxowZM3j66acZMmQIiYmJlXqdIUOGULduXZKTk+nbty9ffPFFqf0q877t3r2b+vXr79MeaFuyZEklfzoREanpFMwq0LNnTwC+/PLLvW0///wzY8eOZeTIkXTq1Gmf58yfPx+fz1epjzVr1lR6LEOGDCEvLy/ss03lPX/w4MF06dKFQYMGVfg6gwcPxufz0bJlS2677TamTJnCDTfcsE+/YcOGccABBzB8+HAWLVrEueeey2WXXcZjjz1W6uuWFmgDp3YrG2jbtWvHV199xdKlS+nQoQPJycmcc845DBw4sMzjFrXffvtxyy238PTTTzN37lwee+wxfvnlF3r16sXs2bNLfS8qet+6d+/OggUL2LNnz962/Px8Fi5cCMAff/xR4bhERKSWqMz1zpIfwGnAC8AKIA/4FXgfOLaUvscA/wJygS3AO0D7cI5rY7DGrKCgwCYnJ9shQ4bsbevbt6/t0qWL3bVrV6nPycnJsYsWLarUR1mvUdKoUaMsYB9//PGwfo7ynv/WW2/ZevXq2WXLlu1tK2+N2dq1a+2iRYvszJkz7Y033mjr1KljH3jggVL7vvDCCxawiYmJ9pJLLrH5+flljjGwvqsyHz///HOpr/Hzzz/bjh072rS0NPvWW2/Z+fPn28mTJ9vk5GR79dVXl/MOlW3z5s32oIMOskcccUSx9sq+b88//7wF7KBBg+x///tfu27dOnvNNdfYhIQEC9jXX389rHF5gdbNeJPmxXs0J97kxTVm4YajN4FPgUHAqcBFwFeAHzitSL+uQA7wGXA2cAGwtDDI7R/msat98f+ZZ55pjz76aGutta+++qoF7Ny5c8vsv2fPHuv3+yv1URnp6ekWsBMmTAhr/OU9P3BDwB133GE3b9689+Oyyy6ziYmJdvPmzTY3N7fc17/xxhtt3bp17YYNG/Z57IsvvrCATUpKstu3by/3dUoLtMccc4zt379/pQPtpZdealu2bLnPmAMBcd68eeWOobyfEdj7M4T6vmVkZNikpKS9wfLEE0+0w4cPt4D9/PPPwxqTF+iPjTdpXrxHc+JNNSmYtSylLQlYD/yrSNs/gI1AcpG2g4HdwP1hHrvag9nEiRNtQkKCXbt2rW3ZsmWFdwlWxZmfgECoSk9PD2vsFT3/559/rnCM5513XrnHCISeBQsWFGv/7rvvbJMmTWxaWpoF7BNPPBHy+EO9K7NLly62V69e+7QvWbIk7DFYa+0NN9xgAbtjxw5rbXjv286dO+2SJUvsmjVrrLXuTtHExMQKA6uX6Y+NN2levEdz4k1eDGZh1TGz1m4opS3XGPNvoA2AMaYu0B942VqbU6TfWmPMXOB8YHjJ1/Ginj17UlBQQP/+/SkoKODBBx8st/+xxx7LokWLKvXaBx54YJmPjR8/nvT0dEaNGsWYMWNCGnNln9+qVSvmzp27T3tGRgbz58/nww8/pEWLFuUeZ+7cudSpU4f27dvvbfvPf/5D3759OfHEE3n//fe5+OKLSU9P58orr9znjsmqdOCBB7J06VJyc3OLFXr96quvACq8saE0mzdvZsaMGRx11FE0aNAACO99q1+//t5aaOvWreONN97guuuuo2HDhiGPSUREaqYqKzBrjNkPt57s08KmDkBD4IdSuv8A9DHGNLDW7qyqMUTL8ccfT8OGDVmyZAkvvPBChUGlcePGHHfccREd86GHHmL06NGceeaZ9OvXb5+q8z169Nj79fz58zn99NMZPXo0o0ePDun5DRo0oFevXvsc/8UXXyQhIaHYY9dffz3JycmkpqaSkpLC77//zptvvskbb7zBnXfeyf777w/AmjVr+NOf/kSXLl14++238fl8ZGRkcNhhhzFx4kTuv//+iN6b8tx6660MGDCAPn36cNttt9GiRQsWLFjApEmT6N69O2edddbevqW9b5dffjlt27bluOOOo0WLFqxcuZKHHnqI7OxsXnzxxb3PDeV9W7p0KW+//TbHHXcc9evXZ/HixWRkZNCpUyfGjx8frbdCRETiUFVW/p8KJAKBOgjNCz9vKqXvJsAATYEyizgZY1oC+5do7gCQm5tLTk7Ovk8KQWJiIgkJCRX2q1OnDk2bNuW4447jqquuiuiYlfXBBx8A8NFHH/HRRx/t87h1l3X3fl1QUFDsrr9Qnl9ZJ554In/729946aWX2LJlC0lJSRx55JG88sorXHnllYCrX/anP/2Jli1bMmPGjL1ng7p27crVV1/NY489xqBBg2jXrl3Ix6+Mc889l08++YSMjAxuueUWtm7dSps2bbjhhhu4++67i9UxK+19O+KII3jjjTd46qmnyM3NpVmzZpx88sm88sorHH/88WGNqV69enz66adMmTKF3Nxc2rZty4033siIESMqXb6joKCAvLy8sI4fTYExeXFstZnmxXs0J95UHfOSm5sbUn8Tzh/o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\n",
"text/plain": [
"
Harjutus. Simuleerige analoogilisel viisil müraga andmepunktid, mis sirge asemel järgiksid sõltuvust $y=-0.7x^3+5x^2-8x+6$. Veenduge, et polyfit suudab teatud täpsusega tuvastada algse polünoomi kordajad, ja joonestage sile (st peenema sammuga) lähendusfunktsioon samale graafikule.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Eespool me realiseerisime lihtsa algoritmi suvalise mittelineaarse võrrandi (näiteks $e^{-x}=x$) lahendamiseks. Moodulis `scipy.optimize` on hulk funktsioone, mis teevad sama töö (enamasti keerukama, aga efektiivsema algoritmiga). Igasugused mittelineaarse optimeerimise algoritmid vajavad alglähendit (või vahemikku), millest startida. Kui näiteks võrrandil on mitu lahendit, siis erinevad alglähendid võivad viia erinevate tulemusteni."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"nullkoht = 0.5671432904\n",
"funktsiooni väljakutseid: 7\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
Harjutus. Leia vähemalt kaks erinevat lahendit võrrandile $\\tan(x)=1/x$. Sobivad alglähendid saab leida graafiliselt.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Failide lugemine-kirjutamine"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Arvutusteks vajalikud lähteandmed (nt mõne teadusaparaadiga mõõdetud tulemus) asuvad sageli failis pika arvumassiivina. Kõige lihtsam inimloetav failiformaat on selline [struktureeritud tekstifail](https://en.wikipedia.org/wiki/Delimiter-separated_values), kus iga kirje on ühes reas ja väljad (st arvutulbad) on eraldatud tühiku, tabulatsioonisümboli või komaga.\n",
"\n",
"Esmalt kasutame elementaarseid Pythoni vahendeid ja loeme sellise faili sisu järjendisse. Käsk `open` avab faili lugemiseks (`'r'`), kirjutamiseks (`'w'`) või lisamiseks (`'a'`) ja tagastab `file`-tüüpi objekti. Viimasel on mitmesuguseid meetodeid teksti lugemiseks failist või kirjutamiseks faili. Näiteks meetodiga `readline()` loetakse järgmine rida failist (seejuures, faili lõppu jõudmisel tagastatakse tühi sõne). Pärast töö lõppu tuleks fail sulgeda meetodiga `close()`.\n",
"\n",
"Faili lugemisel saab `file`-tüüpi muutujat käsitleda kui tekstiridade jada. Seega WHILE-tsüklisse kätketud `readline()` asemel võib kirjutada lihtsalt FOR-tsükli:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"failist loeti 4592 rida\n",
" 380.66 0.000020\n",
" 380.73 0.000013\n",
" 380.79 0.000009\n",
" 380.86 0.000006\n",
" 380.92 0.000004\n"
]
}
],
"source": [
"tabel = []\n",
"f = open('spekter.txt', 'r')\n",
"for rida in f:\n",
" sõnad = rida.split()\n",
" arvud = tuple( float(s) for s in sõnad )\n",
" tabel.append( arvud )\n",
"f.close()\n",
"\n",
"print('failist loeti %d rida' % len(tabel))\n",
"for rida in tabel[:5]:\n",
" print( '%7.2f %10.6f' % rida )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sõnemeetod `split(s)` tagastab järjendi kõigist \"sõnadest\" stringis, kasutades sõnade eraldamiseks stringi `s`. Vaikimisi on eraldajaiks tühiku või tabulatsioonisümbolid (*whitespace*). Seejuures ei ole vahet kas sõnad on üksteisest eraldatud ühe või mitme eraldusmärgiga.\n",
"\n",
"Käsuga `float(x)` antakse mõista, et objekt `x` (ükskõik mis tüüpi see on) tuleks püüda teisendada ekvivalentseks ujukomaarvuks (st tüüpi `float`). Kui `x` on näiteks täisarv, siis operatsioon `float(x)` on alati edukas. Kui aga `x` on sõne, siis see peab sisaldama ujukomaarvu tekstina (nt `0.0025` või `2.5e-3`), vastasel korral tekib programmiviga. Seega tekstirea konverteerimine arvujadaks ei pruugi tingimata õnnestuda, eriti kui failis esineb vigu, päiseridu, kommentaare, vms. Veakontrolli saab realiseerida TRY…EXCEPT-konstruktsiooniga. Funktsioon `sys.stderr.write` võimaldab veateate spetsiaalsel kujul välja trükkida."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"failist loeti 4592 rida\n",
" 380.66 0.000020\n",
" 380.73 0.000013\n",
" 380.79 0.000009\n",
" 380.86 0.000006\n",
" 380.92 0.000004\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Vigases formaadis rida: andmed algavad siit\n",
"Vigases formaadis rida: faili l6pp"
]
}
],
"source": [
"import sys;\n",
"\n",
"tabel = []\n",
"with open('spekter2.txt', 'r') as f:\n",
" for rida in f:\n",
" sõnad = rida.split()\n",
" try:\n",
" arvud = tuple( float(s) for s in sõnad )\n",
" except:\n",
" sys.stderr.write( 'Vigases formaadis rida: ' + rida )\n",
" continue\n",
" tabel.append(arvud)\n",
"\n",
"print('failist loeti %d rida' % len(tabel))\n",
"for rida in tabel[:5]:\n",
" print( '%7.2f %10.6f' % rida )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui TRY-plokis tekib viga, siis programmi täitmine sellel kohal katkeb ja luuakse *erind* (*exception*), st spetsiaalne objekt, mis sisaldab infot vea kohta. Erind \"püütakse kinni\" EXCEPT-plokis, kus saab siis otsustada, mida edasi teha (antud juhul trükitakse veateade ja käsuga `continue` suunatakse täitmisjärg uuesti tsükli algusesse). Kui viga ei teki, siis EXCEPT-plokki üldse ei siseneta.\n",
"\n",
"WITH-lausega tagatakse, et fail suletakse automaatselt, seda isegi juhul kui WITH-plokis peaks tekkima programmiviga. Alternatiivselt võiks kasutada TRY ja FINALLY plokke, kus viimases paikneks `f.close()`.\n",
"\n",
"Andmete kirjutamine faili on täiesti analoogne. Kirjutame faili näiteks raporti eespool simuleeritud elektrimõõtmise andmetega. `file`-objekti meetod `write` kirjutab etteantud sõne faili, kuid reavahetuse sümbolit automaatselt ei lisa, selle tõttu sõne ise peab sisaldama reavahetuse sümbolit `\\n`. Faili avamisel saab seadistada ka teksti kodeeringu. Kui on teada, et fail võib sisaldada ASCII kooditabelisse mittekuuluvaid sümboleid (kasvõi täpitähti), tuleks ASCII asemel kasutada mõnda [Unicode](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) kodeeringut (näiteks UTF-8, mis on kõige levinum)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"andmed = ((0.5, 41),\n",
" (1.0, 83),\n",
" (1.5, 125),\n",
" (2.0, 166),\n",
" (2.5, 207),\n",
" (3.0, 248),\n",
" (3.5, 291),\n",
" (4.0, 332))\n",
"\n",
"with open('andmed.txt', 'w', encoding='utf8') as f:\n",
" f.write( '%10s%10s%14s\\n' % ('pinge (V)', 'vool (A)', 'takistus (Ω)') )\n",
" for rida in andmed:\n",
" u, i = rida\n",
" i *= 1e-3\n",
" r = u / i\n",
" f.write( '%10.2f%10.3f%14.2f\\n' % (u,i,r) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Faili `andmed.txt` sisu näeb nüüd välja selline:\n",
"\n",
"```\n",
" pinge (V) vool (A) takistus (Ω)\n",
" 0.50 0.041 12.20\n",
" 1.00 0.083 12.05\n",
" 1.50 0.125 12.00\n",
" 2.00 0.166 12.05\n",
" 2.50 0.207 12.08\n",
" 3.00 0.248 12.10\n",
" 3.50 0.291 12.03\n",
" 4.00 0.332 12.05\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Täienda failist lugemise algoritmi nii, et see toimiks ka juhul kui kümnenderaldaja on koma (mitte punkt). Kasulikuks võib osutuda sõnemeetod replace(vana, uus), mis asendab kõik alamsõned vana sõnega uus.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"NumPy ja Pandas loevad/kirjutavad faili sisu ühe käsuga. Lihtsaim on funktsioon `numpy.loadtxt`, mis vaikimisi eeldab, et andmeveerud on eraldatud tühiku- või tabulatsioonisümbolitega (*whitespace*). Kümnenderaldaja peab olema punkt."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"failist loeti 4592 rida\n",
"[[3.8066e+02 1.9606e-05]\n",
" [3.8073e+02 1.2948e-05]\n",
" [3.8079e+02 8.8751e-06]\n",
" [3.8086e+02 6.2632e-06]\n",
" [3.8092e+02 4.4803e-06]]\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"tabel = np.loadtxt('spekter.txt')\n",
"ridu, veerge = tabel.shape\n",
"print('failist loeti %d rida' % ridu)\n",
"print( tabel[:5] )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nagu enne Pythoni järjendis, on ka siin andmed ridadekaupa. Massiivi transponeerimise teel (või lisades funktsioonile `loadtxt` parameetri `unpack=True`) saame arvutulbad eraldada, et teostada nendega arvutusi või teha graafik:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAAFYCAYAAABklfsHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASdAAAEnQB3mYfeAAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeZwcdZ3/8ddnziQzmZCEhDNc4QqHyuHgCgjDoaC4XMqaLCtRFBB/HrjseosiouKugu6CFyKLgIrLocshQQc8gDRyg+EIkASSTEISkslMkplM5vv749uVrulUz3RPV1fXzLyfj0c/qqau/nZ/p2Y+/elPfcucc4iIiIiISGXVVLsBIiIiIiJjgQJvEREREZEEKPAWEREREUmAAm8RERERkQQo8BYRERERSYACbxERERGRBCjwFhERERFJgAJvEREREZEEKPAWEREREUmAAm8RERERkQTUVbsBaWZmk4BjgFeB3io3R0RERETSpQGYATzgnFs31MYKvAd3DHBHtRshIiIiIql2KvDboTZS4D24VwFuv/129t5772q3JRW6urrIZDK0trbS3Nxc7eYI6pM0Up+kj/okfdQn6aM+Kd3ChQs57bTTIBszDkWB9+B6Afbee28OPPDAarclFTo7O+no6GDWrFm0tLRUuzmC+iSN1Cfpoz5JH/VJ+qhPylJUSbIurhQRERERSYACbxERERGRBCjwFhERERFJgAJvEREREZEEKPAWEREREUmAAm8RERERkQQo8BYRERERSYACbxERGdGcq3YLRESKo8BbRERGrAULYMYMmDu32i0RERmaAm8RERmxzjoLli6F66+H9eur3RoRkcGlLvA2s4lmdoWZ3Wtmr5uZM7OvDvNYl2X3fybmZoqISAosXpybV8mJiKRd6gJvYCpwHtAI3D7cg5jZW4CLgRUxtUtERFImHGybVa8dIiLFqKt2AyIsBiY755yZbQ98pNQDmFkdcB3wI+DNwPbxNlFERNJAWW4RGUlSl/F2WWUe5nPAFOCLMTRJRERSKvzfQkG4iKRdGjPeZTGzA4AvAWc457pM3z2KiIxa4WC7v7967RARKcaoCrzNrAb4GXCrc+6uEvedDkzLWzwToKuri87OzngaOcJ1d3cPmEr1qU/SR32SHOcmAj7Bsm5dJzUFvsdVn6SP+iR91Cel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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.pyplot import *\n",
"\n",
"X, Y = tabel.transpose()\n",
"\n",
"figure(figsize=(7,3), dpi=120)\n",
"plot(X, Y, 'b-')\n",
"xlabel('lainepikkus')\n",
"ylabel('signaal')\n",
"grid()\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tabuleeritud andmete haldamiseks ja analüüsiks on olemas ka spetsiaalne teek Pandas (mis on ehitatud NumPy peale). Näiteks faili sisu kuvamine ilusti kujundatud andmetabelina:"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
pinge (V)
\n",
"
vool (mA)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1
\n",
"
0.5
\n",
"
41
\n",
"
\n",
"
\n",
"
2
\n",
"
1.0
\n",
"
83
\n",
"
\n",
"
\n",
"
3
\n",
"
1.5
\n",
"
125
\n",
"
\n",
"
\n",
"
4
\n",
"
2.0
\n",
"
166
\n",
"
\n",
"
\n",
"
5
\n",
"
2.5
\n",
"
207
\n",
"
\n",
"
\n",
"
6
\n",
"
3.0
\n",
"
248
\n",
"
\n",
"
\n",
"
7
\n",
"
3.5
\n",
"
291
\n",
"
\n",
"
\n",
"
8
\n",
"
4.0
\n",
"
332
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" pinge (V) vool (mA)\n",
"1 0.5 41\n",
"2 1.0 83\n",
"3 1.5 125\n",
"4 2.0 166\n",
"5 2.5 207\n",
"6 3.0 248\n",
"7 3.5 291\n",
"8 4.0 332"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"tabel = pd.read_table('andmed.txt')\n",
"tabel.index += 1 # muidu algavad reanumbrid 0-st\n",
"tabel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tulemuseks on `pandas.DataFrame` objekt. Veergude nimed võeti seekord automaatselt faili päisest. Kui anname ise tulpadele nimed, siis päiseread tuleks vahele jätta:"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
x
\n",
"
y
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1
\n",
"
0.5
\n",
"
41
\n",
"
\n",
"
\n",
"
2
\n",
"
1.0
\n",
"
83
\n",
"
\n",
"
\n",
"
3
\n",
"
1.5
\n",
"
125
\n",
"
\n",
"
\n",
"
4
\n",
"
2.0
\n",
"
166
\n",
"
\n",
"
\n",
"
5
\n",
"
2.5
\n",
"
207
\n",
"
\n",
"
\n",
"
6
\n",
"
3.0
\n",
"
248
\n",
"
\n",
"
\n",
"
7
\n",
"
3.5
\n",
"
291
\n",
"
\n",
"
\n",
"
8
\n",
"
4.0
\n",
"
332
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" x y\n",
"1 0.5 41\n",
"2 1.0 83\n",
"3 1.5 125\n",
"4 2.0 166\n",
"5 2.5 207\n",
"6 3.0 248\n",
"7 3.5 291\n",
"8 4.0 332"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tabel = pd.read_table('andmed.txt', skiprows=1, names=('x', 'y'))\n",
"tabel.index += 1\n",
"tabel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Andmed tagastab NumPy massiivi kujul atribuut `values`.\n",
"\n",
"Funktsiooni `read_table` korral on andmeveergude eraldaja (parameeter `sep`) vaikimisi tabulatsioonisümbol (`\\t`), funktsiooni `read_csv` korral koma. On hulk võimalusi, mida `numpy.loadtxt` ei paku, näiteks kümnenderaldaja määramine (parameeter `decimal`), pakitud tekstifaili lugemine (parameeter `compression`), jms."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sümbolarvutus"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pakett SymPy võimaldab Pythoni keskkonnas teostada [sümbolarvutust](https://en.wikipedia.org/wiki/Symbolic_computation) umbes samal viisil nagu seda saab teha kommertsiaalsetes süsteemides [Maple](https://en.wikipedia.org/wiki/Maple_%28software%29) ja [Mathematica](https://en.wikipedia.org/wiki/Wolfram_Mathematica). Sümbolarvutus opereerib matemaatiliste sümbolitega, mis vaid *sümboliseerivad* teatud tüüpi arvulisi väärtuseid, kuid ei oma mingit konkreetset arvväärtust. Näiteks samasus $\\log ab=\\log a+\\log b$ kehtib sõltumata sellest, millised on $a$ ja $b$ konkreetsed väärtused, kuigi eeldusega et tegemist on positiivsete reaalarvudega.\n",
"\n",
"SymPy realiseerib hulga spetsiaalseid andmetüüpe matemaatiliste sümbolite, arvude ja operatsioonide kirjeldamiseks. On olemas põhjalik komplekt matemaatilisi funktsioone, mis on kõik \"teadlikud\" sümbolobjektidest. Selle baasil saab konstrueerida kuitahes keerulisi matemaatilisi avaldisi. SymPy andmetüüpide jaoks on aritmeetilistel operaatoritel spetsiaalne tähendus, nii et avaldised saab ikkagi enam-vähem loomulikul kujul kirja panna. Seejärel saab rakendada mitmesuguseid SymPy käske, näiteks avaldise teisendamiseks sobivale kujule, võrrandi lahendamiseks, summa või integraali arvutamiseks, jne.\n",
"\n",
"Sümbolarvutus on olemuslikult täpne, seega `float`-tüüpi ligikaudseid arve tuleks vältida. Reeglina piirdutakse täis- või ratsionaalarvudega. Kui on siiski vaja andmeid sisestada või saada tulemusi kümnendmurru kujul, kasutatakse selleks spetsiaalset, piiramata täpsusega andmetüüpi. Sellised andmetüübid vajavad muidugi rohkem arvutusressurssi."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sümbolid ja avaldised"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matemaatilisi sümboleid (muutujaid) esindab andmetüüp `sympy.Symbol`. Suurema hulga sümbolmuutujaid korraga saab luua käsuga `sympy.symbols`. Mõlemal juhul tuleb sümbolite nimed sõnena ette anda."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"sympy.core.symbol.Symbol"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sympy import *\n",
"v,g = symbols('v,g') # näiteks algkiirus ja raskuskiirendus\n",
"type(v)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siinjuures Pythoni vastavad muutujanimed ei pruugi üldsegi olla `v` ja `g`, aga enamasti pole mingit põhjust miks nad peaksid olema erinevad. Kui matemaatilised sümbolid ja vastavad muutujanimed ühtivad, siis saab kasutada käsku `var`, mis ise tekitab samanimelised muutujad globaalses nimeruumis.\n",
"\n",
"Sümbolmuutujaid saab nüüd matemaatiliste operatsioonidega kombineerida keerulisemateks avaldisteks. Täisarve esindab SymPy andmetüüp `Integer` ning ratsionaalarve andmetüüp `Rational`. Vajadusel tuleb igasugused täpsed arvulised tegurid esitada nende andmetüüpide kaudu."
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"v**2/(2*g)"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t = v / g\n",
"h = v * t - Rational(1,2) * g * t**2\n",
"h"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Käsuga `sympy.srepr` saab uurida, millistest komponentidest (SymPy objektidest) avaldis on konstrueeritud:"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"Mul(Rational(1, 2), Pow(Symbol('g'), Integer(-1)), Pow(Symbol('v'), Integer(2)))\""
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"srepr(h)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nagu siit võib aimata, kõik viis aritmeetilist tehet `+`, `-`, `*`, `/`, `**` taanduvad kolme SymPy klassi `Add`, `Mul` ja `Pow` kombineerimisele.\n",
"\n",
"Tavaliselt kohe pärast `sympy` importimist antakse käsk `init_printing()`, mille järel SymPy püüab vormindada väljastatavad tulemused nii ilusti kui võimalik (Jupyteri töölehel MathJax abil):"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABYAAAAzBAMAAABh++WNAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHaZ3WaJVO+rIkS7\nMs1BMAH/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABEElEQVQoFWNgAAM2G0MIA0hmMcyDs70Y7i+A\ncbwZ1m+AsRkY6gUQbCcEk80AwQ5GMLkTuC/AePfKa0B6hYwYRAL6//8HCSdUMLBMgMhzFZgwsCdA\n2IwMTQzcBRA2A/dHBiYok4HZgYENxuaZwFALY7M9YEyAsRmmhcKZNGb8RwDKbFpscxZmAOMEhvwN\nUA6nAANHA5TN4cDA+RfK5vuIYAOFWD4yMBQr1YAl9ycwsB3g+gxme4Jj6zuIzWzAwNDDwPsLxFZm\nYOD9ysDkAGSyGzCsYv3FwAOUZbjMwKDF/oGBHxjuXG5plg6MvxjmL2Bg4AP60YFhp1oKUAkMHIYx\neBkYf8PY+QLAGIGCyiBzIAsADFhBTptxrT8AAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\frac{v^{2}}{2 g}$$"
],
"text/plain": [
" 2\n",
" v \n",
"───\n",
"2⋅g"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"init_printing()\n",
"h"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Avaldiste teisendamine"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Järgnevalt loetleme mõningaid põhioperatsioone sümbolavaldiste teisendamiseks. Sulgavaldiste lahtikorrutamist jm sarnaseid operatsioone teostab `sympy.expand`, vastupidist operatsiooni viib aga läbi `factor`:"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHYAAAAWBAMAAADnfXV4AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpmJdu8QRM1mu90y\nVKvMIHo8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABu0lEQVQ4EZWSP0vDUBTFbxvyp7Qp0Q+gBUWk\ng9S6OAjWLq5OojgYBReXFsRNUBwkIIr4CaSDODhUVNxKcXKzg5NQ2qGDboqQIijxJffd21AV2jfk\nnpxzf7mP9wIQLCU9hqLnZ7Zky95JeOmZChoVK7kniSt4tPqC41biXQJ3MFzsjy1G2gw0bJa9CdPl\nvhtWPYp4jhqVFClZB9OXUm2udEVoZNk9ZYVCa8IsncBxVwa+EUuRq2f0KuonLEkb1AWZfstq5kLG\nFuzIt4f6s41SsmoZkl/o6HQoxPpG4qh+LtlVz5NKsobLrFKWEbG+oXreG0BkZHRRhn6RrFBxFzOj\nla8FDcSyAduWIb7Aq8PuZjArHGj4CxHLhrYM0TMmw3MrgJn4az6CBmLZiLrQueVpx7l1HLyTaAow\nGwdNsIrjHC45TlN8BQ0h1DMoVEWlxXvOU7YPOt4SzWWjkIEGcX4l1kzBAGaf/nx/EctGoQYXphVk\nwYPYe4A5zNqwcRJExLJh5GIVpYPS3Mj11EQZs1coYU4sG1prZmj+N2t4nlfGbD2PY3nPbISwQNKe\nu33xTnP/iNBa+zcBLXQsftcPGl9+pvSkZG4AAAAASUVORK5CYII=\n",
"text/latex": [
"$$a^{2} + 2 a b + b^{2}$$"
],
"text/plain": [
" 2 2\n",
"a + 2⋅a⋅b + b "
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('a,b')\n",
"expand( (a + b)**2 )"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEQAAAAbBAMAAAA35TSjAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIma7zZnddlTvRIkQ\nMqvFy5UvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABaElEQVQoFYWSP0sDQRDF34VLSHIXORAs5Qo/\nQBTTWSicIqJiIVikSWkl16SxSiV2ERELsbASRASblEIgWlid38A/TdpoJTEQ3+7kFkKO3MDO3rz5\n7e7s7QDTrVVpTwfgeDOrKUjOK32nITdWPwUB8oNUJBemIi0Slk+XZBmPamaPbjYp3bmk+slxjwdg\nLQnBLtVnoLR5uiI7GSofF/dLyQlRGA57yKkTjcVIUV3VPRN9zqTVR4w4NRVtKQfUOazqwbUODGJ3\n6w1AXZi2xHHn2T0dGCTadvk2CyIe8sxzZMvjSLONP+BExCsgO4D+zU4QbFwEwQcT+3CJvBukUEb0\nJlFc7jqKvPYI4UHRI5pCmFp+1Na4FZXlRg0s5z0dxrv08eqbcnkxO8wcObIgRr5QoVAVkZu53af5\n43Hkpe5T2BEx+QF0zqoJohtCPuldKUliPqPY4mienNgMYoktpVNmseULOuF1Y1L9BzY2Rf4ZABYp\nAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left(a + b\\right)^{2}$$"
],
"text/plain": [
" 2\n",
"(a + b) "
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"factor(_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Funktsioonid `factor` ja `expand` toimivad muidugi ka murdavaldiste korral. Kui eesmärk ongi ühiste tegurite taandamine lugejast ja nimetajast, on efektiivseim funktsioon `cancel`:"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAOBAMAAABJDIgxAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpmJdu8QRM1mu90y\nVKvMIHo8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAnUlEQVQYGWNgwABsSzdgiIEFOB5gF+e/gF28\nPgG7uDVYmFFZJQxVvs9FFyhQKsDxAUWc7UdCvgADWyQD0wIUcd5vDPwGDEzfGLgdgOJs3buBYMcB\nBgamBoZ8AwbWBQz5QA4S4FBgqL8AkrqPJAhk8k9g0E9gyL/AsIJXAFmGvwBoJwOHA+c+ZmRhBr4J\nXApA+57YyLmjiLOpaDIwAADLwB9hhukCngAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$a - b$$"
],
"text/plain": [
"a - b"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cancel((a**2-b**2)/(a+b))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Trigonomeetriliste avaldiste puhul tuleb `expand` asemel kasutada funktsiooni `expand_trig` ning `factor` asemel `trigsimp`:"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAAUBAMAAACwpfa4AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMnZmzRC73UTvIomZ\nVKu7zOipAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEM0lEQVRIDXWWb2gcRRjGn+vt3l02uV4sgkaw\nOVI/qAlyVEHQgqec4D/aE6RQW3pHLEKL2MMPghH1vkkRSbVEpVRZKaYUip6xYGmDXKP4wVA8/KDo\nl5wpgohQY02Jtk183pmd2cmxHdjdZ97fOzvPzrx7e0BvO64D6bAX6L7GN6J2TFBS8gEbWCciCoNT\n78Y4qEf6jzjmKOKd77OfRIeKceI0/P0NYGMYhxw1HWmDU1dj6IWRfiaOOUrwdvaT6HArTnwC8LqA\nX45DjiJVLQlvM3n9RaPcq+DrPCz9waVWp9tAocPujA05QqhuCXjCMP+wUe6VOLfMgKXJBrIhMFll\n3i53sNFCdYtwcJMJIGhY+ZhVsRDcr1IMdQx8PGgTT1B9KT2vyVNvE6qb10Rqy9by9CpuPrbpniKD\nG9o8nZq9qwrMUmHPuQvwZ0ab2HTvHewK9hbHOhFlJDJAHBzsph4/P7LIIMZ4bB+5QLdtKn9+toPd\nI2fUZBEN5uemFN4JNKSsXi4G/5FlSlzjo9hBeR+P4EMMhbeEGPfryEa49qjPTKHStAGFWXXZcXwW\nMvocZ/2nWguRLrN3spM6mppApqgmUxSHQu8vCD5URREvAvuBy8zN8uF2lfAt5U88vDIWBl8Fhm+d\nwoYIL1TBt0aoNG0gJzjTReYwCnwEvAbkl1FoId9gr4L8UraF1JKaTFH/CAbqTGoge+VuiIF9wN/M\n7WsC31fxEuUwj1obSLHqC603xkP2BX8DnwaE4nSl8kqlIq+lYDFQRqHI7gfAQBk1TsrH9K8xMswn\nu6om03QZWSYS+6fX2mLg+djAe/CXZAiPSSblV2igvnuH3EYMPIUcLSkDjOgVgGAxULcGvDYmO8pA\nTp5sgSOvqMmUgb46aoPKwCdIrzgGuAV8vjx9400edgW+q+Ih3kJ26DIG+CIKlaYNBIIdA9wCbgWX\nMtdwVuCamkxtARdngaOJeYOLjgEWoX+dK/mLLjPWADrHuBJvF7GxBFWjK1IkPUWYF+wYYBEWmtxn\npHkD1gDyfW3kVtRkqghrHezLqxr9uYoDsv7RFshr8wju77aAeQ4NjqA/HBrEk/kpZEL9Vl3ECyRC\npekVUJjrb7aArzANtVkJvBFOlnA29Q68lppMvcJeMf16v8JvbX2wuXntt81rv/74b1etCfaO3rbY\nBB7mUOydO4tg/qtm7ostZ9iVFd0zVqJSlFdtQHDq0urTl1ZvP/gRo9wgf+5rCm+QJ//P0RCnzv0O\nmSyii59/emeEGXHahNHOb6IJ8WqwpdqAk6Gk/bE90UukbykS8DYzwn5uTEBdDbb02XXYdOznZsZE\n3KulSd8q2WnVkj64rMIIJ9NoKC8HtPTLcchREU38Wts/JCbJGUdpcDKNc6e1NH5joFRE7eOsw8d1\nLx2ui9qOxjeiNi2QQoX9z2XjWkRU8P9JXilJ0TyAqwAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\sin{\\left (a \\right )} \\cos{\\left (b \\right )} + \\sin{\\left (b \\right )} \\cos{\\left (a \\right )}$$"
],
"text/plain": [
"sin(a)⋅cos(b) + sin(b)⋅cos(a)"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"expand_trig( sin(a + b) )"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAAAUBAMAAAD7IecQAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMnZmzRC73UTvIomZ\nVKu7zOipAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABl0lEQVQoFX2TPyxDURTGv6aeNq86EJOhfYkJ\njTSNxGBBnhAR3iBNJMJAJESkMdgk3UQsIoKIoYtaDAZjhw5iMRADYVFtLCY0pEjVd1/7/vQPN7nv\nfOecX+87575ToGLJwYqA4TpjReXYMiJA3JKWCu9SPxd9x7cVH7akTY1Sj9v8onQm7SGvUvLytB7D\nKcUAV8yUFAbsfqcjbeopudEkjkwlhAF7IsIbgqM11Bv/QfNBU6fCQEBEjxNtmrAmXJcOXAEJhIEI\nWP+KIn8xPcPt3seYQC14ekBisgvrGhQsAfNAlulV7okgzgVqwQ8aeGG3cH20Q8CzwBvTe9yXGpZp\nPKo6uK2qKcozSIT9kE4LSQHPWfAOpFcSXEaDI3Dz8vw4hDNng1kGD/G+lMNZNPDy1nANZGwwG5Ty\nqO+9Lzs5J/pgg3caFkQNpTIShPrRnTopgzNYpH+BjVBP1Fd48hUebz5T4lXAVEdLOkpr1TwZ4MHo\n02O2R+3PrQNyxMbpsnyQpJgtXz1IbOCvVT2itYdf/32NY/77W/0Ck3Zd48SNIlIAAAAASUVORK5C\nYII=\n",
"text/latex": [
"$$\\sin{\\left (a + b \\right )}$$"
],
"text/plain": [
"sin(a + b)"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trigsimp(_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"SymPy avaldised on objektid, millel on hulk meetodeid. Selle asemel, et `sympy` mooduli funktsioone kasutada, saab mitmeid matemaatilisi operatsioone teostada samanimeliste meetodite väljakutsumise teel:"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHYAAAAWBAMAAADnfXV4AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpmJdu8QRM1mu90y\nVKvMIHo8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABu0lEQVQ4EZWSP0vDUBTFbxvyp7Qp0Q+gBUWk\ng9S6OAjWLq5OojgYBReXFsRNUBwkIIr4CaSDODhUVNxKcXKzg5NQ2qGDboqQIijxJffd21AV2jfk\nnpxzf7mP9wIQLCU9hqLnZ7Zky95JeOmZChoVK7kniSt4tPqC41biXQJ3MFzsjy1G2gw0bJa9CdPl\nvhtWPYp4jhqVFClZB9OXUm2udEVoZNk9ZYVCa8IsncBxVwa+EUuRq2f0KuonLEkb1AWZfstq5kLG\nFuzIt4f6s41SsmoZkl/o6HQoxPpG4qh+LtlVz5NKsobLrFKWEbG+oXreG0BkZHRRhn6RrFBxFzOj\nla8FDcSyAduWIb7Aq8PuZjArHGj4CxHLhrYM0TMmw3MrgJn4az6CBmLZiLrQueVpx7l1HLyTaAow\nGwdNsIrjHC45TlN8BQ0h1DMoVEWlxXvOU7YPOt4SzWWjkIEGcX4l1kzBAGaf/nx/EctGoQYXphVk\nwYPYe4A5zNqwcRJExLJh5GIVpYPS3Mj11EQZs1coYU4sG1prZmj+N2t4nlfGbD2PY3nPbISwQNKe\nu33xTnP/iNBa+zcBLXQsftcPGl9+pvSkZG4AAAAASUVORK5CYII=\n",
"text/latex": [
"$$a^{2} + 2 a b + b^{2}$$"
],
"text/plain": [
" 2 2\n",
"a + 2⋅a⋅b + b "
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"( (a + b)**2 ).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sellisel viisil on mugav kirjeldada ka pikemat teisenduste jada:"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAGgAAAAWBAMAAADeGsQjAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABYUlEQVQ4EWNggIDcvQJQFvEUmwPzBOJVQ1Vy\nOPB8IV1TAMtXkjUxMHB9JEMThwIZmnLR9LDc3X0ATQiDy34BTUiYgQ27L7kewlWGMcRA2FwKENqQ\ngeEdXBbIgIkLX4Z7nmfWqo0QJTDJFwwM9geQdMHEGZjgmvj+//+Aqmm+AD5NQsquagoII+EmMjD0\nCzAqmQQloRoGtokxgb2JAykJITSxfmMQY6hQ6MSiiU2A7SOXAzabOAwYEhnyBZZg0cTIwLkBroVt\n5swZL2fONAAL3GVgEGCYDWYii0MCgl8BrgnIgDuP6QJI+BNMDiEODr3zB2ASIBouuZaBxYGB5w9M\nDi4OsolLQJ+BSQAmhdDEc4GByWEh0wcGRYgciqb4BfsZ3BF64DZ5pOVasP7i/sBSgEWTsJLQdag4\nWBZm4vz//38wGinqlkMNhInz2v00R7IDzUQ0GZgmNGEIl9EBqzADsjgABK9PQLTX1O0AAAAASUVO\nRK5CYII=\n",
"text/latex": [
"$$x^{2} + 2 x + 1$$"
],
"text/plain": [
" 2 \n",
"x + 2⋅x + 1"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('x')\n",
"( (a + b)**2 ).subs(a,x).subs(b,1).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Harjutus. Koolifüüsikast on teada lihtne seos ühtlase kiirendusega $a$ liikuva objekti algkiiruse $v_0$, lõppkiiruse $v$ ja läbitud teepikkuse $s$ vahel: $$s=\\frac{v^2-v_0^2}{2a}.$$Tuletage see valem, teades et teepikkus avaldub kui keskmise kiiruse ja aja korrutis.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vaikimisi SymPy ei tee mitte ühtegi \"ligikaudu õiget\" või \"enamasti õiget\" teisendust:"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEAAAAAUBAMAAADPWCYMAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1U\nmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABg0lEQVQoFWWSv0tCURTHv/a8+nr+wPwHXLUg\nKApCiAycAiEoaoh4FrRUhNRQQ8WjpaGCNwhhIEhDS4s0FUS4NTQo5NImNERbglZIZedc30vSA+fe\n7znnw7k/gU5TK+2M3wCCI+1YqkMrnl8jEQbEcgcwZsfDJGbIN+1Ea/aX7PiLhNPsAjyGBWh1EiLZ\nBRxZdTjzrKISmM1MAeeJ11PKZMnV8tMKlEi2ACQYcFzDbVLHu14q7pNfGMob9FHxCTwz4InBUe3J\nY4BquKWFN+BLoTiNGvDAQKgA1HzJFrAK+OrwmHiEICDEQDEHfKhVsc4dCHCloAcwDo0OKgHu8K2m\n0wEGaAk9hiLww51wyR1cJWgNb47LcpN6AVteo4G5itzkNhxLUGJatM9ggM6lmP4rJwaxR2EZwWYY\nJ/F+YKL5zrdMPUVk8uAMi9kKhUPkLXMXxPENyb+rlmlVXqeU9zS+kLcfi9P8WJYt0Bl2We/YGZ75\nuS0T8UyCGMD+MDL/j7bIji/3C2fKXP9uC9qIAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\log{\\left (a b \\right )}$$"
],
"text/plain": [
"log(a⋅b)"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('a,b')\n",
"log(a*b).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siin SymPy keeldub lahti kirjutamast korrutise logaritmi, sest valem $\\log ab=\\log a + \\log b$ ei pruugi kehtida kui $a$ ja $b$ on negatiivsed või koguni komplekssed. Selliseid asjaolusid saab lasta ignoreerida, lisades parameetri `force=True`:"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAIgAAAAUBAMAAACkMGhZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1U\nmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACSElEQVQ4EZWUv2sTYRjHv+nlzV0vyVH7D9Sx\nVZBqFKQiRuhSISAodRBJVVxUJOhgB5XDpUNVMhSkQiA4uLgEpwoi2RwcErCL24GDOggttCpFrd/n\nvfcudxc7+MCb9/nxeb953vfeOyBrThBmvmQLQ/ETnfF8YPxoprhk4hEWkzYEOg1cuEFiElBXkiT9\n4yZW0+nCEGj5wBEy5zhup1mvH8Vzxik1QycD4hvTvzjyrGdqRT9cAswbZy+RNcDdJqMWhkSWIw1Y\n7dDdQ8TpsAkOYEaLnF89AzyvfX3KTIvDWf94jURfCCAhkgRHWbamWl2gJiK5NdhNdvZ2lEsecLzw\nrQ3Am6ZLG4ikQDsA6sfUT+CTiBSryG2OdHBQlrzhJm+h3ODijsRJkRRY7AK9s9gC3ovIBMOt8kIo\nch0ob6PYBHIbVMhXKieuVir76WbAQhv4AEWRCan1GP5wNtVNkqBIoYH6mBFhZrCdFCgiJ+HyIWsR\n6eS3s7LChXo79Sp69NyOxEmRFCjb+SNd46V0UujD3Sm1ZYE+2HoXd0r+Pw42BdoBsIN5/vJg7yJ3\nGVbVndnng8bnZTW9V3keTVXiQScZUG7AIdwnsI7x3Uk8nj0AnNr9zrT0pqZOP3xGLb29WCQLym4v\ntQIuOcwRmt1Vj17THVz7ZVOJDjYDgtdem1xdY+84f+bwpB1tc2ZWvnHCKQL1CygpeQGNXRwD7om/\naBLZT4FJIwZtP0zJp8CYml2tUQdYMomIMWE8xSA/Stqif40JOk4QRv/xefwLnFml1OVCz3wAAAAA\nSUVORK5CYII=\n",
"text/latex": [
"$$\\log{\\left (a \\right )} + \\log{\\left (b \\right )}$$"
],
"text/plain": [
"log(a) + log(b)"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('a,b')\n",
"log(a*b).expand(force=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Samas juba sümbolmuutujate defineerimisel saab lisada mitmesuguseid eelduseid arvväärtuse kohta, mida need sümbolid esindavad (vaikimisi ei tehta mingeid eelduseid, st muutuja võib olla ka kompleksarvuline). Näiteks positiivsete reaalarvude korral on mainitud samasus alati kehtiv:"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAIgAAAAUBAMAAACkMGhZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1U\nmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACSElEQVQ4EZWUv2sTYRjHv+nlzV0vyVH7D9Sx\nVZBqFKQiRuhSISAodRBJVVxUJOhgB5XDpUNVMhSkQiA4uLgEpwoi2RwcErCL24GDOggttCpFrd/n\nvfcudxc7+MCb9/nxeb953vfeOyBrThBmvmQLQ/ETnfF8YPxoprhk4hEWkzYEOg1cuEFiElBXkiT9\n4yZW0+nCEGj5wBEy5zhup1mvH8Vzxik1QycD4hvTvzjyrGdqRT9cAswbZy+RNcDdJqMWhkSWIw1Y\n7dDdQ8TpsAkOYEaLnF89AzyvfX3KTIvDWf94jURfCCAhkgRHWbamWl2gJiK5NdhNdvZ2lEsecLzw\nrQ3Am6ZLG4ikQDsA6sfUT+CTiBSryG2OdHBQlrzhJm+h3ODijsRJkRRY7AK9s9gC3ovIBMOt8kIo\nch0ob6PYBHIbVMhXKieuVir76WbAQhv4AEWRCan1GP5wNtVNkqBIoYH6mBFhZrCdFCgiJ+HyIWsR\n6eS3s7LChXo79Sp69NyOxEmRFCjb+SNd46V0UujD3Sm1ZYE+2HoXd0r+Pw42BdoBsIN5/vJg7yJ3\nGVbVndnng8bnZTW9V3keTVXiQScZUG7AIdwnsI7x3Uk8nj0AnNr9zrT0pqZOP3xGLb29WCQLym4v\ntQIuOcwRmt1Vj17THVz7ZVOJDjYDgtdem1xdY+84f+bwpB1tc2ZWvnHCKQL1CygpeQGNXRwD7om/\naBLZT4FJIwZtP0zJp8CYml2tUQdYMomIMWE8xSA/Stqif40JOk4QRv/xefwLnFml1OVCz3wAAAAA\nSUVORK5CYII=\n",
"text/latex": [
"$$\\log{\\left (a \\right )} + \\log{\\left (b \\right )}$$"
],
"text/plain": [
"log(a) + log(b)"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('a,b', positive=True)\n",
"log(a*b).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Muud eeldused on `real`, `integer`, `negative`, `nonnegative`, `nonzero` jms. Mitte ainult eeldus `real`, vaid ka `positive`, `negative`, jne annavad mõista, et tegemist on reaalarvulise suurusega (kompleksarvude positiivsus või negatiivsus ei omagi tähendust).\n",
"\n",
"Vastupidist laadi operatsioone teostab `logcombine`:"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEQAAAAmBAMAAACPASDQAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1U\nmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACKElEQVQ4EW1UO2zTUBQ9Tnj+NYmhE1s98lms\nigUG6qFiAEWKEGLpkJSFDoghSLAgFHaqVCICZbNAYm022gV5gy2RGBACgScQQoJGJHyqlnDvezX4\n2Zzhfs457/o9/4D/4EvKCT+tctkJiFivP2gAj3NS2j4hzV3DEvWOn5JaFqvUXk7witmzmpQ2JZ+q\n9w1sM9GliUUsdIi7CjFmSfq50LBInZigssOsMdU01dg/KYs9WMELJk4rVovVgVI++yEXHzjkYG4w\ncbF39HjERTfC/CkuMugezjSAGUJc0Rjgq96XAqCtU3ij985O0fJUt1TogPkp+7rF2JOWS/3zwKP6\np4es/tIt4jdbjC1YG+4UzxxSmdJAS9qYC2GMSwOcZMnOWyZsWYiBSbWlLHxtwJsxuALtrY1hBPyw\nx+IaM0Z+irTwlH2715O3NX8heuY0xRzB3a3QKIbInYiX3IKxinLonjnSkR5alQXtbX52DOvLJ4Cl\n2fcRa7ln5u7+XWDF4t42dzckJW4OlFT799o9J+Yjs+eUVPZVPtRSmeIKnec2d8OG5LxYJsz5KlMU\ny/06uYBmwhGbypm2kkuD5cvqwkE/7BwUmVRryWax/1bmlxkpLen7IIhvjWaHi+sc8rjPRGUKL6Ts\ntCgUYPKuqwGaIWUzoVBALSCqPMJmTFmOLFjkN+ol/HOAvVaUmeG76EWCN7oSM1GEvUU/jcQakXKn\nqCrmLh369TuqRUThDzg7gsBaURuJAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\log{\\left (\\frac{a}{b} \\right )}$$"
],
"text/plain": [
" ⎛a⎞\n",
"log⎜─⎟\n",
" ⎝b⎠"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('a,b', positive=True)\n",
"logcombine(log(a)-log(b))"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEMAAAAVBAMAAADvM06qAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1U\nmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABh0lEQVQoFXVSPSxDURT+Xp/X9/r6ozox6ags\nHSwsfUMXkiaNiMWiFgaDdLEY3mKiYmhII5IXg1XHMkhNbLqZ8DZEJG1SJELqnHvfa6L0G+455/u+\ne8+9uQfoh9j9yFE/bVcKsVM3aOOJisRkj9VYl8TWIQbzCNiAttxjUYkUSOGE5DTlRY/xw6ufFHCn\nADP/WGqexWji/BJY+Gsxqp7FTKLsAqojGs1XZoHj3PMBqaEGLaXcfp4CY4DqIpQa9D3zDRchonQX\nMFeRoVQglmZL2ILSClQxwVy4Tv1d3AqdlkiVLaPEtqNL0hJ0gIc8znyL0mTLDbEfRktbY5otK9Ba\nnDOkhU/5NsrlOFPUSGsjQnslTNEo2ID5GXEkpbvQvqCnr2UJvu4GlAJUy5wespnlR07hJWlxQYha\nSHTGUMqOA5nOO6ngg+fKwymHdYIal5FWva7tiGf4H+Ap210Hrih95LL7jVLjb/SwSAducq7bHiOC\nGAaP0LKVnGjrj5Tkf2/wN3uDKUsazB+NilnZp02bFQAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\log{\\left (a^{n} \\right )}$$"
],
"text/plain": [
" ⎛ n⎞\n",
"log⎝a ⎠"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('n', real=True)\n",
"logcombine(n*log(a))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lisades `expand`-funktsioonile parameetri `complex=True`, esitatakse kompleksavaldis standardkujul $x+iy$ ($x,y \\in \\mathbb{R}$). Järgmine näide tuvastab tuntud seose $e^{i\\alpha}=\\cos\\alpha+i\\sin\\alpha$. Siin SymPy muutuja `I` esindab imaginaarühikut. Ühtlasi näeme kuidas defineerida kreeka tähestiku sümboleid."
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJkAAAAUBAMAAABsXIKPAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAq7tmEHaZiUTvIlTN\nMt36g2k3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACT0lEQVQ4EY2UP2gUQRjFX243d5u7281hUOxy\nILGwyUEIgo2LTbAQAyEniMV2NooHmj+KkO3ERiIElKCwqAhBjNdYWOUslUXTWIhFrtbCJOgZkKBv\nNjOT3WWX5ON25s03v3l8M3s7QGaUGzJ9JnM6nkyhR+Tc18l96JmSfYFSeX0KHZLcRmt/wUclzY5S\nef3BqOHptTNSVWKV60kKw2OzFwpVY9U7gVI4L1WeWwYarXi9ri1WtULV39N5bknUbIotfBm7Uh6t\n2R+uTx8Vi5uimWn6bEseG4ZyM6/OtjExPQ97arzDfBItWYuAWYeDag3OCN4ERE7wWfXNZbMNo0PN\nUG4rbXvZ/o7C5Dmgy3wSfVXsANYS+lGoobCIwQaRH3weASf7XVS61AzlFqKy67Rg7953IXaVRN1B\nkfs5EkRuHUTDx0DxF3CtBNibnC6F4acnYVjjLnocbrSBP872ZUqk0DWXuYnPvcitrt0G6sDtW9KN\nhKzN+k295gPb5t1/HjXd4uh7Eyi7OOuLnUo3ln+xBSywBqvLJQzppmvrvYCxw3wSNf9yO0T7GjE3\nHq04vwXS6bcQkh7wYO28BcRXlEStzeecX0IhYGH8Rec2y3OrwbhhuyiyRhHqLaw0cMd+imrrnYtT\nzKfQIRZh3Zyat4e3LgxvfRt9SOQBn7mxRpHfSnWdmqHczGOXArycO45746d95jNQgcfDCfRI/deV\nm56QIgNNI4anMywvCjOQItUZnk4oVCeUECcSxcE30iFQfQUWAmmb2x0CTV3PuVaciKP/AcSZmB9/\ndSBtAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$i \\sin{\\left (\\alpha \\right )} + \\cos{\\left (\\alpha \\right )}$$"
],
"text/plain": [
"ⅈ⋅sin(α) + cos(α)"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('alpha', real=True)\n",
"exp(I*alpha).expand(complex=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kui me ei eelda $\\alpha$ kohta midagi, siis saame veidi üldisema vastuse, kus on paratamatult olemas nii $\\alpha$ reaal- kui ka imaginaarosa panus:"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$i e^{- \\Im{\\alpha}} \\sin{\\left (\\Re{\\left(\\alpha\\right)} \\right )} + e^{- \\Im{\\alpha}} \\cos{\\left (\\Re{\\left(\\alpha\\right)} \\right )}$$"
],
"text/plain": [
" -im(α) -im(α) \n",
"ⅈ⋅ℯ ⋅sin(re(α)) + ℯ ⋅cos(re(α))"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('alpha')\n",
"exp(I*alpha).expand(complex=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matemaatilisi konstante $\\pi$ ja $e$ esindavad muutujad `pi` ja `E`. Veendume, et SymPy suudab tuvastada [Euleri samasuse](https://en.wikipedia.org/wiki/Euler%27s_identity) $e^{i\\pi}+1=0$:"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77ur\nRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAVElEQVQIHWNgEDIxZWBgSGeQmMDAsoCBOYGB\n+wAD+0cG/gMMvN8Z5BUYeP8xzDdgYP3MMF8BREJEgLLs3xm4NzCwfATpYkpgYGhnkApgYBB+d5QB\nAPogE3QldevOAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$0$$"
],
"text/plain": [
"0"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E**(I * pi) + 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Siinjuures väärib rõhutamist, et tulemus 0 ei ole saadud mitte numbrilise arvutamise teel. SymPy arvutused pole oma olemuselt numbrilised ega ligikaudsed. Kasutades oma matemaatilisi \"teadmisi\", SymPy \"sai aru\", et avaldise $e^{i\\pi}+1$ tõeline, täpne väärtus on täisarv 0. Selline matemaatiline rangus avaldub alati kui avaldistes sisalduvad vaid täpsed numbrilised väärtused või matemaatilised konstandid. Näiteks meelevaldsete arvuliste argumentidega varustatud matemaatilised funktsioonid jäetakse kas üldse välja arvutamata või parimal juhul lihtsustakse niipalju kui võimalik: "
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACUAAAAVBAMAAAAzyjqdAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInarRM2ZVBDdiWbv\nuzJCz3LGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAzUlEQVQYGWNggADG/3DwASrEwOwAYyFoUQQT\nzkqHs+AMjglwJpzBVgBnwhmdEBbf5KxVq2CCq4GMmgYGbqCDPkPFgMZxmNk3MLAJMDAYQMWYNgAZ\n+g0MXAwMXA+ATBcg5gRikBgQOAEx01EgoQTiQcQuAFkS+g4MDBPgYlwgUxj6LzBwL4CL9YNYDGwf\nGTgbQAywXlUQi4HxG8MuMAMsNhfMZLBvmAEX44C6+P3yBLgY3zeIOtajDXAxdqgYlE4+H7yBgfE4\nRB1DIJSGUQC8mTYZXfXrAQAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\sqrt{17}$$"
],
"text/plain": [
"√17"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAVBAMAAADP3xFXAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA+0lEQVQYGW2OsWrCQBjH/ydNKjEWly51CVm1\nEPAFfIPe1EEEXbp0aejSqeKok3ObJYuz+AS+QMHQJ8jmJiiUigjp932XNlJycHe/3++O44CzodYZ\nj7MiaI//F/FmacVtabbi0lxJiqz8Tje3HmDMDnCPy0OeR8jNTvEAvJlsxSjsHXjqSndT4M9WmvOE\nDhyaxuQWFtqNiD5+rd9mqn7jej0GYha2cMrgDIFBgKuQhUwlLQafZmUHR7OQWTjR7nq0qD02tBmr\nfxF8QjXok3ouma021Ljw4FK+e/U4iw2SEDcvz4/ktUieFpupFKssO1Ku7/myMXsrLMuyQKIfuqI/\n4UTFPiQAAAAASUVORK5CYII=\n",
"text/latex": [
"$$2 \\sqrt{2} i$$"
],
"text/plain": [
"2⋅√2⋅ⅈ"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEQAAAAmBAMAAACPASDQAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMnZmzRC73UTvIomZ\nVKu7zOipAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACDUlEQVQ4EW1SO2gUURQ9M5vJ7k6SnSiClcmA\nASFFXIJNsHDQXrZSrCYQEWIRYmO9hY3YGEMasViQJFhtlqRymy0EwSqkEKwyInYiMYuSuBvHe++b\nyZs3u7c459xzz3tvPg8YrEI19ZwoVTmeof56HMd94FlulLSlDWCsdfB2tgHY0dDMg0ngCt7bRMCd\noZGf4i5WasxNwVzO+suGFRXFr0RCJoyIOV71ZL3125xK12wwhTWvzozbgiZ8lPYayjsiFsypdK8E\nl1BRkWZdekvZot1fQueQbGb1zh0UjrRmVQnMnrrxVdOyc0toWlw0IxPymeBe0LbX0ZqVdQbr6nyw\n9Q+X3lyc89nyBFmpcrq4B6ziLvDUd2XLsJoOEz7G8xp8rADLQJfNZj7SQ/HPLDjyEDjmyPQ+I10o\nKnmZPpy9uMORR2kkv0sfmyicZCP5g5weDoBv2Ujo80G63C6+1PCYT0kP8nb0mBV9lxfzN+tT8fep\n+Ovn04isMkOmSieZRsnRQPjyj3Zb9isMXruxlxK5Re8csUp6MROYUKs+0TUQpxglA030T7jokJaI\ngR9CLn1GqZIvdNgQMiC9z6PK/WAMVRPuK95VtD4kYgdiOkdCtnpB0RrW1CwQKlf1QKsbIpM7PKP9\njBrxuQkjRvc140A5T9ia7jDeT56ddba2G9QddthaYhhS7iSZ73i9Uyf4D+vhfwkKmlmIAAAAAElF\nTkSuQmCC\n",
"text/latex": [
"$$\\sin{\\left (\\frac{\\pi}{7} \\right )}$$"
],
"text/plain": [
" ⎛π⎞\n",
"sin⎜─⎟\n",
" ⎝7⎠"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAvBAMAAAACzbekAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInarRM2ZVBDdiWbv\nuzJCz3LGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABEElEQVQoFWNggAL5/yAA4zGYwFkgBmMACpet\nAIXbicJjSGdgXLUWroJjAoMYA/tvmBKuDQz6BQw/YVygVh8Hjq8wrjaIAVbM4gBkTQBxOxcACR2g\nA5gUgAypaQ1A5zR9YWDgBPIYGLiOAAmOvwwMu8BchjMNQDpfgGEGkBJkYLgPcod8AvcCIPW/AcJl\n/sHZAOSeZWCYLwCk+X6VAUmG3Qzsn0A0Q0wEiGRJy3UA0Qz1CWAKRrCCtNAcgOMCTlDdOsa0uw+Q\nDG1m4AKGJxxYMDCcgXMYGE4yMNg/QPDjG1C4QIn5DQhZYMD9QuYxcBqgcNNQeEwJKNwyBkak0OVL\nYGBC4kquWmaJpDr+/39IIgIA361IMdjdwjAAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\frac{\\sqrt{3}}{2}$$"
],
"text/plain": [
"√3\n",
"──\n",
"2 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import display\n",
"\n",
"display( sqrt(17), sqrt(-8), sin(pi/7), sin(pi/3) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tulemuseks on harilikult irratsionaalarv, mida ei saakski lõpliku arvu numbritega kirja panna. See muidugi ei takista vajadusel kümnendmurruna arvulise hinnangu saamist kuitahes suure täpsusega. Seda saab kas funktsiooniga `N` või meetodiga `evalf`, millele saab ette anda ka vajalike tüvenumbrite arvu:"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.433883739117558\n",
"0.433883739117558120475768332848358754609990727787459876444547\n"
]
}
],
"source": [
"print( N(sin(pi/7)) )\n",
"print( sin(pi/7).evalf(60) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sümbolarvutuse puhul on ka lõpmatus ($\\infty$) täiesti aktsepteeritav ja korrektne resultaat:"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAPBAMAAAD0aukfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMs27ZhBURHar3e+J\nmSK3E9V5AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAfElEQVQIHWNgYGBgVHZNB1IgEBE4qwHMwEEE\ngMRBBOvs3w4MDIdvNjAwMAtwfGIISmCQYWBwZGDIN1BkYGB5wACU4PkFJBgcQEwGexDRAGZafwdq\nd2BwZWDgOLf7AQPHAwZeBoazDPLbGXyAEncnJzCw3t99AKgcbBGIAAAqoxtVgwlygwAAAABJRU5E\nrkJggg==\n",
"text/latex": [
"$$\\tilde{\\infty}$$"
],
"text/plain": [
"zoo"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tan(pi/2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sama arvutus numbrilisel kujul annab mingi ebamäärase suure arvu, mis on määratud riistvaraliste ujukomaarvude täpsusega:"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOIAAAAQBAMAAAD5ZL72AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVO8Qq5l2zWbdiTJE\nuyIU2bFIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADDklEQVQ4EbWUP2hTURTGv7z38rf5h4ODS1I7\n2KHqQyziYkKhKAoaNUEQawuSIg41YDEFHQIu3RpEKXQxiFZNEbs42KUPwcGpUXAQlT4KXRxKS8BY\nlMZz77mvubVz73Devd/35f56z32vgDcis3OI118nubC6OvQN+Fn/BPTXz4Od4I2ui3pGOh3x3WC9\nXvP23PWs35oHfD1SN+/jClbh+81FymYWb5x4DqmK2YsVlx2j3a6pDPbZYKcjTrXb7ewuEgmUxQnH\nX8LxfFP6sRx+4HYSm1ykbNkw0oENJKpWGlaOneCzMfDMHLxgg52OeB2wdOB+XsgsviDWAAJMXHLJ\neu+YLS5SNqqw/kT7kCklSoissyP3k0EC22CnI9aAOYZwVUSZjW5JTRE/c4C6So2mIuRgk4i0TlUy\nDQTEjBx1AhkkIju6GB2h4PbQibG0lBWxtVB0aH2ypoqSwwQ2Z2DQGf+yY00W6fY5SER2dDFGrjlb\ndOlBQycm7s1eI4m3NlsVdNN7+ZjuVxZFXKoh/uqyaGmQDi6cmB0ntsyIrrKjiy9p049uvEYPGjox\nMwEjuU1s27hEtEgfpURRxEfiV08d3MWBDeUAX70ZET1nWzTX6TPqRv+8+OV/xCb89GWorTeBKYcS\nB2kTUVj252gFoweh0QVxj2wPu2omiJ7jiYESva29ow9E+kW5/LBcHhdT+ZZVEaL+KOI0EStrwHJS\nFiUX6e91ERPHs5qQzmnQR8oZsQs7mhhuAIms0OXQuxouIaReSvIGxBmptctJWZjoy2Et0WRiMAvp\nHAKGbc4oIjmamMkSsSZpouhE+na1My7SPeIw8MSVhYlvgTGjgfBW6AgWXbZzwDTPZKfY0cRFmhtE\nHBG8ncQuusc0dzVTglUzuzEJ3y8ukhifqeeroQpSI4E75gTYWQVBZFAS2dHEFBHpLvtdwdtJxFkc\nS8I/0DqDcBZ4np9HtDDkcJFykP5HVvGh8J3cggN24lcHbZ4hf3S8wo4mriSJU7xZoSqG11WZjRTO\nsbqX1SPuJWPn3qd2LoF/YIQ/9wQ11AIAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1.633123935319537e+16$$"
],
"text/plain": [
"1.633123935319537e+16"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"math.tan(math.pi/2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Eespool mainiti numbrilist arvutusprobleemi, kus andmetüübi `float` täpsusest jäi vajaka, näiteks avaldise $\\frac{\\sqrt{1+2x^2}-1}{x}$ väljaarvutamisel:"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.7080354225002406e-08"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"x = 1.3e-8\n",
"(math.sqrt(1 + 2*x**2) - 1)/x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"SymPy-s esindab meelevaldse täpsusega reaalarve andmetüüp `Float`. `float`-literaali tuleb mõistagi vältida ja anda kümnendmurd sõnena. Teise parameetrina saab näidata nõutava täpsuse, näiteks 30 tüvenumbrit."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAAPBAMAAAABsTWGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77ur\nRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEVklEQVRIDd2WTYhbVRiG35v//1wUShnEpDOo\nFKc0NFOxOnQCdTXINNaNC2EyWHFT9IKuREigoAiCYQTBbiYFFWZRmgqiokKIrWJBJ7gQd5O2KBTK\ntNGZCW0d43u+c+25iXcka7N4zr3f+52T97vn517gvpnDUD9p/WBNHStDIHlYfvRTZhe/B4OzdQ90\nUJQReXfF2jjUAR68dgB42T7hIHIl/Ige8rl2sVjAe8XP9L966HopXitrLzrnJeytqyRp/RBxrLch\nQPQszbcw17E+xJk6JkrxVQ8kaDCWEgC+A/JIOTg/+ANIDAYF3fH4YDBoxfOoloDXbRoUKAfay55O\noCJedE6ogWCFWdL6AfPAYxoPTPeAlI1EI9VAKo/LQNsDCRqMpbwGvI9oCfEKXviRzzMyex26437+\nFTJ9ZGtWe82GAOJADOETJJviRXKQbCFKd7qVmxHgK6BqC5BhZqKG1Fa2guAtbANzHkjQYCzlSWAv\ngk1YNbTogtb5k3ELwGGkzyFXAW6q+RAoB+IlfZsh8aJzsi2k+wxJ6wf8Caw7Aqkj0mMduSYyW9Zd\nDv7MPZQlaGDk/1DWL2AG6bt2sGTqkI5lIN2lL1lXw3WIl2SDmnjRObk80n/xUlo/WL+zjisKXamD\nubFegvOxg485Hx0DCRp4ZBMc7ZgaHCsBa5szwMWFhzgfT10t645cIvwrWKeJoTrEUDf74tEDSo9x\nglTOSgFh7i/dys0I4lQXjygU/qljvcBFFdnkosIrJQMJGnhkExztiLltrpngYAm4gJUOknZ8R3cE\nJwqIP76PHKpDDBVyJ5FwKK0XdM5K3q1DtXIzgjinYvGIwr063uEhiVf7iHSjc46BDooyIu+uRH94\n9xzwxi93OvSUrBH4XI8L65a6wxNUhusQL7keAmcp04vkyFLipbR++Pe6CuR5vG08uwUs/DpX9kCC\nBuMoTyNzxw61cFN5Cqi9i4N13TFTUXdIUBmqw11XNYR22CXv5mR5Xrn7PNqXmxGofV5V+7zquOvq\nquqKlDrlsGYPQYIGHtkEhzqucp6dRB3hfkq23Ldqy+khY00uqzqSdDdUhzYUqyC0CdCLzkk2EVKO\npPUDvgSO2wJdRzSPD9gh0iJwahiRFu8NPLIJypWrqLWTKuXAXZ6oINBTW/ygejQcN9fiKdrzqUO8\npBpqPpQXnRNqIFBhR2n9oF6BD2voOk4A10OrWKxjvh6+7YEEDcZSOB/JOucDX/DNzmecB97UHbHI\n60QTMS624fkQQ2HujwaUFzfnLUyULb55VOuLmGN9BIHUET9dnK5llqyTwG/2npIHEjQYS/nZxgLS\nSwh1+XkxX8cy+CBkXFRZR6iEane0Du3lG0w44sXNuX/jkux6af1gHb3B70SFwOXti4jwu6eGQ5Md\nHpeTPMINdFCUEXl3JdxW34nPT3Gg5dl9XOxTbVsPiTMOgJ8mvwamz58qaYgD8cKkS64XyWHu/+H3\nN+Z5rdqDbqOhAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$0.0000000129999999999999988559731110623$$"
],
"text/plain": [
"0.0000000129999999999999988559731110623"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = Float('1.3e-8', 30)\n",
"(sqrt(1 + 2*x**2) - 1)/x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Matemaatiline analüüs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Eksisteerib võrdlemisi lihtsaid avaldisi, näiteks $\\sin(x)/x$, mida teatud $x$ väärtustel ei ole võimalik otseselt välja arvutada (tekib määramatus $0/0$ vms). Piirväärtuse mõttes vastus siiski eksisteerib. Piirväärtust saab leida funktsiooniga `limit`:"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAHlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAACGjDitAAAACXRSTlMAVO8Qq5l2zWYZcMvdAAAACXBIWXMAAA7EAAAOxAGV\nKw4bAAAAHUlEQVQIHWNgAANGZQYGk5DJQDYbqQSr03QPsBkAJYgIYEZbtZEAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1$$"
],
"text/plain": [
"1"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('x')\n",
"limit(sin(x)/x, x, 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teatavasti piirväärtus $$\\lim_{n\\to\\infty}\\left(1+\\frac{1}{n}\\right)^n$$ peaks tulema täpselt võrdne naturaallogaritmide alusega. Siin lõpmatuse jaoks kasutame moodulis `sympy` defineeritud sümbolit `oo`:"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJBAMAAAASvxsjAAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAEIl2mSJE3e9UMqtmzXCQ\nkgMAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAA4SURBVAgdY2BgVDYJYGBID2BVYGDtZBBZwMDdY3yQ\ngYFvAwMQ8CmASA4gacDAfIFBBKjSxOYAAwDWpwf9jP6jxwAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$e$$"
],
"text/plain": [
"ℯ"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('n')\n",
"limit((1+1/n)**n, n, oo)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mistahes piisavalt pideva funktsiooni graafik lokaalselt meenutab sirget. Täpsemal vaatlemisel on kõverus siiski märgatav ja selle kirjeldamiseks tuleks kasutada juba parabooli. Niimoodi jätkates saab funktsiooni kuju lokaalselt kirjeldada kuitahes täpselt võttes piisavalt kõrget järku polünoomi. Seda esitust nimetatakse funktsiooni [Taylori reaks](https://en.wikipedia.org/wiki/Taylor_series). Vastava operatsiooni teostab SymPy funktsioon `series`, millele saab ka öelda, millise muutuja suhtes, millise punkti ümbruses ja kui kõrget järku liikmeteni tuleks rittaarendus teostada:"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAF8AAAAcBAMAAAD1rn4EAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACCUlEQVQ4EY1Sv2tTURT+Xsx7SV5+9FKh0MnX\nCm61obhYB99SHBv8A0wUwbFO6qJDUcShtCiCwcEIuuhglg7i0Afi4CBJ7SDSwS4OTiYiCCLEc867\n971cSfFdOOd833fOx7l5N0DG4+3vZpzUY5dxOpvhnR67jV6Yy2CpdPXQHaw23Pr/HSWVzLxSuJKQ\nf4C7O7P5ULSPaWcdKKb2VGe04G5/GDUI5IdJw+sDOYpJ50hwQWFxi1o8pc9NqvmBYVL9QNM95ysw\nxc1aR0twW24E3DVUqjG4w2oXKPFtespMvH/xkvC+oZah2PeJl3nDrWTg+2hE+CTF9PGVE4HoZkMz\nYlo+oPSZwpk/df4SVT5NBadVWC9uCTOGL3KPWp/ENxQzuBHckwG6YgRPeUM/FG4MO8J6DSoPKC5i\nTT0TCfTacFDqMvPa7Uff2u06wSeKhdecNigUHjOUs9qhMhUIBsyGsxEJlZ+s8gbgh2ROtEHuFQvG\nsMZrZrkVGyp/4j7lXghfLSInd0g2HPtFb7otQ2coP80NMKct9JWanR2ci6nZUBgtr+yFotF3d3+X\nB/mr2kDvcnR++pOmxoC3mxtRPMHffWlu4bqeP+SlTZdqTX5JKtxPISEntCiTasuSnPTfbukpqRyk\nmFChbtFJZNkSi5FFJ5FZS7xmsYnE74/J+e4YOQw+H2tU1RjJCv8Cl4Bl3Hr5MZEAAAAASUVORK5C\nYII=\n",
"text/latex": [
"$$x + \\mathcal{O}\\left(x^{2}\\right)$$"
],
"text/plain": [
" ⎛ 2⎞\n",
"x + O⎝x ⎠"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('x')\n",
"series(ln(1 + x), x, 0, 2)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAI4AAAAcBAMAAABFfZpzAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVO8Qq5l2zWaJ3SJE\nuzID+9VZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACVElEQVQ4EaVTQWgTQRR9m+0mmWSzxosXBQNF\nxNuipR56SPVQiyIEFPWiLqIFT0YQFopgKJ5tDxbBU6nUo+QoaOke7MGDTVD0Jq13oS0pRLQY/8zO\nbGZTodlmYGfe+/P+25n/d4EBx/xXd0AHkc7qQ9WBfH6G2bm68wfewZ2cpvQJ8rv4cHCfTFQVowVW\nS2i0euZlOxA516LMnAe8ilhfIF35tHZ7l0vzrShhntA9eozhKLQfmLCHkW5zFasobZajFWDkqrI2\nPLXXsx6R3Bo/HQAdzlJFGcNHrAG5GpDu26fh3qTsJ7zCm3ziw3l4+AtgNZP4LIGfYp2nz/CJj1Sn\ns0Uepb0+9vN3UxPA6N339z2uBOS97L+CfebzdXo0hU136r2XVfiGct2cy77OVUWi8rHCApzgwe+A\nrnDoFb0+Pyh9ZYO5rGXUYz4FugAVRPT9EbVMU9A3LX2Y70+f9P1xwC0HmIWJTFO4vPD9Rd+nPGTE\neQrikEt0HqWgrfy28iGi+n4cuED0kEeTGLI+Q6I+m+KQ3FdTdM9DYeVDNfxlUms3uJYP6cN2CJuP\nRUj4dBX0z++pD07BaDHDfYC0K3KUj9mpAcuBiF2m12qK//WLzsiqzxrFdbwNbZQPZneOrl4KY3cA\nXZEtwTrfngz35L3sBeQniyNTozdqPT7Oxd+3ZKjhQlfw7zkaqj5RQAH1fylOayrQCLXS06gpOqEF\nFBxToLtac11MqCwrGQv2Q5xSTPU0xpKQczHxmxhLQs7q4mz8lvrWftioaIplDSeFx7SEKxoeEP4D\no1qPqJ1hfmQAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1 + n x + \\mathcal{O}\\left(x^{2}\\right)$$"
],
"text/plain": [
" ⎛ 2⎞\n",
"1 + n⋅x + O⎝x ⎠"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('n')\n",
"series((1 + x)**n, x, 0, 2)"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJAAAAAvBAMAAAD+9F4rAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVO8Qq5l2zWbdMiJE\nibtHdKBDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC30lEQVRIDa1VTWgTQRT+ku3mP21F8FLRQvHs\nUks9iFg9VKUggQYVDzFY24uIHsQgiAZR0JNFbYt/kIt4EZKLIChtDtaDBxNQKiLS4tGDTWkx/kF8\nM7ub3Q0zTaZmYGfe9733vn3zdnYXkI14alTmUuM/46Bagiz6IfIFmU+Jf4S5olKCPHi7IfcpeaaV\nouXB8YTcp+S5oRQtD46VYzm5V8HzdNO2/222NjHyZgE7azWF2wpD9+JWekboUSTfY9HoUcwRhhu4\nIuTF5EJynVb+EOeIWD2rL4l4zkV+S12O45lp6uVQBWmHdlubAxWMuQmRHVmyWarotW171thKZyWa\n9VACEKx3pj+HuDBcGx4bvylIZdT8rk/VIvcd5TNNgYs03bVRi2sg8e7tyb8sOLpaT2HNHifk66tT\nTY3hWB8CVRbm+jREV4A5YCDpaMuEtlgOfai/CPA3x99tcf256E8gnKU9ti5UMlKUfpW1OW/3OlwI\n0JbY9hSEpsDqWKYL19jERmThQ4FEelWEYuY5/cryj9E1ePrV2TQDQIy21XpFutmEHSzzO6CVQ9Ph\n8wxQXXSP1oU6KzyHP/4L9OCM+KqPtsVGlEhTSLt0n8ZMjsiuWn2wzI+ZzJ1MhhIR5BV18iKmqCIE\nl4jlgx2B1ivq4D0y/79MGF1prkKTU5HNCFfrHMXXyKtd5iFcKJ+zwyN/VCrSallgtsiTj9ArYZxD\nwDCl1J4abq/1zI+YmaeAUvcyXpgIoV7oB6qHLCRd7FckcvjXCSuoZGBgYvB41oLsZAvH89Q3F28L\nuSh/0QXogaY9sA60ISwW6wh7HNO29LJt8XWf1SsPSaDDgL+3kfTgiNd93eN0gH8S5qFxqEZrv4d4\n4EEOoDPcTGi3Ew2EvBt1uxBu8pnyJVzhsy670SytcxMeu9WVMeqyG817jcQGse6ufIMaPI39X9ox\nqJUv26GDJ8CZdghFH39JTrZDKEgfW0Whf+OcqADV9tnzAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$1 - \\frac{x^{2}}{2} + \\mathcal{O}\\left(x^{3}\\right)$$"
],
"text/plain": [
" 2 \n",
" x ⎛ 3⎞\n",
"1 - ── + O⎝x ⎠\n",
" 2 "
]
},
"execution_count": 111,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"series(cos(x), x, 0, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nende näidetega oleme reprodutseerinud hulga üldtuntud ligikaudse arvutamise valemeid: $(1+x)^n\\approx 1+nx$, $\\cos(x)\\approx 1-x^2/2$, jne, mis kehtivad tingimusel $x\\ll 1$.\n",
"\n",
"Tuletise arvutamine toimub funktsiooniga `diff`. Vaikimisi võetakse esimest järku tuletis, kuid saab arvutada kõrgemat järku või segatuletist:"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACQAAAArBAMAAADieDd+AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA30lEQVQoFWNgQAK8uVPDkLggJq/8BT4HVDGP\naAb+BlQhBlMGOTQRhpcMaZyoYiwfGDauZGBgVHYJNWVgaA12DApgNGAIusDAwMZeytDvwKHAu5X7\nAFTPLCDLfwJTA9MPLgeoUEO/AMN9Bg4GngKoAJBaz8BgA6T4AxBCOQwMfzkYGOZPQAg9YuD6wcTV\nEM/A2gAVZPnIwHTgpvyCegZfmDLGDQwstguaQ1tzgS4a3OA/Bhjc7iXWdeA0gaIYJU1AZFDSBEQI\nNU1ADUBOE1Ah5DQBFkJJExBFKGkCIoScJgBRW0O7X7HIPwAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{n x^{n}}{x}$$"
],
"text/plain": [
" n\n",
"n⋅x \n",
"────\n",
" x "
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('x,y,n')\n",
"diff(x**n, x)"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADYAAAAUBAMAAAA0D9PTAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA1UlEQVQoFWNgwAXm4JJgYJhmjVuOYTXxcry5\nU8PgqtH08cpf4HOASaLJeUQz8DfgkGMwZZBj4CoHggoGDLe8ZEjjxKGP5QPDxpUwuXUwBoRmNGAI\nugAVcttvysCo7BJqysDQGuwYFICqkoGBjb2Uod+BQ4F3K/cBdLlZQCH/CUwNTD+4HNDlGvoFGO4z\ncDDwFKDLAPnrGRhsgBQ/hm1AwRwGhr8cDAzzJ2DR94iB6wcTV0M8A2sDuizLRwamAzflF9Qz+KJL\nMTBuYGCxXdAc2pp7AV0OACPFL1JXJc+pAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$n x^{n - 1}$$"
],
"text/plain": [
" n - 1\n",
"n⋅x "
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simplify(_)"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHIAAAAwBAMAAAA/YzMpAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMnarIkSJZlS7\nme8N5bApAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACeklEQVRIDd1WsWvUUBz+ckmvyeXahkK7KeEU\nHFwEKRUcGtzq0iwtOByt/gURF1HRA12cLktxaeE26SC4V2hdtBTFszhJwcPJzRYU3c7fy3t593L3\n7oEZHPxB8n75vt+X30veu3wHGGJu7e6N2GrGeBgYqjSUldYW7NDze1jXsCbIC7xTP7k/FeKdqUzD\nWajsA8F0jJ8a1gzNxMS3E+eHuUzDrkQEHmGip+FMkB+sYyLAG9Q3TGUarv3yA+4Bx2h3NKwJml+d\n+0ya+c0vianMxB2ZyPFcNbR+j2dNjN2ps7UpEe7qpxKq/0gye5nFeaD/l/GP38H1ZlSy44EfllQG\nXlpS6WyVFAJu2dnG+FWuqdVzemOU2+8DDeMdfxTozlqk4QnykmqoYZ7hlgbNoMkOZ+zE0T3HIlYS\nPKeSGdqnJ7xUnB+I0W5N6r4fV/CohWpSkIiLCxL0T2WqJnsBrJCA5a2ivtYlkIcd89EXo4AXaNyk\nY9+9JBA+2Im83BZZUel1CT5LR2gV53RHCmX3ovIFK6i06OQXezYJylwaT/GEcgqh5Lbtpm5ES8Ya\nzw6mx8oOAe7SzsXd1wyQSm7b13ZfBUAtpLKbGStPV+mGmUtPy+USPbltf+/32c1oomdup1LFkm90\ns8ylBeo1Gue+NhobRdt2ToClPsmVICXtj1hB8udUbZsph4NmC2QuLZn83Sq27RbbZaX0hoRLjygV\n22ZvaDho+YVLSybvqdj2VCpZmTwme+YuLaFcqdh2JZKsTJTdl2O5kv1BETHYaTlCa9wd5CKzkixR\nbZvt+JF4O4IIQLFtK9QV5b/sEU6x7TqfxVBJ/jUZgguX7GvC4w+wKrQAPJfo6wAAAABJRU5ErkJg\ngg==\n",
"text/latex": [
"$$- \\frac{x y}{\\left(x^{2} + y^{2}\\right)^{\\frac{3}{2}}}$$"
],
"text/plain": [
" -x⋅y \n",
"────────────\n",
" 3/2\n",
"⎛ 2 2⎞ \n",
"⎝x + y ⎠ "
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sqrt(x**2 + y**2).diff(x, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Käsuga `integrate` saab arvutada nii määramata kui ka määratud integraale:"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADgAAAAUBAMAAAAqxuNgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1U\nmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABSklEQVQoFWNgQAccDyAifA0MDEImaLLtML4G\nAwNrEowDpS1g/GAgowjGgdB8F2B8lgkYktwNMEnWBAzJbpgcA4MVWDJkphcDwyLfl9OBEnOBOHJS\n1xSgmb4gScYdDOwTuL4y7OMEStQB3ejAt5PbgIHhMUiS24GB8SPTBgZtkIl7GBhYAli+8jQwMJwG\nScofYGD4wpsAkcwC6mRgLgCpkwdJnl/AwPCd4yNrDkgEKMnAwA+0ESoJ0vmXY8oUAZAI0FigMJi5\nGqST7QID1y+eBSBRsIN4AuYzcAaAHVTOwJjIwOzAZSXYAJIEun/9gXqGPiDzCoPQfw2GXhctBgb7\n/98uAEWAZgXNjLz3AMg0BGIIYD/A2rMTyEQEH8cGmBzDcSDrORCjBjxUOhrowBoQuwIqwACKMihg\ndZnpC5RnYIBHNlwVTAmQRkomAPJISik0ozTBAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\log{\\left (x \\right )}$$"
],
"text/plain": [
"log(x)"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('x')\n",
"integrate(1 / x, x)"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAAlBAMAAABrOn4UAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdpmJMlQiZrurEN1E\n782PMUhmAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAlElEQVQYGWNgkP////8nBgZmk8B0sQQGBlcG\nM0YHBhBo4FwAolgmcIMoBqYC/gUgev0C/gMgWpqB1wBEtzNwgmkQmwIAdAUQfCDBhCSNFpBqrgkM\n9geANNC1vBeANO8GBs4vQJrvF4QGMrl/AQkgOA916E4Il0kBQgtBKFYFhjQQy4mBQQxIsW021twA\npPmAztrAAADNgiR54A4W0wAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{\\pi}{2}$$"
],
"text/plain": [
"π\n",
"─\n",
"2"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"integrate(sqrt(1 - x**2), (x, -1, 1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Viimane integraal,$$\\int_{-1}^1 \\sqrt{1-x^2} dx,$$ on juhtumisi ühikulise raadiusega poolringi pindala, seega vastus pidigi tulema $\\pi/2$.\n",
"\n",
"SymPy on teadlik ka erifunktsioonidest, nagu veafunktsioon, Gammafunktsioon jpt. Sageli mõned integraalid või diferentsiaalvõrrandite lahendid, mis elementaarfunktsioonides ei avaldu, saab väljendada selliste erifunktsioonide kaudu:"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFoAAAAtBAMAAADcoWFIAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInarRM2ZVBDdiWbv\nuzJCz3LGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACR0lEQVRIDY2UPWgUQRiG310v5naXrCvYBAk5\nFSyi+I/4g2hjkUJMUERBzFZRPMSrgtq4nFrYHYI/nQEhRapFsDGNBBGVFNHGQoIHV9gIByJ6RmT9\nvlln92Zv9yYD9833vu8zc7M/d8D/MRqJIaVmPqDJldiYUKRGrK9pACW+ryiduKwDuvNyo1vpejuE\nyXfQ14Eip2PPf93yfOOaYOyAW7O9XXq4dIIYPvYQDunpnfRczApxLbGm/wKj/gOwmKmi0x/ltPwX\neMlzB7ROO657eEKQ2cB7LQuM+s4sYUMhjuTSRhjbjsfzuo4VxDpTS/uW2RmR9l5u3NUZqdX5211x\nIZPSvSeai+elVudrQjq+dO0Kd7d9rr1jv7AscVxuy6+4DiSaVTpiejg1zqZt0hnVZ97JxVuTrSWB\nb6egvm3TWAWYS5i0GQ9Kb/Hmxh8cE95nOsKs88CaAF6kUNLRM1rEBZIx/RiwA7szSMe9mTBJ4/5c\nWDiKMwn9mvbGwDLnbcR/OkkFnF8cnKNPvDfRwIYK1zYXdbjfWac0nYS4JtdxLpnxkO5BF01XORjs\nhhnkX2U7xBU8oi1WxDZ0207XvmAziavCUEv54FhwKvqEVvSRA/r6O1vr1ZDaSyqYp9InbzTi3Jhe\naeaR7GXfKvoq2MW/sg9yn/iNBf81LEmvZx6Rjlz2DjjelGZ2Vn9plE4FfejsatZPgzy3wCutFgS5\ntrUn1y4wpwv8XNv0c+0CcwaGVxD12q4Pc+308Pzc4d49ipypKPpdlHX7/wAbtoU5vHB6SAAAAABJ\nRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{\\sqrt{\\pi}}{2} \\operatorname{erf}{\\left (x \\right )}$$"
],
"text/plain": [
"√π⋅erf(x)\n",
"─────────\n",
" 2 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEgAAAAwBAMAAABAsiHYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABuklEQVQ4EY2UPUvDUBSGT23S9COVKIg4NWJx\n8gv0B4iDTkJwUFAHF1FxKYh0Kdh/oJvrdVBHuzi4iBURRSlFf4DdXIooWutWT5Pc294kN8mB9rzn\nfd7cJpfmApjVPzJjCZ9veQMOij7cRDEDEkdBoQSB2E9QKNUIEcJFkg3BSgt7GiOHOSZ5MRUnzDhj\nyiFKMvuNHt3BOmOaUH1Lhbuv0XtK69DnxqYjb1IwB1Cm2tGXBuxHipznR4kD0vGiZZNUq0UlZWYv\nZO9nOcNjUI3dZNHD5ywJrrnZMbxOYxkAXw7fa5Q+JS+b8zIKUTijM6w8D9vD8kNhv+N3q/gJDHbP\nnnqoKmedALexuwB26hV8rID6DeAmboYJHQOogbknkOkWuLIZ6/ZxmbEPF6TGNhU+PVLygRT1VKny\n6as+jKFxpsRCJmLGiFIDtb0HOnM8BN5SfrFcF72g1hUVkKqKdudxuWXFi9gJfqLAXmic+HrEbVRv\n0Js3ozy0p8j6Hx5z7WEC2EHkSsrfAO/o4lmFcVFNanCKTCWAfyVRZfTeHLJoDbZEEYBYI2mIqU2k\n5ktgBuDqMkToTQ8RSmkBoX/ENGSvp1JrkQAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{2}{\\sqrt{\\pi}} e^{- x^{2}}$$"
],
"text/plain": [
" 2\n",
" -x \n",
"2⋅ℯ \n",
"──────\n",
" √π "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display( integrate(exp(-x**2), x) )\n",
"display( diff(erf(x), x) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Jupyteri töölehel arvutuse kirjeldamise huvides oleks mõnikord kasulik, kui saaks tervikliku valemina kuvada nii esialgse avaldamata integraali või tuletise kui ka selle väärtuse, mis saadakse sümbolarvutusega. Avaldamata integraal luuakse käsuga `Integral` ning tuletis käsuga `Derivative` (need on siis vastavate klasside nimed). Sellisel objektil on meetod `doit`, mille väljakutsega saab vastava integraali või tuletise välja arvutada. Viimaks sümbolvõrrandi (mis on klassi `sympy.Equality` objekt) saab tekitada käsuga `Eq`, mille argumentideks on võrrandi vasak ja parem pool. "
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAAAwBAMAAAAobWGlAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAmYkQdqvvRN27IjJm\nVM1kwppwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEwklEQVRYCbWXXWgcVRTHz87M7s7uZGcXrUht\nS5ckDxWhGUtbxAczpa2lH9rFfoh9MEHxRQrug/Y1g6UifTD7YlEEO60oUgsbBR8la6kgUugWfVEf\nsiIWBFlCU63Rxnjux8zc2ZnZvdNuLmTu//zv754zublzZwKwVq25SttapR+Y9/mBhAhkRi0xvH9d\n7KTKsXdnLRU/EM60ByICoN7RbSEcgnwiVQ5tMRUuAW+SYAJEbwR6KEp1UqVp2qnwwbDSAo08f5XB\nKCEO1+O4Lx5142wZD//8o18duHpJhkXmvBUHNvJOnC3jHQKjrbgHZVDC/BULdtSlWL+/mSdr6eBP\nAY70J/1R409fhkTJCYVywdMdAM1G9kt6FzKTtNvx1FNuvN/PLW6/A6ATYiPILl8Bp8Q0VXb9QnPV\nZYAr6OAfLz5tiKZBOf5GH/+oGmUHO5tdOI2U5sBLg2FKzDsRcHzD3rnZ1agfAaNGszJSRbfQguei\ng8S5zO3vvOHrNU95vWa9qAdngnGu4g2E++3vHmtdDFsA2SXd6vVY/MZ+0hcbfDTrcjFlc+F3Bvzh\naxTlthj5WjsJcAN/ws24dSNseJHx8kwdtelyQ+1wMUts3n58H5sF8I9nkH4GjWhT30M7w8EfgvGb\nvwZaVJkGjb72vXGm1NVoemPR8DGALYIOpEm2bX6aGUL9hUrAiCpbo9FZ39vJVCl6/DUVR/ExgF8E\nHcjNbdQGLybU9xc4QKli9YuOb5t1KhV8YmnbtucRrnbsGx/jEooPHFwBdc+J1/ly+f7fRKkui4X6\nzAiuF66cyN98Zutnx18hC6DhDfNsCrt38xZj82chsplx5JRbWIJt8K39DgZKlzYyUbnNprFrcv38\naThl5TZNtrINguJz6WUb6RADyiu0g0/a6gamxKt6EjIdGIMJ6yfRxkP2XzFOrp+rQs42HXwwaX29\nDV42/n5p8i18/OohS0zJdGYJ9CpY8HvvUI6emiqxt3a7b3W7v/USLJ7feO2bllnz6ufq4GUzFimx\nwDqIfwvmGjCJUyC02mSeTqf9TFMAeL8/+7fDv+Lo9TZezIpYn2fj9Sc6LAffBizwr5NVWMDAYKut\nvE1bDR325GNe2rz6PBS6eRuDoD5Zf54t76DErx+eA18XGjVCl8k2fFhyv8dP5N0hH4rkfhWLm8n1\n9Q6odlCf7D+eje+/18gdYXsWVO/5Ywa9mvbIGSW/UlgstgSXyIUWlB70vOT6xl3IWDr+joUGgfGh\n87JlqsTwjz9t3TUS9zT16GMf71OP7t4VGVTXH3vYh5Prw451Y/nzy21jatlGHBfdy2bOken56PFH\n7JStT/2eTMH5+ykd0eL3fc+sQeGTIeDC+g9CsRj0vn+yd8XRoWi1BhP1pEwFl4+oHSrC5xgfu78u\na0FuOilFkW5DHOU3Ul5MIu/ZzzmQZedFXIrL3OTfX/Pe/cSx9+bhl0Gf+j05D1d7jKGEevw3dUzu\nqcSdEgNLWzNVWXRWFkzFnZGm/5MmU4CZiixsxL/2ZKcncLsS/Kg9kvygRGFZp1SBS5JsdloSTIN9\nDnBAki9XJcEUWPHN0YccSX5mThJMgZn4/SVXfwu8kCLv8NFzxqvDT5oi48X9a7D88vX/B1q5G9pX\n7SEFAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\int e^{- x^{2}}\\, dx = C + \\frac{\\sqrt{\\pi}}{2} \\operatorname{erf}{\\left (x \\right )}$$"
],
"text/plain": [
"⌠ \n",
"⎮ 2 \n",
"⎮ -x √π⋅erf(x)\n",
"⎮ ℯ dx = C + ─────────\n",
"⌡ 2 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAOQAAAAwBAMAAADz1suHAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMrvvmVREEIndzSJ2\nZqtw62vAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEZ0lEQVRYCb1XXYgbVRT+JpnMJJlsNkgFwYcN\n9U3QghasK2qKLYhWGqTgQwUHFnwSO9g+tAqbqVjW1pXmrWqhG9QXo9IVC7VC3Vi19We1efChpVYD\nFUS7urF03Uqt6z0zcyeT5N6Znbjtgb33nO9853wzkzv3zgKO3bTWnVdmNDasLkR3WoimLJ8xjvRf\nkWxtMZISg/ALcHckPV2NpMQg3AvMRz7ZbClGx0jqYStS8sjkSDmyTzzClCXm3/LiNCW0+7BGwhDX\nRaPaFQmnqFUps72JRySMQeFMS1JZ052FutnCaxLGoPAGaWHKucu7oEe/RtIeokSuJEId7Hn6LfUr\nSLWllIESW2BQZ4Hp7J1lkgtI1LYK0gNDSgk5ieSOoza1fQ9nW45DwUrYsZdf+lXSZ2qpSpnxL2+d\nMyWU4x5+TpIXwoeXlv4WJCbXf1cQwD707AlyjaIH5AUPSj/xx++G7RGip5z1W8YMoSn3bKN0livp\ntX7yZ02kHmr24xJEwfuSjAurRWf+3idN+h53njvAvM3uNaUaHBXNj69mZgFXRUkfy7cc96APbPc9\n7rDNGxhzo3BJr0JpK7xWNLuSRtXPZU3fdR3VOdVXucFyJGfS1XRPDyc8cuai9tYX+z648ECLxbSL\n6LMXn2FPNc3cLptxLucFF5NL7px91CsbPzk50dXBDbQDGLOSGyvNfJGARBPYibONN4ChGgH76mRv\nk7u/QaNnUkntID7iJPGctJFsZNn1u5KZMjCB/dZWwN2OA1VThUAglfywrK8P8ATuyGPnf2xmW1wy\naQIW3iSi0qYxYA9aFNCQrtffGa3XWxT32oUfvnV4QXypY6zpT2WWo68S9y6TJgvxDw19klOEpgo0\nsrnhTBjudCOvjX9dPGQcodKOJD1YKH9SgXua732d7BABzhupkseMS7pRYJR9HXQomRr0RkeSls8T\nuTZO8eXTYWLGZgFfglLJdWzZB4oErnINqpUpsbVapCx7M7SFRNtgyqrN4qClrgFbLA+RSn4Nnb8k\nweKgP75pQltzqazMX2owmD1Nfe7U5+eZmy0EaeTvuPNnk2O9kob7m7aR20TFcayz4R0LLeuVzJuh\ndCi3lWSEsG09WKNPByPg4+6wPxou92MukuCtRIeXrIjhG0NyTmqbJWP4R7SvLWN24Xq1KxQEewWY\nBw30IQJV+ti4krNN82Al5l3hTYyHP13gJ1Q4c/nZV4HT7DW5LKkYm04s8hNKQokLs58yvfvJ49/w\ntddTr98PtcZPqJ7coGGuiZvxSq4gqVcXkbH5CSXhxIGfZuQMFRTzlqQuWUTFZDnnhJJwYsC5UUae\nZX9KyxEWlVZsPEUM54QSEeJhR0+bQJXVqM1h2V1Wyrg9Ne2dUPHaC9mVIoZslqlYw6aQwE6IxtCh\nND+hJJw4sHoVGbq9r8C+o8Smz+3+5CQ/ocSUWKhxGWeo4A7k7ViF/4M8b9E/DjfURvaUbqgeE8uO\nylbqdbuSlGxnvW6KwLsRvf8DIWkmRwWK0yQAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\frac{d}{d x} \\operatorname{erf}{\\left (x \\right )} = C + \\frac{2}{\\sqrt{\\pi}} e^{- x^{2}}$$"
],
"text/plain": [
" 2\n",
" -x \n",
"d 2⋅ℯ \n",
"──(erf(x)) = C + ──────\n",
"dx √π "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"var('C') # integreerimiskonstant\n",
"a = Integral(exp(-x**2), x)\n",
"b = Derivative(erf(x), x)\n",
"display( Eq(a, a.doit() + C) )\n",
"display( Eq(b, b.doit() + C) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Järgmine lõpmatu rea summa arvutamine kirjeldab näiteks järgmist mõttekäiku ([vana-Kreeka filosoofiast](https://en.wikipedia.org/wiki/Zeno%27s_paradoxes#Dichotomy_paradox) pärinev \"paradoks\"): et läbida teatud vahemaa, tuleb esmalt läbida pool sellest ($1/2$), siis järelejäänud teest veel pool ($1/4$), siis järelejäänud teest veel pool ($1/8$), jne. Selleks kulub aega kokku $$\\sum_{n=1}^\\infty 2^{-n} = \\frac{1}{2} + \\frac{1}{4} + \\frac{1}{8}+ \\ldots$$ On ilmne, et selle rea summa peab tulema 1: "
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAHlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAACGjDitAAAACXRSTlMAVO8Qq5l2zWYZcMvdAAAACXBIWXMAAA7EAAAOxAGV\nKw4bAAAAHUlEQVQIHWNgAANGZQYGk5DJQDYbqQSr03QPsBkAJYgIYEZbtZEAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1$$"
],
"text/plain": [
"1"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('n')\n",
"summation(2**-n, (n, 1, oo))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Üldise geomeetrilise rea summa $1+q+q^2+\\ldots$ pole enam nii kergesti läbinähtav. SymPy nuputab ise välja, et rida koondub vaid $|q|<1$ korral:"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\sum_{n=0}^{\\infty} q^{n} = \\begin{cases} \\frac{1}{- q + 1} & \\text{for}\\: \\left|{q}\\right| < 1 \\\\\\sum_{n=0}^{\\infty} q^{n} & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
" ⎧ 1 \n",
" ⎪ ────── for │q│ < 1\n",
" ∞ ⎪ -q + 1 \n",
" ___ ⎪ \n",
" ╲ ⎪ ∞ \n",
" ╲ n ⎪ ___ \n",
" ╱ q = ⎨ ╲ \n",
" ╱ ⎪ ╲ n \n",
" ‾‾‾ ⎪ ╱ q otherwise \n",
"n = 0 ⎪ ╱ \n",
" ⎪ ‾‾‾ \n",
" ⎪n = 0 \n",
" ⎩ "
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var('n,q')\n",
"S = Sum(q**n, (n, 0, oo))\n",
"Eq(S, S.doit())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"