Osnove grafičkog sučelja

Sage radni list i ćelije

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

Račun je organiziran u tzv. ćelije (cell). Svaka računska (input) ćelija je ograđena pravokutnikom i izvršava se kao cjelina pritiskom na kombinaciju tipki shift-Enter dok je kursor bilo gdje u ćeliji. Sage ispisuje rezultat 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 sve).

{{{id=55| 5-3 2+2 /// }}}

Skup korisničkih računa (user accounts) i radnih listova čini Sage bilježnicu (Sage notebook). (Na računalima u računalnim učionicama FO studenti rade na Sage bilježnicama koje imaju samo jedan (administratorski) account.)

Otvaranje novih ćelija se izvodi stavljanjem miša između postojećih ćelija i klikom kad se pojavi plava horizontalna linija. Shift-klik će otvoriti tekstualnu ćeliju. Brisanje ćelije se izvodi brisanjem sadržaja i onda pritiskom na backspace.

Zadatak 1.1: Izbrišite potpuno gornju input ćeliju, kreirajte novu na njenom mjestu i izračunajte 2+3. Kreirajte zatim tekstualnu ćeliju s nekim tekstom iznad ove.

Važno svojstvo Sage radnog lista je da svaku ćeliju možemo i naknadno editirati i onda ponovno izvršiti tako da pritisnemo shift-Enter dok je kursor bilo gdje (!) u toj ćeliji. (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)  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$\to$Restart worksheet. Varijable svakog pojedinog radnog lista su nezavisne čak i ukoliko na listovima radimo istovremeno.

Elementarno računanje

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

{{{id=62| 3*2+1 /// }}} {{{id=64| sqrt(9) /// }}} {{{id=128| factorial(22) /// }}} {{{id=66| 13^23 /// }}} {{{id=127| 13.^23 /// }}}

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

Eksplicitno pisanje "*" kod množenja se 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).

{{{id=1| implicit_multiplication(True) /// }}} {{{id=67| 3 4 /// }}} {{{id=68| implicit_multiplication(False) #default koji ostavljamo do daljnjeg /// }}} {{{id=69| 3 4 /// }}}

Za zapis velikih brojeva može se koristiti standardni Fortran/C zapis po kojem je npr. $3.2\cdot 10^4$

{{{id=2| 3.2e4 /// }}}

Pridruživanje vrijednosti varijablama izvodi se znakom jednakosti "=".

{{{id=72| x = 4 print x /// }}} {{{id=73| x + 3 /// }}}

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

{{{id=76| sin(pi) /// }}} {{{id=77| log(e) /// }}} {{{id=118| log(sin(pi)) /// }}}

Zadatak 1.2: Izračunajte $\sqrt{2 \sqrt{e^\pi}}$.

Primijetite da nismo 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 n():

{{{id=83| n(_) /// }}}

Ovdje smo također iskoristili vrlo korisni simbol _, koji uvijek znači "rezultat izvršenja posljednje komande", gdje treba naglasiti da se to odnosi na posljednje izvršenje u trenutnoj sesiji, a ne na rezultat koji stoji neposredno iznad u radnom listu. Naime, kako je input ćelije dozvoljeno izvršavati proizvoljnim redom te dvije stvari se mogu razlikovati. Zbog toga simbol _ treba koristiti pažljivo i poželjno ga je eleminirati iz zadnje verzije radnog lista kojeg pohranjujete na dulje vrijeme ili šaljete nekom.

Funkcija n() ima i opcionalni argument "digits" kojim možemo odrediti broj decimala numeričkog približenja:

{{{id=86| n(sqrt(2*sqrt(e^pi)), digits=100) /// }}}

Funkcije često imaju brojne opcionalne argumente koji se proizvoljnim redom navode iza obaveznih argumenata.

Zadatak 1.3: Ispišite broj $\pi$ s točnošću od 500 decimala. Odredite sinus tog broja.

 

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

{{{id=92| I^2 /// }}} {{{id=100| print log(-1+1e-8*I) log(-1-1e-8*I) /// }}}

Vidimo da logaritamska funkcija uredno radi s kompleksnim argumentom i daje nam glavnu granu multifunkcije s argumentom $-\pi < arg(log(z)) \le \pi$.

Zadatak 1.4: Izračunajte $e^{i \pi}$.

Mogućnosti ispisa rezultata:

Sage notebook sučelje može ispisati rezultat računa u različitim formatima:

1. Defaultni ispis jedini omogućuje izravni copy/paste u input ćelije. (Deklariramo prethodno simboličke varijable - o tome će više riječi biti kasnije.)

{{{id=132| var('x n theta') /// }}} {{{id=54| s1 =sum(sin(theta+x)/log(n+x), x, 1, oo) s1 /// }}} {{{id=9| s2 = matrix(ZZ, [[1, 2, 3], [4, 5, 6]]) s2 /// }}}

2. Ljepši ispis koji koristi interni LaTeX i tzv. jsMath dobiva se funkcijom show(), ili aktiviranjem "Typeset" gumba na vrhu notebook sučelja.

{{{id=3| show(s1) show(s2) /// }}}

3. Ispis odgovarajućeg  koda za copy/paste u LaTeX dokument.

{{{id=11| latex(s2) /// }}}

4. Prikaz LaTeX->PDF inaćice u posebnom prozoru (Moguće je da ovo radi samo ukoliko su Sage klijent i server na istoj mašini ili uz pažljivo podešene X-windows autorizacije.)

{{{id=22| view(s2, viewer='pdf') /// }}}

5. Za interni prikaz LaTeX->PNG slika, definiramo pomoćnu funkciju (promatrajte je zasad kao "crnu kutiju")

{{{id=101| def sp_tex(x,name = "temp.png",size = "normal"): """By P. Lutus""" if(type(x) != type("")): x = latex(x) latex.eval("\\" + size + " $" + x + "$",{},"",name) /// }}} {{{id=102| # load('http://www.phy.hr/~kkumer/sp/sp.py') # ne radi u F-107? /// }}} {{{id=13| sp_tex(s1) /// }}} {{{id=30| sp_tex(s2) /// }}}

Za upis matematičkih izraza u tekstualne čelije stavljamo LaTeX kôd unutar dolarskih znakova. Tako se upis '\$ \alpha \$' prikazuje kao $\alpha$. Veće jednadžbe koje trebaju stajati u posebnom redu upisuju se između parova dolarskih znakova. Tako se  \$\$ E = \gamma m c^2 \$\$ prikazuje kao

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

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"  (completion): započnemo li pisati ime neke funkcije, pritisak na tipku TAB daje nam popis svih mogućnosti (na koje možemo klinknuti mišem) ili dovrši pisanje imena jedinstvene funkcije s tim početkom:

{{{id=121| int # stavite kursor neposredno nakon `int` i pritisnite TAB /// }}}

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 radni list. (Ukoliko umjesto jednog stavimo dva upitnika dobijemo ispis kôda koji definira tu funkciju.)

{{{id=123| integral? /// }}}

Za pretraživanje po tekstu dokumentacije koristimo funkciju search_doc() gdje je argument riječ koja nas zanima u navodnicima. (Za kompleksnije pretrage umjesto te riječi mogu se koristiti tzv. regularni izrazi (regular expressions) što uključuje i standardne wildcard simbole poput zvjezdice *.):

{{{id=110| search_doc('bessel') /// }}} {{{id=112| bessel_J(2, 1) /// }}}

Međutim, u praksi je efikasnije umjesto ovakvog pretraživanja po tekstu dokumentacije 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). Dakle, googlanje na "sagemath bessel", daje bolje rezultate. Prva ponuđena stvar je stranica iz Sage dokumentacije o specijalnim funkcijama i prvi navedeni primjeri su upravo sa Besselovim funkcijama.

Zadatak 1.5: Odredite numeričku vrijednost logaritma imaginarnog broja $16 i$ u bazi 4, dakle $\log_{4} 16 i$.

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

Zadatak 1.7: 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_{1}^{\infty} \frac{1}{n^2}$$

Poruke o grešci

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.

{{{id=109| 1/0 /// }}} {{{id=108| sin[2.3] /// }}}

U početku ć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 upotrebe uglastih zagrada (koje služe za pristup elementima (tj. indeksima, subskriptima) polja i matrica), umjesto okruglih zagrada.

{{{id=137| /// }}}