2. Sučelje

2.1. Sage radni list i ćelije

Radni list (worksheet) je skup računalnog Sage kôda s rezultatima i tekstualnim opisom koji je

  • prikazan na jednoj stranici u WWW pregledniku
  • može se pohraniti u jednu datoteku (ekstenzija .sws)

Svi radni listovi jednog korisnika dostupni su putem poveznice Home na vrhu svakog radnog lista. Čitavo ovo grafičko sučelje naziva se Sage bilježnica (Sage notebook). (Postoji i obično tekstualno terminalsko sučelje.)

Račun, tj. računalni kôd radnog lista je organiziran u tzv. ćelije (cell). Svaka računska (input) ćelija je ograđena pravokutnikom i izvršava se kao cjelina na jedan od dva načina:

  1. pritiskom na kombinaciju tipki shift-Enter dok je kursor bilo gdje u ćeliji (Pritisak samo na Enter otvara novi redak u ćeliji),
  2. klikom mišem na gumb Evaluate koji se prikazuje ispod aktivne ćelije.

Sage ispisuje rezultat neposredno ispod ćelije. Ako se eksplicitno ne zatraži drugačije (npr. naredbom print), bit će ispisan samo rezultat zadnjeg računa/komande/retka u toj ćeliji (ali izvršit će se naravno cijela ćelija).

../_images/notebook.png

Napomena

Slika prikazuje Sage radni list otvoren u WWW pregledniku s jednom izvršenom ćelijom i jednom praznom aktivnom ćelijom. U ovom dokumentu ćemo primjere kôda davati onako kako bi izgledali u terminalskom sučelju gdje bi korisnikov upis slijedio nakon prompta sage:. Taj prompt ne smeta ni u ćelijama radnog lista, dakle primjeri iz ovog dokumenta se mogu slobodno kopirati u Sage grafičko sučelje sa ili bez prompta. Jedina razlika je da ukoliko više redaka iz ovog dokumenta kopiramo u jednu ćeliju, nećemo vidjeti međurezultate (ako ih trebamo, dodamo print ispred odgovarajućih redaka. Npr. kôd iz ćelije sa slike će u ovom dokumentu izgledati ovako:

sage: 5-1
4
sage: 1+1
2

Otvaranje novih ćelija se izvodi stavljanjem miša između postojećih ćelija (ili na kraj radnog lista) i klikom u trenutku kad se pojavi plava horizontalna linija. Shift-klik će otvoriti tekstualnu ćeliju u koju stavljamo slobodni tekst i komentare. Brisanje ćelije se izvodi brisanjem sadržaja i onda pritiskom na backspace.

Zadatak 1

Kreirajte novu input ćeliju i izračunajte 2+3. Kreirajte zatim tekstualnu ćeliju s nekim tekstom iznad ove. Izbrišite obje ćeiije.

Važno svojstvo Sage radnog lista je da svaku ćeliju možemo i naknadno editirati i onda ponovno izvršiti. (Editiranje tekstualnih ćelija iniciramo dvostrukim klikom miša negdje na ćeliji.) To je onda sve skupa sličnije radu u tabličnom kalkulatoru (spreadsheet) nego standardnom programiranju. Osim samog sadržaja ćelija, trenutno stanje radnog lista (tzv. sesija, session ili proces) je određeno i vrijednostima varijabli u memoriji računala, a to općenito ovisi o redosljedu kojim su ćelije izvršene. Resetiranje tog stanja se izvodi putem izbornika Action pa Restart worksheet. (Što je korisna operacija u trenucima kad se Sage radni list počne neočekivano ponašati.) Zbog toga je po završetku rada dobro prekontrolirati konzistentnost i reproducibilnost cijelog računa tako da resetiramo sesiju i izvršimo sve ćelije odjednom pomoću izbornikai Action pa Evaluate All.

Svakom radnom listu pripada nezavisni Sage proces s nezavisnim varijablama.

2.2. Elementarno računanje

Sage se može koristiti kao obični kalkulator proizvoljne preciznosti:

sage: 3*2+1
7
sage: sqrt(9)
3
sage: factorial(22)
1124000727777607680000
sage: 13^23
41753905413413116367045797
sage: 13.^23
4.17539054134131e25

Uočite različit tretman cijelih (integer) i realnih (floating point) brojeva. Cijeli brojevi se uvijek tretiraju egzaktno, bez zaokruživanja ili odbacivanja nekih znamenaka.

Eksplicitno pisanje znaka množenja * se djelomično može izbjeći pozivanjem funkcije implicit_multiplication(True), ali je i dalje nužno pisati * prije zagrada (kako bi bilo jasno da nije riječ o pozivanju funkcije). U ovom dokumentu se uvijek eksplicitno piše znak množenja.

Za zapis velikih brojeva može se koristiti standardni Fortran/C zapis po kojem se npr. \(3.2\cdot 10^4\) zapisuje ovako:

sage: 3.2e4
32000.0000000000

Pridruživanje vrijednosti varijablama izvodi se znakom jednakosti “=”.

sage: x = 4
sage: print x
4
sage: x + 3
7

Standardne matematičke funkcije i konstante imaju uobičajena imena i ponašanje:

sage: sin(pi)
0
sage: log(e)
1
sage: log(sin(pi))
-Infinity
sage: oo + 1
+Infinity

Zadatak 2

Izračunajte \(\sqrt{2 \sqrt{e^\pi}}\).

Primijetite da niste dobili numerički već simbolički rezultat. Sage će se uvijek, ako je moguće, odlučiti za egzatni simbolički rezultat. Ako nas ipak zanima numeričko približenje možemo koristiti funkciju numerical_approx(), koja se skraćeno zove i n():

sage: n(sqrt(2*sqrt(e^pi)))
3.10176639383605

Funkcija n() ima i opcionalni argument digits kojim možemo zatražiti i veći broj decimala numeričkog približenja:

sage: numerical_approx(sqrt(2*sqrt(e^pi)), digits=50)
3.1017663938360514951983183136487613918314124732866

Funkcije često imaju brojne opcionalne argumente (keyword arguments) koji se navode proizvoljnim redom, ali svakako iza obaveznih argumenata.

Zadatak 3

Odredite broj \(\pi\) s točnošću od 500 decimala: pridružite tu vrijednost varijabli x i ispišite je. Odredite sin(x).

S kompleksnim brojevima radimo jednostavno. Samo treba imati na umu da je imaginarna jedinica \(\sqrt{-1}\) reprezentirana velikim slovom I.

sage: I^2
-1

Zadatak 4

Izračunajte \(e^{i \pi} + 1\).

Za upis matematičkih izraza u tekstualne čelije stavljamo LaTeX kôd unutar dolarskih znakova. Tako se upis

$\alpha$

unutar retka prikazuje kao \(\alpha\). Veće jednadžbe koje trebaju stajati u posebnom redu upisuju se između parova dolarskih znakova u novom redu. Tako se:

$$ E = \gamma m c^2 $$

prikazuje kao

\[E = \gamma m c^2\]

Za formatiranje ispisa rezultata računa koristimo operator %, te standardne stringove za formatiranje (poznate iz sprintf() C funkcije): Npr. %5.3f formatira realni broj na 5 mjesta ukupno i 3 mjesta iza decimalne točke.)

sage: print "%s = %10.8f ..." % ('Ludolfov broj', pi)
Ludolfov broj = 3.14159265 ...

2.3. Help sustav

Da bismo pronašli potrebnu funkciju te način i primjere njene upotrebe služimo se slijedećim pristupima Sage dokumentaciji. Kao prvo, tu je TAB-nastavljanje (TAB-completion): započnemo li pisati ime neke funkcije, pritisak na tipku TAB dovršava pisanje njenog imena ako je nastavak jedinstven, a ako nije dobivamo popis svih mogućnosti (pa željenu odaberemo mišem ili kursorskim tipkama i tipkom Enter).

Dokumentaciju konkretne funkcije dobijemo tako da nakon imena funkcije stavimo upitnik i onda pritisnemo TAB (dobiveni tekst se može “odlijepiti” u poseban prozor pritiskom na pop-up link u njegovom desnom gornjem kutu). Iz dobivene dokumentacije možemo cut-and-paste-ati primjere u radni list. (Ukoliko umjesto jednog stavimo dva upitnika dobijemo cijeli ispis kôda koji definira tu funkciju.)

Zadatak 5

Otvorite novu ćeliju, utipkajte int pa pritisnite TAB. Odaberite funkciju integrate, dodajte upitnik ? pa ponovno stisnite TAB da dobijete osnovnu dokumentaciju. Prekopirajte jedan primjer upotrebe ove funkcije u istu ćeliju i izvršite je.

Za pretraživanje po cijelom tekstu Sage dokumentacije postoji funkcija search_doc(), ali u praksi je efikasnije koristiti google koji relevantnije rezultate smješta na vrh. Kako je “sage” relativno česta riječ trik je prilikom pretraživanja koristiti kao ključnu riječ “sagemath” (što je alternativno ime tog softvera i nalazi se u WWW adresi Sage projekta).

Zadatak 6

Odredite numeričku vrijednost logaritma imaginarnog broja \(16 i\) u bazi 4, dakle \(\log_{4}(16 i)\), tako da u dokumentaciji nađete kako se odabire drugačija baza funkcije log() (defaultna baza je ona za prirodni logaritam tj. \(e = 2.718...\)).

Zadatak 7

Izvrijednite Eulerovu gama funkciju za z=1/2, dakle \(\Gamma(1/2)\), tako da pronađete u dokumentaciji odgovarajuću funkciju.

Zadatak 8

Proučite upotrebu funkcije sum() za zbrajanje matematičkih redova i izračunajte:

\[\text{(a)} \quad 1+3+5+ \cdots + 61\]
\[\text{(b)} \quad \sum_{x=1}^{\infty} \frac{1}{x^2}\]

2.4. Poruke o greškama

Ako se ogriješimo o matematička ili sintaktička pravila Sage će nam uzvratiti porukom o grešci. Klik mišem lijevo od vrha te poruke daje opširnije informacije (inače, drugi klik potpuno skriva poruku što se može koristiti i za skrivanje svih nepregledno dugačkih ispisa rezultata računa.) Za interpretaciju opširnije poruke potrebno je znanje Python programskog jezika, no ključna informacija je obično u zadnjem retku, koji je odmah vidljiv.

sage: 1/0
Traceback (most recent call last):
...
ZeroDivisionError: rational division by zero
sage: sin[2.3]
Traceback (most recent call last):
...
TypeError: 'Function_sin' object has no attribute '__getitem__'

Početniku će te poruke izgledati nejasno, ali s vremenom će poprimati sve više smisla i treba ih uvijek čitati. Npr. gornja greška “object is unsubscriptable” je posljedica toga što smo za poziv funkcije sin umjesto okruglih zagrada upotrijebili uglate, koje služe za pristup elementima (tj. indeksima, subskriptima) polja i matrica.

Pregled sadržaja

Prijašnja tema

1. Uvod

Slijedeća tema

3. Programiranje