1-OsnoveS
system:sage


<h1>Osnove grafičkog sučelja</h1>
<h2>Sage radni list i ćelije</h2>
<p>Radni list (worksheet) je skup računalnog Sage k&ocirc;da s rezultatima i tekstualnim opisom koji je</p>
<ul>
<li>prikazan na jednoj stranici u WWW pregledniku</li>
<li>može se pohraniti u jednu datoteku (ekstenzija .sws)</li>
</ul>
<p>Račun je organiziran u tzv. ćelije (cell). Svaka računska (input) ćelija je ograđena pravokutnikom i izvr&scaron;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&scaron;it će se naravno sve).</p>

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

<p>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.)</p>
<p><span style="font-size: medium;">Otvaranje novih ćelija se izvodi stavljanjem mi&scaron;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.</span></p>
<p>&diams; <strong>Zadatak 1.1</strong>: Izbri&scaron;ite potpuno gornju input ćeliju, kreirajte novu na njenom mjestu i izračunajte 2+3. Kreirajte zatim tekstualnu ćeliju s nekim tekstom iznad ove.</p>
<p>Važno svojstvo Sage radnog lista je da svaku ćeliju možemo i naknadno editirati i onda ponovno izvr&scaron;iti tako da pritisnemo shift-Enter dok je kursor bilo gdje (!) u toj ćeliji. (Editiranje tekstualnih ćelija iniciramo dvostrukim klikom mi&scaron;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)&nbsp; je određeno i vrijednostima varijabli u memoriji računala, a to općenito ovisi o redosljedu kojim su ćelije izvr&scaron;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.</p>
<h2>Elementarno računanje</h2>
<p>Sage se može koristiti kao obični kalkulator proizvoljne preciznosti:</p>

{{{id=62|
3*2+1
///
}}}

{{{id=64|
sqrt(9)
///
}}}

{{{id=128|
factorial(22)
///
}}}

{{{id=66|
13^23
///
}}}

{{{id=127|
13.^23
///
}}}

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

<p><span style="font-size: small;"><span style="font-size: medium;">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).</span><br /></span></p>

{{{id=1|
implicit_multiplication(True)
///
}}}

{{{id=67|
3 4
///
}}}

{{{id=68|
implicit_multiplication(False)  #default koji ostavljamo do daljnjeg
///
}}}

{{{id=69|
3 4
///
}}}

<p><span style="font-size: medium;">Za zapis velikih brojeva može se koristiti standardni Fortran/C zapis po kojem je npr. $3.2\cdot 10^4$</span></p>

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

<p><span style="font-size: medium;">Pridruživanje vrijednosti varijablama izvodi se znakom jednakosti "=".<br /></span></p>

{{{id=72|
x = 4
print x
///
}}}

{{{id=73|
x + 3
///
}}}

<p><span style="font-size: medium;">Standardne matematičke funkcije i konstante imaju uobičajena imena i pona&scaron;anje:<br /></span></p>

{{{id=76|
sin(pi)
///
}}}

{{{id=77|
log(e)
///
}}}

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

<p><span id="cell_outer_5">&diams; <strong>Zadatak 1.2</strong>: Izračunajte $\sqrt{2 \sqrt{e^\pi}}$.</span></p>



<p>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():</p>

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

<p>Ovdje smo također iskoristili vrlo korisni simbol <strong>_</strong>, koji uvijek znači "rezultat izvr&scaron;enja posljednje komande", gdje treba naglasiti da se to odnosi na posljednje izvr&scaron;enje u trenutnoj sesiji, a ne na rezultat koji stoji neposredno iznad u radnom listu. Naime, kako je input ćelije dozvoljeno izvr&scaron;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 &scaron;aljete nekom.</p>
<p>Funkcija n() ima i opcionalni argument "digits" kojim možemo odrediti broj decimala numeričkog približenja:</p>

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

<p>Funkcije često imaju brojne opcionalne argumente koji se proizvoljnim redom navode iza obaveznih argumenata.</p>
<p><span id="cell_outer_81"><span id="cell_outer_59">&diams; <strong>Zadatak 1.3</strong>: </span></span>Ispi&scaron;ite broj $\pi$ s točno&scaron;ću od 500 decimala. Odredite sinus tog broja.</p>
<p>&nbsp;</p>


<p><span id="cell_outer_16">S kompleksnim brojevima radimo jednostavno. Samo treba imati na umu da je imaginarna jedinica $\sqrt{-1}$ reprezentirana <span><span><span style="position: relative; top: -0.85em;"></span></span></span>velikim slovom "I".</span></p>

{{{id=92|
I^2
///
}}}

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

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

<p><span id="cell_outer_88"><span id="cell_outer_81"><span id="cell_outer_59">&diams; <strong>Zadatak 1.4</strong>: </span></span>Izračunajte $e^{i \pi}$.</span></p>



<h2>Mogućnosti ispisa rezultata:</h2>
<p><span style="font-size: medium;">Sage notebook sučelje može ispisati rezultat računa u različitim formatima:</span></p>
<p><span style="font-size: medium;">1. Defaultni ispis jedini omogućuje izravni copy/paste u input ćelije. (Deklariramo prethodno simboličke varijable - o tome će vi&scaron;e riječi biti kasnije.)<br /></span></p>

{{{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
///
}}}

<p><span style="font-size: medium;">2. Ljep&scaron;i ispis koji koristi interni <a href="http://www.latex-project.org/">LaTeX</a> i tzv. <a href="http://www.math.union.edu/~dpvc/jsMath/">jsMath</a> dobiva se funkcijom show(), ili aktiviranjem "Typeset" gumba na vrhu notebook sučelja.</span></p>

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

<p><span style="font-size: medium;">3. Ispis odgovarajućeg&nbsp; koda za copy/paste u LaTeX dokument.</span></p>

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

<p><span style="font-size: medium;">4. Prikaz LaTeX-&gt;PDF inaćice u posebnom prozoru (Moguće je da ovo radi samo ukoliko su Sage klijent i server na istoj ma&scaron;ini ili uz pažljivo pode&scaron;ene X-windows autorizacije.)<br /></span></p>

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

<p><span style="font-size: medium;">5. Za interni prikaz LaTeX-&gt;PNG slika, definiramo pomoćnu funkciju (promatrajte je zasad kao "crnu kutiju")<br /></span></p>

{{{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)
///
}}}

<p>Za upis matematičkih izraza u tekstualne čelije stavljamo LaTeX k&ocirc;d unutar dolarskih znakova. Tako se upis '<strong><span style="font-family: courier new,courier;">\$ \alpha \$</span></strong>' prikazuje kao $\alpha$. Veće jednadžbe koje trebaju stajati u posebnom redu upisuju se između parova dolarskih znakova. Tako se&nbsp; <strong><span style="font-family: courier new,courier;">\$\$ E = \gamma m c^2 \$\$</span></strong> prikazuje kao</p>
<p>$$ E = \gamma m c^2 $$</p>
<h2>Help sustav</h2>

<p>Da bismo prona&scaron;li potrebnu funkciju te način i primjere njene upotrebe služimo se slijedećim pristupima Sage dokumentaciji. Kao prvo,&nbsp; tu je "TAB-nastavljanje"&nbsp; (completion): započnemo li pisati ime neke funkcije, pritisak na tipku TAB daje nam popis svih mogućnosti (na koje možemo klinknuti mi&scaron;em) ili dovr&scaron;i pisanje imena jedinstvene funkcije s tim početkom:</p>

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

<p>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&ocirc;da koji definira tu funkciju.)</p>

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

<p>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) &scaron;to uključuje i standardne wildcard simbole poput zvjezdice *.):</p>

{{{id=110|
search_doc('bessel')
///
}}}

{{{id=112|
bessel_J(2, 1)
///
}}}

<p>Međutim, u praksi je efikasnije umjesto ovakvog pretraživanja po tekstu dokumentacije koristiti google koji relevantnije rezultate smje&scaron;ta na vrh. Kako je "sage" relativno česta riječ trik je prilikom pretraživanja koristiti kao ključnu riječ "sagemath" (&scaron;to je alternativno ime tog softvera i nalazi se u WWW adresi Sage projekta). Dakle, googlanje na "<a href="http://www.google.com/#sclient=psy&amp;hl=en&amp;q=sagemath+bessel">sagemath bessel</a>", daje bolje rezultate. Prva ponuđena stvar je stranica iz Sage dokumentacije o specijalnim funkcijama i prvi navedeni primjeri su upravo sa Besselovim funkcijama.</p>

<p><span id="cell_outer_17"><span id="cell_outer_88"><span id="cell_outer_81"><span id="cell_outer_59">&diams; <strong>Zadatak 1.5</strong>: </span></span>Odredite numeričku vrijednost logaritma imaginarnog broja $16 i$ u bazi 4, dakle $\log_{4} 16 i$</span></span>.</p>


<p><span id="cell_outer_17"><span id="cell_outer_88"><span id="cell_outer_81"><span id="cell_outer_59">&diams; <strong>Zadatak 1.6</strong>: </span></span>Izvrijednite </span></span>Eulerovu gama funkciju za z=1/2, dakle $\Gamma(1/2)$, tako da pronađete u dokumentaciji odgovarajuću funkciju.</p>

<p><span id="cell_outer_125"><span id="cell_outer_17"><span id="cell_outer_88"><span id="cell_outer_81"><span id="cell_outer_59">&diams; <strong>Zadatak 1.7</strong>: </span></span></span></span></span>Proučite upotrebu funkcije sum() za zbrajanje matematičkih redova i izračunajte:</p>
<p>$$ \text{(a)} \quad 1+3+5+ \cdots + 61 $$</p>
<p>$$ \text{(b)}&nbsp; \quad \sum_{1}^{\infty} \frac{1}{n^2}$$</p>


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

{{{id=109|
1/0
///
}}}

{{{id=108|
sin[2.3]
///
}}}

<p>U početku će te poruke izgledati nejasno, ali s vremenom će poprimati sve vi&scaron;e smisla i treba ih uvijek čitati. Npr. gornja gre&scaron;ka "object is unsubscriptable" je posljedica upotrebe uglastih zagrada (koje služe za pristup elementima (tj. indeksima, subskriptima) polja i matrica), umjesto okruglih zagrada.</p>

{{{id=137|

///
}}}