Python Skripta
-
Upload
milla-bunoza -
Category
Documents
-
view
164 -
download
16
Transcript of Python Skripta
![Page 1: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/1.jpg)
P Y T H O N U R A C U N A R S K O M I N Ž E N J E R S T V U
stefan ivic , bojan crnkovic i jerko škific
Numericke metode, priprema, obrada i vizualizacija podataka
6. travnja 2013. – v0.1
![Page 2: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/2.jpg)
Stefan Ivic, Bojan Crnkovic i Jerko Škific: Python u racunarskom inže-njerstvu, Numericke metode, priprema, obrada i vizualizacija poda-taka, c© 6. travnja 2013.
![Page 3: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/3.jpg)
S A D R Ž A J
i osnove python-a 1
1 uvod 3
1.1 Instalacija 3
1.1.1 Instalacija na Linux platformi 3
1.1.2 Instalacija na Windows platformi 4
1.2 Dodatni paketi 4
1.2.1 Dodatni paketi na Linux platformi 4
1.2.2 Dodatni paketi na Windows platformi 4
1.2.3 Instalacija pomocu upravitelja paketa 5
1.3 Editori i razvojna okruženja 5
1.3.1 Spyder 5
1.3.2 PyDev 5
1.3.3 Kate 6
2 python ljuska i .py skripte 9
2.1 Pokretanje Pythona 9
2.2 Python ljuska kao kalukulator 9
2.3 Python skripte 10
2.3.1 Upotreba posebnih znakova 10
2.4 Moduli 10
2.5 Ispravljanje grešaka u Pythonu 12
3 tipovi podataka 15
3.1 Brojevi 16
3.2 String 17
3.3 Liste 19
3.4 Tuple 21
3.5 Dictionary 22
3.6 Skupovi 23
4 operatori 25
4.1 Aritmeticki operatori 25
4.2 Relacijski operatori ili operatori usporedivanja) 26
4.3 Operatori dodjeljivanja 26
4.4 Logicki operatori 27
4.5 Clanski operatori 27
4.6 Operatori identiteta 28
5 osnovne naredbe za unos i ispis podataka 29
5.1 print 29
5.2 input 30
5.3 raw_input 30
6 uvjetna grananja 31
6.1 if 31
6.2 else 32
iii
![Page 4: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/4.jpg)
iv sadržaj
6.3 elif 33
7 petlje 37
7.1 for 37
7.2 while 38
7.3 break 39
7.4 continue 39
8 funkcije 41
8.1 Definiranje i pozivanje funkcija 41
8.2 Vracanje vrijednosti iz funkcije 42
8.3 Argumenti sa zadanim vrijednostima 43
8.4 Keyword i non-keyword argumenti 44
8.5 Ugnježden definicija funkcije 44
8.6 Lambda funkcije 45
9 python standard library 47
9.1 Matematicke funkcije 47
ii numpy polja i matrice 49
10 zadavanje polja u numpy-u 51
10.1 array 51
10.2 arange 52
10.3 linspace 53
10.4 zeros 53
10.5 ones 54
10.6 eye 54
10.7 diag 55
10.8 meshgrid 56
11 manipulacije sa numpy poljima 57
11.1 Manipulacije sa dimenzijama polja 57
11.2 Transponiranje 58
11.3 Dodavanje i brisanje elemenata polja 59
12 numpy matrice 61
iii priprema , obrada i vizualizacija podataka 63
13 osnovni 2d grafovi 65
13.1 Linijski grafovi 65
13.2 Naprednija kontrola linijskih grafova 69
13.3 Svojstva prozora, prostora crtanja i osi 70
13.4 Dodavanje teksta i pomocnih objekata 71
13.4.1 Naslov 71
13.4.2 Legenda 71
13.5 Spremanje grafova 71
13.6 Polarni grafovi 71
13.7 tips and tricks 71
iv numericke metode 73
14 rješavanje nelinearnih funkcija 75
![Page 5: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/5.jpg)
sadržaj v
14.1 Metoda bisekcije 75
14.2 Newtnova metoda 76
14.3 Brentova metoda 76
15 interpolacije 77
15.1 1D interpolacija 77
15.2 2D i N-D interpolacija 78
v rješavanje modela temeljenih na odj i pdj 81
16 pocetni problemi 83
16.1 Modeliranje otvorenog vodotoka 83
16.1.1 Stacionarno strujanje 85
16.1.2 Maningova formula 86
16.1.3 Uniformno strujanje i normalna dubina 87
16.1.4 Kriticna dubina 89
16.1.5 Hidraulicki skok 89
16.1.6 Numericko rješavanje 91
17 rubni problemi 93
17.1 Savijanje grede 93
17.2 Stacionarno provodenje topline u štapu 95
vi optimizacijske metode 97
18 evolucijski algoritmi 99
vii dodaci 101
a appendix test 103
![Page 6: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/6.jpg)
P O P I S S L I K A
Slika 1 Spyder razvojno okruženje 6
Slika 2 Kate tekstualni editor 7
Slika 3 Dijagram toka if naredbe 31
Slika 4 if-else dijagram toka 32
Slika 5 Dijagram toka za složeni uvjet grananja 34
Slika 6 Dijagram toka while petlje 38
Slika 7 Matplotlib elementi 65
Slika 8 Graf napravljen izvodenjem izvronog koda 29 66
Slika 9 Graf napravljen izvodenjem izvronog koda 30 69
Slika 10 Prikaz legende ma grafu 71
Slika 11 Primjer razlicitih 1D interpolacija 78
Slika 12 Primjer 2D interpolacije 80
Slika 13 Skica poprecnog presjeka otvorenog vodotoka 84
Slika 14 Energetske linije u strujanju fluida otvorenimvodotokom 84
Slika 15 Pravokutni poprecni presjek kanala 87
Slika 16 Trapezni poprecni presjek kanala 88
Slika 17 M-krivulje vodnog lica 91
Slika 18 S-krivulje vodnog lica 91
Slika 19 Numericko rješenje strujanja u otvorenom ka-nalu pravokutnog presjeka 92
Slika 20 Progib elasticne linije grede 95
vi
![Page 7: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/7.jpg)
P O P I S TA B L I C A
Tablica 1 Primjeri oznacavanja brojeva 17
Tablica 2 Aritmeticki operatori 25
Tablica 3 Relacijski operatori 26
Tablica 4 Operatori dodjeljivanja 26
Tablica 5 Logicki operatori 27
Tablica 6 printf formatiranje 29
Tablica 7 Opis nekih funkcija math modula 47
Tablica 8 Opis nekih funkcija cmath modula 47
Tablica 9 Vrste linija 67
Tablica 10 Simboli boja 67
Tablica 11 Vrste markera 68
Tablica 12 Vrijednosti Manningovog koeficijenta za razli-cite izvedbe kanala. 86
vii
![Page 8: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/8.jpg)
P O P I S I Z V O R N O G K O D A
Izvorni kod 1 Podrška za posebne znakove u Python skrip-tama 10
Izvorni kod 2 Korištenje objekata modula 11
Izvorni kod 3 Upotreba dbg modula 13
Izvorni kod 4 Dodavanje i brisanje elemenata liste 20
Izvorni kod 5 Primjer kombiniranje operatora dodjeljivanja,operatora usporedivanja i logickih operatora 27
Izvorni kod 6 Razliciti primjeri ispisa 29
Izvorni kod 7 Jednostavan primjer upotrebe if naredbe 31
Izvorni kod 8 Pisanje složenijeg uvjetovanog grananja 32
Izvorni kod 9 Primjer upotrebe else naredbe 33
Izvorni kod 10 Primjer kombinacije naredbi if, elif i else 34
Izvorni kod 11 Upotreba for naredbe 37
Izvorni kod 12 Naredba for s listom stringova 37
Izvorni kod 13 Naredba for i stirng 37
Izvorni kod 14 Naredba for s listom stringova 38
Izvorni kod 15 Upotreba while naredbe 38
Izvorni kod 16 Upotreba else naredbe u petlji 39
Izvorni kod 17 Upotreba break naredbe 39
Izvorni kod 18 Upotreba continue naredbe 39
Izvorni kod 19 Definicija i pozivanje jednostavne funkcije 41
Izvorni kod 20 Definicija funkcije koja prima argument 42
Izvorni kod 21 Definicija funkcije koja prima više argumenatai vraca vrijednost 42
Izvorni kod 22 Funkcija koja vraca razlicite tipove 43
Izvorni kod 23 Funkcija koja vraca više vrijednosti korsiteci tu-ple 43
Izvorni kod 24 Funkcija sa zadanim argumentom 43
Izvorni kod 25 Spremanje elemenata dijagonale matrice u vek-tor 55
Izvorni kod 26 Mijenjanje dimenzija polja 57
Izvorni kod 27 Mijenjanje dimenzija polja 58
Izvorni kod 28 Transponiranje matrica 58
Izvorni kod 29 Jednostavan graf 66
Izvorni kod 30 Kontrola linija i markera 68
Izvorni kod 31 Prikaz legende na grafu 71
Izvorni kod 32 Primjer pronalaženja korijena funkcija metodombiskecije 75
Izvorni kod 33 Primjer razlicitih 1D interpolacija 77
Izvorni kod 34 Primjer linearne i kubicne 2D interpolacije 79
Izvorni kod 35 Strujanje u pravokutnom kanalu 91
viii
![Page 9: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/9.jpg)
Popis izvornog koda ix
Izvorni kod 36 Rješavanje elasticne linije savijanja 94
![Page 10: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/10.jpg)
x Popis izvornog koda
![Page 11: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/11.jpg)
A C R O N Y M S
DRY Don’t Repeat Yourself
API Application Programming Interface
UML Unified Modeling Language
xi
![Page 12: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/12.jpg)
![Page 13: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/13.jpg)
Dio I
O S N O V E P Y T H O N - A
Python je skriptni programski jezik opce namjene.
![Page 14: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/14.jpg)
![Page 15: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/15.jpg)
1U V O D
Zašto Python? Postoje mnogi razlozi zašto odabrati Python kao inže-njerski alat
• Odlican za pocetnike a istodobno mocan za strucnjake
• Skalabilan, pogodan za velike projekte, kao i one male
• Omogucuje brz razvoj
• Cross-platform, omogucuje razvoj i izvršavanje koda na gotovosvim platformama i arhitekturama
• Ugradiv u kodove pisane u drugim programskim jezicima
• Proširiv sa drugim programskim jezicima
• Objektno orjentiran
• Uredna i elegantna sintaksa
• Stabilan
• Bogatstvo dostupnih paketa i biblioteka
• Specijelizirani paketi za numeriku, statistiku, obradu podatakai vizualizacije
• Otvoreni besplatni kod koji održava velika zajednica progra-mera i znanstvenika
1.1 instalacija
1.1.1 Instalacija na Linux platformi
Gotovo sve Linux distribucije sadže Python pakete u osnovnim repo-zitorijima, ali i vcina distribucija ima inicijalno instaliran Python.
Na openSUSE distribuciji, Python se može instalirati jednostavnomnaredbom:
sudo zypper in python
Nakon instalacije Pythona, možemo provjeriti koja je putanja pythonizvršne datoteke
user@machine:~> type python
python is /usr/bin/python
3
![Page 16: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/16.jpg)
4 uvod
1.1.2 Instalacija na Windows platformi
Za instalaciju Pythona na Windows platformi potrebno je preuzetiinstalacijsku datoteku sa http://www.python.org. Nakon preuzima-nja, pokretanjem instalacijske datoteke zapocinje isntalacijki programkoji omogucuje uredivanje postavki Python instalacije.
Uobicajena je instalacija Pythona zajedno sa dodatnim paketima,na Windows platformi, preko neke od dostupnih Python distribucija(vidi poglavlje 1.2.2.1).
1.2 dodatni paketi
Velika snaga Pythona je dostupnost velikog broja paketa raznih na-mjena. Za inženjerske potrebe, potrebni su dodatni paketi koji omo-gucavaju matricni racun, numericke metode, statisticku obradu po-dataka, vizualizacije, izradu animacija i druge specijalizirane moguc-nosti.
Osnovni paketi, koji ce biti korišteni u ovoj skripti, su:
• Numpy (http://www.numpy.org/),
• SciPy (http://www.scipy.org),
• matplotlib (http://matplotlib.org/) i
• IPython (http://ipython.org/).
Za instalaciju dodatnih python paketa postoje alati za upravlja-nje Python paketima. Najpoznatiji su easy_install, koji dolazi savecinom Python distribucija te pip. pip se može instalirati pomocueasy_install-a:
user@machine:~> sudo easy_install pip
1.2.1 Dodatni paketi na Linux platformi
Za instalaciju dodatnih paketa na openSUSE distribuciji pokrenite na-redbu:
user@machine:~> sudo zypper in python-numpy python-scipy \\
python-matplotlib IPython
1.2.2 Dodatni paketi na Windows platformi
1.2.2.1 Python distribucije
Python distribucije su objedinjane instalacije pythona, raznih dodat-nih paketa te cesto i tekstualnih editora ili razvoijnih okruženja. Dis-tribucije su vecinom ciljane za Windows platformu zbog neprakticnevišestruke instalacije svakog pojedinog softwarea.
![Page 17: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/17.jpg)
1.3 editori i razvojna okruženja 5
Neke od najpopularnijih Python distribucija su:
• pythonxy (http://code.google.com/p/pythonxy/)
• ActivePython (http://www.activestate.com/activepython)
• Entought Python (http://www.enthought.com/python/)
• winpython (http://code.google.com/p/winpython/)
• PortablePython (http://portablepython.com/)
1.2.3 Instalacija pomocu upravitelja paketa
Python upravitelji paketa omogucuju jednostavno instalaciju, osvje-žavanje ili deinstalaciju raznih Python paketa. Iako upravitelji paketanisu dio Pythona, cesto bar jedan upravitelj dolazi sa osnovnom ins-talacijom Pythona.
Valja izdvojiti dva upravitelja python paketa:
• setuptools https://pypi.python.org/pypi/setuptools
• pip https://pypi.python.org/pypi/pip
Primjer instalacije paketa pomocu upravitelja setuptools sa nared-bom easy_install:user@machine:~> sudo easy_install ime_paketa
Primjer instalacije paketa sa naredbom pip:user@machine:~> sudo pip install ime_paketa
1.3 editori i razvojna okruženja
Python koristi pokrece kod iz obicnih tekstualnih datoteka koje jemoguce uredivati u mnogim tekstualnim editorima.
Razvojna okruženja (eng. Integrated Development Environment, IDE),osim što omogucavaju uredivanje koda, sadrže niza alata za lakši ibrži razvoj kao što su jednostavno pokretanje koda iz IDE-a, debug-iranje koda, pracenje ispisa i dr.
1.3.1 Spyder
Spyder (http://code.google.com/p/spyderlib/) je interaktivno ra-zvojno okruženje za Python namjenjeno za znastvenu i inženjerskuprimjenu. Spyder je dostupan za vecinu platformi.
1.3.2 PyDev
PyDev (http://pydev.org/) je dodatak za Eclipse (http://www.eclipse.org/) razvojno sucelje koji nudi mogucnosti za rad sa Python-om.
![Page 18: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/18.jpg)
6 uvod
Slika 1: Spyder razvojno okruženje
1.3.3 Kate
Kate (http://kate-editor.org/) je mocan tekstualni editor, iako radii na Windows platformi, primarno je namjenjen za Linux platformu.
Na openSUSE-u, Kate se može instalirati naredbom:
user@machine:~> sudo zypper in kate
![Page 19: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/19.jpg)
1.3 editori i razvojna okruženja 7
Slika 2: Kate tekstualni editor
![Page 20: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/20.jpg)
![Page 21: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/21.jpg)
2P Y T H O N L J U S K A I . P Y S K R I P T E
Python je interpretirani jezik, a jednostavni Python izrazi mogu se iz-voditi u interaktivnom programskom okruženju pod nazivom ljuska.
2.1 pokretanje pythona
Najjednostavniji nacin za otvaranje Python ljuske (eng. shell) na Win-dows platformi je pokrenuti IDLE, dok je ne Linux platformi dovoljnopokrenuti Python naredbu u terminalu/konzoli. Nakon pokretanjaPythona prikazuju se osnovne informacije o Pythonu (verzija) te tzv.prompt koji je simboliziran sa tri strelice u desno (> > >).
user@machine:~> python
Python 2.7.3 (default, Apr 14 2012, 08:58:41) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
2.2 python ljuska kao kalukulator
Python ljuska odmah izvršava unešene naredbe nakon pritiska natipku Enter (Return). Najjednostavniji Python izrazi su matematickeoperacije pomocu kojih možemo koristiti Python ljusku kao kalkula-tor. Izracun te ispis rezultata matematickih izrazi dešava se u novomretku terminala ili IDLE-a:
>>> 1+1
2
>>>
Matematicke operacije, naravno, možemo medusobno kombinirati ipri tome koristiti zagrade za definiranja redoslijeda operacija. Oprez! Prilikom
dijeljenja cijelihbrojeva rezultat jecijeli broj! Koddecimalnih brojevaobavezno koristitidecimalnu tocku.
>>> 1/5
0
>>> 1./5.
0.2
>>> 1./(5.+2)
0.14285714285714285
>>>
Ljuska može raditi i bazicne operacije sa tekstom tj. nizovima znakova(string).
>>> "Kratki " + "probni " + "tekst."
’Kratki probni tekst.’
>>>
9
![Page 22: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/22.jpg)
10 python ljuska i .py skripte
2.3 python skripte
Python skripte su tekstualne datoteke s ekstenzijom *.py koje sadržePython kod. Izvršavanje .py skripte, zapravo, se pokrece linija po li-nija kao da se je unosi u Python ljusku. Ovo je ocita prednost, pogo-tovo prilikom pokretanja više od nekoliko naredbi.
Datoteke sa ekstenzijom .py, osim kao skripte, koriste se i za defini-ranje vlastitih modula što je detaljnije opisano u poglavlju 2.4.
Osnovni nacin pokretanja python skripte je pokretanje Pythona saspecificiranim .py fajlom:user@machine:~$ python imeskripte.py
Python ce se pokrenuti i izvršiti kod zapisan u skripti.Nakon završetkaizvodenja skriptepomocu python
skripta.py Pythonse gasi!
Ako je prva linija skripte:1 #!/usr/bin/python
tada se na Unix sustavima može izvršavati u terminalu. Za pokretanjeskripte u terminalu nužno je da skripta koristi Unix oznaku za krajreda te da ima dozvole za izvršavanje:user@machine:~$ chmod +x imeskripte.py
Ako je .py datoteka izvršna, tada se može direktno izvršavati:user@machine:~$ ./imeskripte.py
Na Windows sustavima datoteke s ekstenzijom *.py su kod inta-lacije Pythona pridružene programu python.exe. Python skripta sepokrece dvostrukim lijevim klikom miša na skriptu.
2.3.1 Upotreba posebnih znakova
Da bi se koristilo posebne znakove (npr. slova sa kvacicama ili sim-boli) u stringovima, potrebno je u prvoj ili drugoj liniji skripte upisatiposeban komentar:# -*- coding: utf-8 -*-
Izvorni kod 1: Podrška za posebne znakove u Python skriptama
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 print ’Sada možemo koristi slova sa kvacicama!’
5 print ’Ali i razne simbole kao što su ◦ & $’
2.4 moduli
Modul je Python objekt, definiran u odredenoj datoteci, koji sadrži de-finicije varijabli, funkcija i klasa. Obicno su varijable, funkcije i klaseodredenog modula specijalizirane namjene, pa se module može inter-pretirati kao grupiranje koda i najcešce je taj kod slicne namjene.
![Page 23: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/23.jpg)
2.4 moduli 11
Npr. modul math (obraden u poglavlju 9.1) sadrži varijable pi i ekoje predstavljaju matematicke konstante te niz matematickih funk-cija kao što su sqrt, log, pow, exp, sin, cos itd.
Da bi se objekti odredenog modula mogli koristiti u kodu, potrebnoje ucitati (importirati) modul ili ucitati odredeni objekt iz modula.
Ucitavanje modula vrši se pomocu naredbe import cija je osnovnasintaksa
import module_name
gdje je module_name ime modula.Nakon što je modul ucitan, može se koristiti objekte modula (va-
rijable, funkcija i klase) tako da se unese ime modula, tocka te imeobjekta koji se želi koristiti.
Jednom naredbom import može se ucitati više modula na slijedecinacin:
import module1, modul2, modul3
Ucitanom modulu se može dodijeliti novo ime. To se može napra-viti pomocu kljucne rijeci as:
import module_name as new_name
nakon cega se modul može koristiti pomocu novog imena.Moduli cesto sadržavaju velik broj objekata, a njihovim ucitavanjem
bespotrebno se troše memorijski i procesorski resursi. Kako bi se izbje-glo ucitavanje cijelog modula, moguce je iz odredenog modula ucitatisamo odredene objekte:
from module_name import object_name
Ako se direktno ucita objekte iz modula, tada ih se koristiti samopreko imena objekta. Kao i sam modul, moguce je ucitati objekt nekogmodula pod novim imenom:
from module_name import object_name as object_new_name
Za ucitavanje svih objekata odredenog modula koristi se:
from module_name import *
Izvorni kod 2: Korištenje objekata modula
1 #!/usr/bin/python
2
3 # importiraj sys modula
4 import sys
5 print sys.platform # ispisi platformu (operaticni sustav)
6 print sys.version # ispisi verziju Pythona
7
8 # importiraj modul math kao m
9 import math as m
10 print m.pi # ispisi vrijednost broja pi
11 print m.sin(m.pi/2.0) # ispisi vrijednost kosinusa kuta pi/2
12
13 # iz modula datetime importiraj objekt date
![Page 24: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/24.jpg)
12 python ljuska i .py skripte
14 from datetime import date
15 print date.today() # ispisi danasnji datum
16
17 # iz modula random importiraj funkciju random kao nasumicni
18 from random import random as nasumicni
19 print nasumicni() # ispisi nasumicni broj
20
21 # Importiraj sve objekte iz modula string
22 from string import *23 print uppercase # ispis svih velikih slova
24 print lowercase # ispis svih velikih slova
25 print digits # ispis svih znamenaka
linux2
2.7.3 (default, Apr 14 2012, 08:58:41) [GCC]
3.14159265359
1.0
2013-03-05
0.952486831091
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
2.5 ispravljanje grešaka u pythonu
Python ima modul pdb („Python DeBugger") koji pomaže kod otkri-vanja i ispravljanja gršaka u kodu skripte. Ako ne koristite neki spe-cijalizirani editor unutar nekog razvojnog okruženja tada je potrebnopozvati pdb modul na pocetku skripte:
1 import pdb
Na nekom kljucnom mjestu u kodu na kojem se želite zaustaviti mo-rate staviti naredbu:
1 pdb.set_trace()
na primjeru 3 može se vidjeti upotreba pdb modula.Ako koristite editor Spyder tada nije nužno pozvati pdb modul. Do-
voljno je postaviti prekide u kodu dvostrukim lijevim klikom na lije-voj strani dokumenta i pokrenuti skriptu u Debug nacinu rada.
Izvršavanje koda ce se zaustaviti na mjestu koje ste oznacili ulaziteu pdb modul, a u konzoli ce se pojaviti tekst:
(Pdb)
Unutar pdb modula moguce je kontrolirati izvršavanje koda, a naj-cešce se koriste naredbe:
• n (next) izvršava se sljedeca naredba u skripti,
• c (continue) izvrešava se ostatak skripte do sljedeceg prekida,
• s (step into) pdb ulazi u podprogram ili funkciju,
![Page 25: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/25.jpg)
2.5 ispravljanje grešaka u pythonu 13
• r (return) slicno kao naredba c, ali pdb izvršava ostatak podpro-grama ili funkcije do izlaza iz podprograma,
• p var (print) pdb istpis stanja varijable var
• ENTER pdb izvršava zadnju naredbu koja mu je poslana,
• q (quit) zaustavlja izvršavanje skripte.
Izvorni kod 3: Upotreba dbg modula
1 #!/usr/bin/python
2 import pdb
3
4 pdb.set_trace()
5 a=0
6 b=1
7 c=2
8 pdb.set_trace()
9 a=b+c
10 pdb.set_trace()
11 a=b-c
12 print ’kraj’
![Page 26: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/26.jpg)
![Page 27: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/27.jpg)
3T I P O V I P O D ATA K A
Varijable se ne moraju explicitno deklarirati. Naime, deklaracija se de-šava prilikom pridruživanja vrijednosti varijabli. Odnosno, varijablese pridružuju memorijskim lokacijama na kojima je zapisana vrijed-nost. Znak jednakosti = se koristi za pridruživanje vrijednosti varija-blama. Na primjer:
1 #!/usr/bin/python
2
3 brojac = 100 # Integer
4 duljina = 1000.0 # Float
5 ime = ’Hrvoje’ # String
6
7 print brojac
8 print duljina
9 print ime
Ovdje su 100, 1000.0 i Hrvoje vrijednosti pridružene varijablamabrojac, duljina i ime. Program ce producirati sljedeci rezultat:
100
1000.0
Hrvoje
Moguce je pridružiti jednu vrijednost u više varijabli. Tada sve va-rijable gledaju na istu memorijsku lokaciju. Odnosno:
1 #!/usr/bin/python
2 a = b = c = 1
3 c = 5
4 print a
što rezultira
5
Takoder je moguce pridružiti više vrijednosti u više varijabli.
1 #!/usr/bin/python
2 a, b, c = 1, 2, ’Hrvoje’
Varijablama a i b se pridružuju memorijske lokacije na kojima su zapi-sane vrijednosi 1 i 2, dok je varijabli c pridružena memorijska lokacijana kojoj je zapisana vrijednost Hrvoje.
Varijable te njihov memorijski prostor moguce je pobrisati nared-bom del.
>>> a = 10
>>> print a
10
>>> del a
>>> print a
Traceback (most recent call last):
15
![Page 28: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/28.jpg)
16 tipovi podataka
File "<stdin>", line 1, in <module>
NameError: name ’a’ is not defined
>>> b = c = 2
>>> print b, c
2 2
>>> del b
>>> print b, c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name ’b’ is not defined
>>> print c
2
Python podržava pet osnovnih tipova podataka;
• Numbers
• String
• List
• Tuple
• Dictionary
Tip podataka odredene varijable može se dobiti naredbom type:
>>> a=10
>>> b=11.2
>>> c=’Rijeka’
>>> type(a), type(b), type(c)
(<type ’int’>, <type ’float’>, <type ’str’>)
3.1 brojevi
To su nepromjenjivi(immutable) tipovi podataka, odnosno promjenavrijednosti rezultira novim alociranim objektom. Numericki tip po-datka se kreira pridruživanjem vrijednosti varijabli. Odnosno
1 #!/usr/bin/python
2 var1 = 1
3 var2 = 10
Takoder je moguce pobrisati referencu na numericki objekt koristecidel naredbu. Sintaksa izgleda ovako:
del var1[,var2[,var3[....,varN]]]]
Primjer:
1 #!/usr/bin/python
2 del var
3 del var_a, var_b
Python podržava cetiri numericka tipa
• int
![Page 29: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/29.jpg)
3.2 string 17
• long
• float
• complex
Nekoliko primjera oznacavanja numerickih podataka ja prikazana uTablici 1. Moguce je koristiti i malo slovo L za oznaku long, iako se
int long float complex
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-783 0122L -21.9 9.322e-36j
-0490 0xDEFABCECBDAECBFBAEl -90. .876j
-0x260 535633629843L -32.54e100 .6545+0J
0x69 -052318172735L 70.2-E12 4.53e-7j
Tablica 1: Primjeri oznacavanja brojeva
takvo oznacavanje ne preporuca zbog velike slicnosti sa brojem 1.
3.2 string
Iako je mogucedefinirati string sajednostrukim idvostrukimnavodnicima,preporuka je da sekoriste jednostrukinavodnici.
Stringovi su definirani kao slijed znakova izmedu navodnika, jednos-trukih (apostrofi) ili dvostrukih. Jednom zadane stringove je nemo-guce mijenjati jer su stringovi, u Pythonu, nepromjenjivi (imutable)tip podatka. Niz funkcija koje rade promjene nad string varijabamazapravo kreiraju kopije izvorne string varijable.
Dijelove stringova (znakove ili niz znakova - string) je moguce do-hvatiti operatorima [] i [:] sa indeksima koji pocinju od 0 na pocetkustringa sve do -1 na kraju.
Znak plus (+) oznacava spajanje (concatenation), a asterisk (∗) jeoperator ponavljanja. Odnosno:
1 #!/usr/bin/python
2
3 str = ’Hello World!’ # zadavanje sa jednostrukim navodnicima
4 ime = "Rudi" # zadavanje sa dvostrukim navodnicima
5
6 print str, ime # print cijelog stringa
7 print str[0] # print prvog znaka u stringu
8 print str[2:5] # print od treceg do petog znaka
9 print str[2:] # print znakova od treceg do zadnjeg
10 print str * 2 # print stringa dva puta
11 print str + ’TEST’ # print concatenated string
Što ce rezultirati
Hello World! Rudi
H
llo
![Page 30: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/30.jpg)
18 tipovi podataka
llo World!
Hello World!Hello World!
Hello World!TEST
Nad stringovima je moguce izvoditi niz specijaliziranih operacijapomocu funkcija koje su dostupne za varijable tipa string.
Funkcije za pretraživanje stringova:
count(sub[, start[, end]])
endswith(suffix[, start[, end]])
find(sub[, start[, end]])
index(sub[, start[, end]])
rfind(sub [,start [,end]])
rindex(sub[, start[, end]])
startswith(prefix[, start[, end]])
Funkcije za mjenjanje znakova:
expandtabs([tabsize])
replace(old, new[, count])
translate(table[, deletechars])
Funkcije za provjeru vrste znakova:
isalnum()
isalpha()
isdigit()
isspace()
Funkcije za rad sa velikim i malim slovima:
capitalize()
islower()
istitle()
isupper()
lower()
swapcase()
title()
upper()
Funkcije za poravnanje teksta:
center(width[, fillchar]
ljust(width[, fillchar])
rjust(width[, fillchar])
zfill(width)
Funkcije za spajanje i razdvajanje stringova:
join(seq)
partition(sep)
rpartition(sep)
split([sep [,maxsplit]])
splitlines([keepends])
rsplit([sep [,maxsplit]])
Funkcije za brisanje pocetnih i krajnjih znakova:
lstrip([chars])
rstrip([chars])
strip([chars])
Funkcije za encoding stringova:
![Page 31: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/31.jpg)
3.3 liste 19
decode([encoding[, errors]])
encode([encoding[,errors]])
3.3 liste
Lista sadrži podatke odvojene zarezima i omedene uglatim zagra-dama. Iako je slicna listama u C jeziku, podaci python liste mogubiti razlicitog tipa. Kao i kod stringova, pristupanje vrijednostima ulisti je moguce pomocu operatora [ ] i [ : ] sa indeksima koji pocinjuod 0 na pocetku stringa sve do -1 na kraju. Znak plus (+) se koristi zaoperator spajanja (concatenation) stirngova, a asterisk (∗) je operatorponavljanja Iako lista može biti
heterogena(sadržavati razlicitetipove podataka),preporuka je koristitilistu kao spremnikhomogenih podataka.Za heterogenepodatke se preporucatuple (poglevlje3.4)
1 #!/usr/bin/python
2
3 list = [ ’abcd’, 786 , 2.23, ’hrvoje’, 70.2 ]
4 tinylist = [123, ’hrvoje’]
5
6 print list # print cijele liste
7 print list[0] # print prvog elementa liste
8 print list[1:3] # print od drugog do treceg elementa liste
9 print list[2:] # print od treceg do zadnjeg elementa
10 print tinylist * 2 # print liste dva puta
11 print list + tinylist # print concatenated lists
Što ce rezultirati
[’abcd’, 786, 2.23, ’hrvoje’, 70.2]
abcd
[786, 2.23]
[2.23, ’hrvoje’, 70.2]
[123, ’hrvoje’, 123, ’hrvoje’]
[’abcd’, 786, 2.23, ’hrvoje’, 70.2, 123, ’hrvoje’]
Za manipulaciju listama cesto se koristi naredba len za provjerubroja elemenata liste, naredbom insert se umece novi element u listute naredba del kojom se brišu pojedini elementi iz liste.
1 #/user/bin/python
2
3 list = [2,3,4,5]
4 print(len(list)) #broj elemnata u listi
5 print list
6 list.insert(0,1) #umetanje elementa 1 u listu na prvu poziciju
7 print list
8 del list[-1] #brisnje zadnjeg elementa iz liste
9 print list
4
[2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
Naredbom range moguce je stvoriti listu brojeva u aritmetickomnizu što je cesto potrebno kod korištenja for petlje (poglavlje 7.1).Sintaksa naredbe range je
![Page 32: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/32.jpg)
20 tipovi podataka
range(stop),
range(start, stop),
range(start, stop, step),
gdje je start prvi element, stop je gornja granica i step je korakaritmetickog niza.
1 #/user/bin/python
2
3 list=range(7) # aritmeticki niz 0,..,6
4 print list
5 list = range(2,7) # aritmeticki niz 2,..,6
6 print list
7 list = range(0,7,2) # aritmeticki niz s korakom 2
8 print list
[0, 1, 2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[0, 2, 4, 6]
Naredbe za dodavanje elemenata u listu su:
append(x)
insert(i, x)
extend(L)
append dodaje element x na kraj liste, insert ubacuje element x napoziciju i a extend proširuje postojecu listu sa listom L.
Naredbe za brisanje elemenata iz liste su:
remove(x)
pop(i)
del L[index]
remove briše prvi element koji ima vrijednost x a pop briše elementna poziciji i. Naredba del L[index] briše element list L na indeksuindex.
Osim funkcija za brisanje i dodavanje elemenata, Python liste imajujoš ugradenih prakticnih funkcija. index vraca indeks prvog elementakoji ima vrijednost x, count prebrojava sve elemente koji su jednaki x,sort sortira elemente liste a reverse rasporeduje elemente u obrnu-tom redosljedu od inicijalnog.
index(x)
count(x)
sort()
reverse()
Izvorni kod 4: Dodavanje i brisanje elemenata liste
1 ljudi = [’Marko’, ’Mirela’, ’Luka’]
2 nadljudi = [’Chuck’,’Arnold’,’Steven’,’Silvester’]
3
4 ljudi.append(’Igor’)
5 print ljudi
6 nadljudi.insert(1,’Anita’)
7 print ljudi
8 nadljudi.extend(ljudi)
![Page 33: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/33.jpg)
3.4 tuple 21
9 print nadljudi
10
11 nadljudi.pop(1)
12 print nadljudi
13 nadljudi.remove(’Igor’)
14 print nadljudi
15 del nadljudi[4:]
16 print nadljudi
17
18 print ljudi.index(’Marko’)
19 ljudi.append(’Marko’)
20 print ljudi.count(’Marko’)
21
22 nadljudi.sort()
23 print nadljudi
24 nadljudi.reverse()
25 print nadljudi
[’Marko’, ’Mirela’, ’Luka’, ’Igor’]
[’Marko’, ’Mirela’, ’Luka’, ’Igor’]
[’Chuck’, ’Anita’, ’Arnold’, ’Steven’, ’Silvester’, ’Marko’, ’Mirela’,
’Luka’, ’Igor’]
[’Chuck’, ’Arnold’, ’Steven’, ’Silvester’, ’Marko’, ’Mirela’, ’Luka’,
’Igor’]
[’Chuck’, ’Arnold’, ’Steven’, ’Silvester’, ’Marko’, ’Mirela’, ’Luka’]
[’Chuck’, ’Arnold’, ’Steven’, ’Silvester’]
0
2
[’Arnold’, ’Chuck’, ’Silvester’, ’Steven’]
[’Steven’, ’Silvester’, ’Chuck’, ’Arnold’]
3.4 tuple
Tuple je tip podatke slican listi. Sastoji se od vrijednosti odvojenihzarezom i za razliku od listi omeden zagradama (). Python dopuštafleksibilnost izostavljanja zagrada prilikom definiranja tuplea.
Postoji mnogo slicnosti sa listama, ali i nekoliko temeljnih razlika:
• pristupanje elementima liste i tuplea vrši se na identican nacin(preko indeksa)
• i list i tuple su iterabilni
• lista može mijenjati broj elemenata i vrijednosti elemenata, doktuple ne može
• nad tupleom se ne mogu provoditi operacije koje mjenjaju samtuple (sort, remove i sl.)
1 #!/usr/bin/python
2
3 tuple = ( ’abcd’, 786 , 2.23, ’hrvoje’, 70.2 )
4 tinytuple = (123, ’hrvoje’)
5
![Page 34: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/34.jpg)
22 tipovi podataka
6 print tuple # print liste
7 print tuple[0] # prints prvog elementa liste
8 print tuple[1:3] # print od drugog do treceg elementa liste
9 print tuple[2:] # print od treceg do zadnjeg elementa
10 print tinytuple * 2 # print liste dva puta
11 print tuple + tinytuple # print liste nastale spajanjem dvije liste
12
13 istotuple = 2, True, ’teskt’ # Zadavanje tuplea bez zagrada
14 print istotuple
Što ce rezultirati
(’abcd’, 786, 2.23, ’hrvoje’, 70.200000000000003)
abcd
(786, 2.23)
(2.23, ’hrvoje’, 70.200000000000003)
(123, ’hrvoje’, 123, ’hrvoje’)
(’abcd’, 786, 2.23, ’hrvoje’, 70.200000000000003, 123, ’hrvoje’)
(2, True, ’teskt’)
Sljedeci kod ce producirati grešku u liniji 5, jer smo pokušali promije-niti vrijednost u tuple-u
1 #!/usr/bin/python
2
3 tuple = ( ’abcd’, 786 , 2.23, ’hrvoje’, 70.2 )
4 list = [ ’abcd’, 786 , 2.23, ’hrvoje’, 70.2 ]
5 tuple[2] = 1000 # greska
6 list[2] = 1000 # ok
Tuple se vrlo cesto koristi za višestruko dodjeljivanje:
>>> a, b, c = 3, 10, ’neki tekst’
>>> print a
3
>>> print b
10
>>> print c
neki tekst
što se cesto koristi prilikom vracanja više vrijednosti iz funkcije (po-glavlje 8.2)
3.5 dictionary
Dictionary možemo smatrati jednostavnim pridruživanjem odnosnopreslikavanjem svih elemenata jednog skupa elementima drugog skupa.
1 #!/usr/bin/python
2
3 dict = {}
4 dict[’jedan’] = ’Ovo je jedan’
5 dict[2] = ’Ovo je dva’
6
7 tinydict = {’ime’: ’hrvoje’,’code’:6734, ’odjel’: ’admin’}
8
9 print dict[’jedan’] # print vrijednosti ’jedan’
10 print dict[2] # print vrijednosti za 2
11 print tinydict # print cijelog dictionary
![Page 35: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/35.jpg)
3.6 skupovi 23
12 print tinydict.keys() # print svih kljuceva
13 print tinydict.values() # print svih vrijednosti
Što ce rezultirati
Ovo je jedan
Ovo je dva
{’odjel’: ’admin’, ’code’: 6734, ’ime’: ’hrvoje’}
[’odjel’, ’code’, ’ime’]
[’admin’, 6734, ’hrvoje’]
Objekti tipa dict nemaju poredane elemente.
3.6 skupovi
>>> basket = [’apple’, ’orange’, ’apple’, ’pear’, ’orange’, ’banana’]
>>> fruit = set(basket) # create a set without duplicates
>>> fruit
set([’orange’, ’pear’, ’apple’, ’banana’])
>>> ’orange’ in fruit # fast membership testing
True
>>> ’crabgrass’ in fruit
False
>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set(’abracadabra’)
>>> b = set(’alacazam’)
>>> a # unique letters in a
set([’a’, ’r’, ’b’, ’c’, ’d’])
>>> a - b # letters in a but not in b
set([’r’, ’d’, ’b’])
>>> a | b # letters in either a or b
set([’a’, ’c’, ’r’, ’d’, ’b’, ’m’, ’z’, ’l’])
>>> a & b # letters in both a and b
set([’a’, ’c’])
>>> a ^ b # letters in a or b but not both
set([’r’, ’d’, ’b’, ’m’, ’z’, ’l’])
![Page 36: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/36.jpg)
![Page 37: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/37.jpg)
4O P E R AT O R I
Operatori su osnovni dio Pythona i omogucuju operacije na varija-blama (operandima). Najcešce se povezuju sa algebarskim matema-tickim operacijama, medutim operatori mogu biti i “ne matematicke”naravi.
Python operatore možemo podjeliti prema namjeni:
• Aritmeticki operatori
• Relacijski operatori ili operatori usporedivanja
• Operatori dodjeljivanja
• Logicki operatori
• Bitovni operatori
• Clanski operatori
• Operatori identiteta
ili s obzirom na broj operanada:
• Unarni operatori (jedan operand)
• Binarni operatori (dva operanada)
4.1 aritmeticki operatori
Aritmeticki operatori omogucuju osnovne matematicke operacije nabrojevima. Rezultat aritmetickog operatora je uvijek broj tj. varijablatipa float ili int, ovisno o tipovima operanada..
Operator Opis Primjer za x=9.0 i y=2.0
+ Zbrajanje x+y daje 11
- Oduzimanje x-y daje 7
* Množenje x*y daje 18
* Dijeljenje x/y daje 4.5
% Ostatak dijeljenja x%y daje 1
// Cjelobrojno dijeljenje x//y daje 4
** Potenciranje x**y daje 81
Tablica 2: Aritmeticki operatori
25
![Page 38: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/38.jpg)
26 operatori
4.2 relacijski operatori ili operatori usporeðivanja)
Relacijski operatori omogucavaju usporedivanje vrrijednosti varijabli.Rezultat relacijskih operatora je varijabla tipa bool i može poprimitivrijednosti (True ili False).
Operator Opis Primjer za x=9.0 i y=2.0
== Jednakost x==y daje False
!= Nejednakost, razlicitost x!=y daje True
<> Nejednakost, razlicitost x<>y daje True
> Vece x>y daje True
>= Vece ili jednako x>=y daje True
< Manje x<y daje False
<= Manje ili jednako x<=y daje False
Tablica 3: Relacijski operatori
4.3 operatori dodjeljivanja
Operator dodjeljivanja služi za dodjeljivanje vrijednosti varijabli. Pos-toje, proširenja kojima se može kombinirati aritmeticke operatore ioperator dodjeljivanja.
Operator Opis Primjer za x=9.0 i y=2.0
= Dodjeljivanje x=y dodjeljuje vrijednost2.0 varijabli x
+= Zbrajanje i dodjeljiva-nje
x+=y je isto što i x=x+y, xpoprima vrijednost 11.0
-= Oduzimanje i dodjelji-vanje
x-=y je isto što i x=x-y, xpoprima vrijednost 7.0
*= Množenje i dodjeljiva-nje
x*=y je isto što i x=x*y, xpoprima vrijednost 18.0
/= Dijeljenje i dodjeljiva-nje
x/=y je isto što i x=x/y, xpoprima vrijednost 4.5
%= Ostatak dijeljenja i do-djeljivanje
x%=y je isto što i x=x%y, xpoprima vrijednost 1.0
//= Cjelobrojno dijeljenje idodjeljivanje
x//=y je isto što i x=x//y,x poprima vrijednost 4.0
**= Potenciranje i dodjelji-vanje
x**=y je isto što i x=x**y,x poprima vrijednost 81.0
Tablica 4: Operatori dodjeljivanja
![Page 39: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/39.jpg)
4.4 logicki operatori 27
4.4 logicki operatori
Logicki operatori and, or i not omogucavaju operacije na bool vari-jablama. and i or su binarni operatori logicko i i logicko ili dok je not
unarni operator logicko ne. Rezultat logickih operatora je uvijek bool
varijabla.
a b a and b a or b not b
True True True True False
True False False True True
False True False True
False False False False
Tablica 5: Logicki operatori
Izvorni kod 5: Primjer kombiniranje operatora dodjeljivanja, operatora us-poredivanja i logickih operatora
1 #! /usr/bin/python
2
3 a = 10
4 b = 1
5 c = 15
6
7 d = a < b
8 print d
9
10 e = a > b and c > b
11 print e
12
13 f = a > c or not b > c
14 print f
False
True
True
4.5 clanski operatori
Clanski opratori služe za odredivanje pripadnosti odredenoj listi. Os-novni clanski operator je operator in, i može se proširiti sa logickimoperatorom not te rvot oprator not in. Rezultat clanskih opratora jebool varijabla koja daje saznanje da li zadani element pripada listi iline pripada list.
>>> a = [1, 2, 3, 8, 6]
>>> 2 in a
True
>>> 3 not in a
False
![Page 40: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/40.jpg)
28 operatori
>>> 5 not in a
True
4.6 operatori identiteta
Operatori identita usporeduju da li su Python objekti zapisani naistom mjestu u memoriji. Postoji operator is i is not koji usporedujuid Python objekta. id Python objekta se može dohvatiti naredbom id.
>>> a=[1, 2, 3]
>>> b=[1, 2, 3]
>>> id(a)
139967012502704
>>> id(b)
139967012502848
>>> a is b
False
>>> b=a
>>> id(b)
139967012502704
>>> a is b
![Page 41: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/41.jpg)
5O S N O V N E N A R E D B E Z A U N O S I I S P I S P O D ATA K A
5.1 print
Iz Python koda moguce je ispisivati poruke u konzolu pomocu na-redbe print. Osnovna sintaksa za ispisivanje je
print variable
gdje je variable ima varijable ciju vrijednost se želi ispisati.Moguce je ispisivati vrijednosti više varijabli:
print variable1, variable2
Naprednije mogucnosti ispisa moguce je kontrolirati pomocu uba-civanja vrijednosti varijabli u string pomocu printf formata. Simbo-lom % i pripadajucim znakom za tip podatka može se u stringu odre-duju pozicije na koje se želi ubaciti vrijednosti varijabli, a nakonstringa i simbola % slijede imena samih varijabli.
>>> var_a=7
>>> var_b=13.54592
>>> var_str = ’a iznosi %d, b iznosi %f’ % (var_a, var_b)
>>> print var_str
a iznosi 7, b iznosi 13.545920
Primjer Opis
%s String
%d Cijeli broj
%f Decimalni broj
%.2f Decimalni broj sa dvije decimale
%10.3d Decimalni broj sa dvije decimale i rezerviranihnajmanje 10 znakova
Tablica 6: printf formatiranje
Izvorni kod 6: Razliciti primjeri ispisa
1 print ’Ispisi ovo na ekranu!’
2 print ’Ispisi’ + ’ jos’ + ’ ovo.’
3
4 a=12
5 type(a)
6 print a
7 print ’a=’, a
8 print ’a=’ + str(12)
9 print ’Ovo je a:%d’ % (a)
29
![Page 42: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/42.jpg)
30 osnovne naredbe za unos i ispis podataka
10 print ’Ovo je a:%.2d’ % (a)
11
12 b=15.365982
13 type(b)
14 print ’Ovo je b:’,b
15 print ’Ovo je b:’+str(b)
16 print ’Ovo je b:%f’ % (b)
17 print ’Ovo je b:%.2f’ % (b)
18 print ’Ovo je b:%10.3f’ % (b)
19
20 print ’ovo je a: %d a ovo je b: %f’ % (a,b)
21
22 print ’a = {broj_a}, b = {broj_b}’.format(broj_a = a, broj_b = b)
23 print ’a = {broj_a}, b = {broj_b:.2f}’.format(broj_a = a, broj_b = b)
24 print ’a = {broj_a:8d}, b = {broj_b:8.2f}’.format(broj_a = a, broj_b = b)
Ispisi ovo na ekranu!
Ispisi jos ovo.
12
a= 12
a=12
Ovo je a:12
Ovo je a:12
Ovo je b: 15.365982
Ovo je b:15.365982
Ovo je b:15.365982
Ovo je b:15.37
Ovo je b: 15.366
ovo je a: 12 a ovo je b: 15.365982
a = 12, b = 15.365982
a = 12, b = 15.37
a = 12, b = 15.37
5.2 input
5.3 raw_input
![Page 43: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/43.jpg)
6U V J E T N A G R A N A N J A
Odredene naredbe ili djelove koda moguce je izvršavati ili preskocitiovisno o vrijednosti postavljenog logickog uvjeta.
6.1 if
Logičkiuvjet
NaredbeAko je uvjetzadovoljen
Ako uvijet nije zadovoljen
Slika 3: Dijagram toka if naredbe
Slika 3 prikazuje jednostavno grananje u programskom kodu.Osnovna sintaksa if naredbe je
if condition : command
Navedeni izraz uvjetuje izvršavanje naredbe command (ili više na-redbi) na temelju logickog uvjeta condition. Zadane naredbe ce seizvršiti samo ako je logicki uvijet zadovoljen.
Izvorni kod 7: Jednostavan primjer upotrebe if naredbe
1 #!/usr/bin/python
2
3 a = input("a: ")
4 if a < 0: a = -a
5 print a
Pokretanjem Izvornog koda 8 i utipkavanjem pozitivnog broja is-piše se utipkani broj:user@machine:~> python if_01.py
a: 5
5
Medutim, utipkavanjem negativnog broja zadovoljava se postavljenilogicki uvjet i izvrši se operacija a = -a te se potom ispiše pozitivnavrijednost utipkanog broja:user@machine:~> python if_01.py
a: -11
11
31
![Page 44: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/44.jpg)
32 uvjetna grananja
U slucaju kad postoji više naredbi uvjetovanih istim logickim uvje-tom, naredbe možemo objediniti pod jednim uvjetom te ih odvojitisa tocka-zarezom (;). Ako su uvjetovane naredbe kompleksne ili ihima više, naredbe pišemo u uvucenim recima nakon if naredbe. Sveuvucene naredbe do prvog retka koji je poravnat sa if naredbom suuvjetovane.
Izvorni kod 8: Pisanje složenijeg uvjetovanog grananja
1 #!/usr/bin/python
2
3 a = 0
4 b = input("b: ")
5 c = input("c: ")
6
7 if b < 0: a = 1; b = -b
8 print a, b
9
10 if c < b:
11 a = 2
12 b = c - b
13 c = c +1
14 a = b + c
15 print a, b, c
user@machine:~> python if_02.py
b: -6
c: 4
1 6
3 -2 5
6.2 else
Ova naredba omogucuje složeniji oblik grananja od naredbe if. Na-redba ima dvije grane koje se mogu izvršiti u ovisnosti o uvjetu.Svaka grana/mogucnost omogucuje izvršavanje pripadajucih naredbi(Slika 4).
Logičkiuvjet
Naredbe B
Ako je uvjetzadovoljen
Ako uvijet nije zadovoljen
Naredbe A
Slika 4: if-else dijagram toka
![Page 45: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/45.jpg)
6.3 elif 33
else naredba koristi se u paru sa if i služi za grananje u slucajuda uvjet nije zadovoljen.
Sintaksa naredbe je:if condition : command1
else: command2
Izvorni kod 9: Primjer upotrebe else naredbe
1 #!/usr/bin/python
2
3 a = input("a: ")
4 b = input("b: ")
5
6 if a < b:
7 b = a
8 a = 0
9 else:
10 a = b
11 b = 0
12
13 print a, b
user@machine:~> python if_else_01.py
a: 1
b: 8
0 1
user@machine:~> python if_else_01.py
a: 5
b: 3
3 0
6.3 elif
Za dodatna grananja uvjetovana novim logickim uvjetima (Slika 5)služi naredba elif. Iako se sa ugnježdenim grananjem može posticiisti rezultat, elif omogucuje jednostavnije i preglednije grananje al-goritma.
Naredba elif omogucuje grananje u alogritmu samo ako prethodniuvjeti (if ili elif) nisu zadovoljeni. Treba napomenuti da se u slucajukorištenja if-elif-else grananja uvijek izvrši samo jedan set uvjeto-vanih naredbi.
Iz same definicije dodatnog uvjetnog grananja, naredba elif uvijekdolazi u kombinaciji sa naredbom if, te se upotrebljava u sljedecojosnovnoj sintaksiif condition1 : command1
elif condition2 : command2
Kao ni u slucaju upotrebe else naredbe dodatno grananje se moranapisati u novom retku. Uobicajeno je da se naredbe koje slijede na-kon uvjeta pišu u novom uvucenom retku.
Proširena upotreba ukljucuje kombinaciju više elif naredbi:
![Page 46: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/46.jpg)
34 uvjetna grananja
if condition1 : command1
elif condition2 : command2
elif condition3 : command3
Grananje se može napraviti i kombinacijom sve tri navedene na-redbe:
if condition1 : command1
elif condition2 : command2
else : command2
Logičkiuvjet A
Naredbe B
Ako je uvjetzadovoljen
Ako uvijet nije zadovoljen
Naredbe A
Logičkiuvjet B
Ako je uvjetzadovoljen
Naredbe C
Ako uvijet nije zadovoljen
Logičkiuvjet C
Ako je uvjetzadovoljen
Naredbe D
Ako uvijet nije zadovoljen
Slika 5: Dijagram toka za složeni uvjet grananja
U Izvornom kodu 10 napisan je jednostavan primjer grananja ko-risteci navedene naredbe.
Izvorni kod 10: Primjer kombinacije naredbi if, elif i else
1 #!/usr/bin/python
2
3 a = input("a: ")
4
5 if a < 0:
![Page 47: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/47.jpg)
6.3 elif 35
6 print ’a je negativan’
7 elif a > 0:
8 print ’a je pozitivan’
9 else:
10 print ’a je nula’
Unosom pozitivnog broja izvršava se naredba koja je uvjetovana uvje-tom pod elif naredbom:
user@machine:~> python if_elif_else_01.py
a: 33
a je pozitivan
![Page 48: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/48.jpg)
![Page 49: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/49.jpg)
7P E T L J E
7.1 for
Naredba for koristi se za iteriranje elemenata u nekom iterabilnomobjektu (lista, tuple, string itd.). Njezina osnovna sintaksa je
for iter in list : commands
Naredbe commands izvršavaju se jednom za svaki element iz nizalist. Objekt iter je iterator koji pokazuje na elemente niza list. Zarazliku od jezika C, C++ iter se ne briše nakon što for naredbazavrši.
Izvorni kod 11: Upotreba for naredbe
1 #!/usr/bin/python
2 for num in range(2, 5):
3 print(num)
4
5 print(num)
2
3
4
4
Izvorni kod 12: Naredba for s listom stringova
1 #!/usr/bin/python
2 text=[’ide’,’patka’,’preko’,’save’]
3 for r in text:
4 print(r)
ide
patka
preko
save
Izvorni kod 13: Naredba for i stirng
1 #!/usr/bin/python
2 for c in ’patka’: print(c)
p
a
t
k
a
37
![Page 50: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/50.jpg)
38 petlje
Izvorni kodovi 12 i 13 prikazuju upotrebu stringova u for naredbi.Do indeksa elemenata u nizu može se doci korištenjem naredbi len
i range (poglavlje ??) kao što se može vidjeti na primjeru Izvornogkoda 14:
Izvorni kod 14: Naredba for s listom stringova
1 #!/usr/bin/python
2 text=[’ide’,’patka’,’preko’,’save’]
3 for i in range(len(text)):
4 print i, text[i]
0 ide
1 patka
2 preko
3 save
7.2 while
Osnovne sintaksa naredbe while je
while conditon : commands
Naredbe commands izvršavaju se dokle god je uvjet condition istinit.
Logičkiuvjet
Ako je uvjetzadovoljen
Ako uvijet nije zadovoljen
Naredbe
Slika 6: Dijagram toka while petlje
Izvorni kod 15: Upotreba while naredbe
1 #!/usr/bin/python
2 i=0
3 while i*i<=9:
4 print i
5 i=i+1
0
1
2
![Page 51: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/51.jpg)
7.3 break 39
7.3 break
Proširena sintaksa for ili while naredbe ukljucuje i naredbu else:for iter in list : commands1
else : comands2
while condition : commands1
else : comands2
Nakon što se iscrpe svi elemnti niza list ili nakon što uvjet conditionpostane neistinit, izvršit ce se naredbe commands2.
Izvorni kod 16: Upotreba else naredbe u petlji
1 #!/usr/bin/python
2 for num in range(3):
3 print(num)
4 else:print(’Kraj’)
0
1
2
Kraj
Naredbom break se završava for ili while naredba. Na primjeruIzvornog koda 17 može se vidjeti da se nakon break naredbe ne izvršidio koda nakon else naredbe.
Izvorni kod 17: Upotreba break naredbe
1 #!/usr/bin/python
2 i=0
3 while i*i<=9:
4 print i
5 i=i+1
6 if i==2 : break
7 else : print(’Kraj’)
0
1
7.4 continue
Naredbom continue se preskace izvršavnje sljedecih naredbi u tijelufor ili while naredbe.
Izvorni kod 18: Upotreba continue naredbe
1 #!/usr/bin/python
2 for num in range(2, 5):
3 if num==3:continue
4 print(num)
2
4
![Page 52: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/52.jpg)
![Page 53: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/53.jpg)
8F U N K C I J E
Funkcije su grupirani dio koda koji izvodi odredeni zadatak. Pred-nosti upotrebe funkcija su:
• Smanjenje ponavljanja istog koda
• Povecavanje modularnosti koda - rašclanjivanje složenog kodana jednostavnije djelove
• Povecanje citkosti koda.
Rad sa funkcijama u Pythonu omogucuje veliku fleksibilnost. Funk-cije mogu biti dodijeljene varijablama, spremljene u listama i proslje-divane kao argumenti drugim funkcijama.
Razlikujemo dva osnovna tipa Python funkcija:
• Ugradene funkcije su funkcije koje su dio Python programskogjezika
• Funkcije definirane od strane korisnika.
8.1 definiranje i pozivanje funkcija
Kljucna rijec def omogucuje definiranje funkije. Najjednostavnija sin-taksa koja omogucuje definiranje funkcije je:
def functionname():
commands
gdje je functionname odabrano ime funkcije a commnds je naredbaili više naredbi koje funkcija izvršava. Prethodno definiranu funk- Poziv funkcije uvijek
mora biti nakondefinicije funkcije.Ne može se pozvatifunkcija kojaprethodno nijedefinirana.
ciju možemo izvršiti pozivom te funkcije. Funkcija se poziva pomocuimena funkcije nakon kojeg slijede zagrade.
Izvorni kod 19: Definicija i pozivanje jednostavne funkcije
1 #!/usr/bin/python
2
3 def pozdrav():
4 print ’Pozdrav!’
5
6 pozdrav()
Pozdrav!
Funkciju je moguce proširiti na nacin da prima jedan ili više argu-menata. Argumenti se definiraju pomocu imena argumenata razdvo-jenih zarezom u zagradama nakon imena funkcije:
41
![Page 54: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/54.jpg)
42 funkcije
def functionname(arg1, arg2, ... , argn):
commands
Funkcija sa argumentima se poziva tako da se u zagradama nakonimena funkcije upišu vrijednosti argumenata. Argumenti se u pozivufunkcije razdvajaju zarezom kao i prilikom definicije funkcije.
Izvorni kod 20: Definicija funkcije koja prima argument
1 #!/usr/bin/python
2
3 def pozdrav( ime ):
4 print ’Pozdrav’, ime, ’!’
5
6 def zbroji( a, b ):
7 c = a + b
8 print a, ’+’, b, ’=’, c
9
10 pozdrav(’Marko’)
11 zbroji(2, 5)
Pozdrav Marko !
2 + 5 = 7
8.2 vracanje vrijednosti iz funkcije
Funkcija može vratiti vrijednost nakon poziva funkcije. Vrijednostkoju funkcija vraca doslovno zamjenjuje funkciju u kontekstu u ko-jem je ona pozvana, a tip vracenog podatka može biti bilo koji Pythonobjekt. Vracanje vrijednosti se definira naredbom return nakon kojese zaustavlja izvršavanje funkcije:
def functionname(arg1, arg2, ... , argn):
commands
return value
Izvorni kod 21: Definicija funkcije koja prima više argumenata i vraca vri-jednost
1 #!/usr/bin/python
2
3 def zbroji(a, b):
4 c = a + b
5 return c
6
7 x = zbroji(2, 6)
8 y = zbroji(x, -5)
9
10 print x, y
8 3
Funkcija može sadržavati više return naredbi (obicno u razlicitimuvjetnim grananjima) i svaka može vratiti razlicit tip podatka (Izvornikod 22).
![Page 55: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/55.jpg)
8.3 argumenti sa zadanim vrijednostima 43
Izvorni kod 22: Funkcija koja vraca razlicite tipove
1 #!/usr/bin/python
2
3 def luda_funkcija(a, b):
4 if(a > b):
5 return a + b
6 else:
7 return ’malo teksta’
8
9 x = luda_funkcija(6, 2)
10 y = luda_funkcija(x, 10)
11
12 print x, y
8 malo teksta
Vrlo cesto, javlja se potreba da funkcija vraca više vrijednosti. To semože ostvariti vracanjem tuplea.
Izvorni kod 23: Funkcija koja vraca više vrijednosti korsiteci tuple
1 #!/usr/bin/python
2
3 def f(a, b):
4 z = a + b
5 r = a - b
6 return z, r
7
8 x = f(6.0, 2.0)
9 print x
10
11 c, d = f(6.0, 2.0)
12 print c
13 print d
(8.0, 4.0)
8.0
4.0
8.3 argumenti sa zadanim vrijednostima
Funkcije mogu biti dfinirane i sa zadanim vrijednostima argumenata.Argumenti sa zadanim vrijednostima mooraju biti definirani nakonargumenata bez zadanih vrijednosti.
def functionname(arg1=val1, arg2=val2, ... , argn=valn):
commands
return value
Prilikom poziva funkcije, moguce je funkciju pozvati bez zadanihargumenata.
Izvorni kod 24: Funkcija sa zadanim argumentom
1 #!/usr/bin/python
![Page 56: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/56.jpg)
44 funkcije
2
3 def f(a, b=0.0):
4 if(a > b):
5 return a - b
6 else:
7 return b
8
9 a = f(6.0, 2.0)
10 b = f(20.0)
11 c = f(-3.0)
12
13 print a, b, c
4.0 20.0 0.0
8.4 keyword i non-keyword argumenti
Funkciju se može pozivati na nacin da se, pomocu keyword argume-nata, tocno specificiraju argumenti. Keyword argumenti su oni argu-menti koji se, pri pozivu funkcije, zadaju imenom i vrijednošcu, zarazliku od non-keyword argumenata koji se zadaju samo kao vrijed-nost. Redosljed zadavanja keyword argumenata može biti proizvoljandok kod kombinacije non-keyword i keyword argumenata prvo mo-raju biti specificirani non-keyword argumenti.
1 # Definiranje funkcije
2 def f(x, a, b):
3 return x*(a+b)
4
5 # Poziv funkcije sa keyword argumentima
6 f(x=10, b=0, a=8)
7
8 # Poziv funkcije sa mjesovitim keyword i non-keyword argumentima
9 f(10, b=0, a=8)
8.5 ugnježden definicija funkcije
Ugnježdeno definiranje funkcije (eng. closure ili nested function defini-tion) omogucuje definiciju funkcije u funkciji. Ugnježdena definicijafunkcije je moguca u Pythonu jer su funkcije objekti te ih je moguceprosljedivati kao argumente drugim funkcijama te vracati kao rezul-tat funkcije. Ugnježdeno definirane funkcije mogu se pokazati korisnejer unutarnja funkcija može koristiti objekte definirane u vanjskoj:
>>> def vanjska(vanjski_argument):
... def unutarnja(unutarnji_argument):
... return vanjski_argument * unutarnji_argument
... return unutarnja
...
>>> f = vanjska(5)
>>> f(3)
15
![Page 57: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/57.jpg)
8.6 lambda funkcije 45
>>> f(4)
20
8.6 lambda funkcije
Lambda funkcije su funkcije bvez imena tj. anonimne funkcije. Naj-cešce se koriste za definiranje vrlo jednostavnih i kratkih funkcija.
>>> def add(a, b):
... return a + b
...
>>> add(4, 3)
7
may also be defined using lambda
>>> print (lambda a, b: a + b)(4, 3)
7
Lambda is often used as an argument to other functions that expectsa function object, such as sorted()’s ’key’ argument.
>>> sorted([[3, 4], [3, 5], [1, 2], [7, 3]], key=lambda x: x[1])
[[1, 2], [7, 3], [3, 4], [3, 5]]
The lambda form is often useful as a closure, such as illustrated inthe following example:
>>> def attribution(name):
... return lambda x: x + ’ -- ’ + name
...
>>> pp = attribution(’John’)
>>> pp(’Dinner is in the fridge’)
’Dinner is in the fridge -- John’
note that the lambda function can use the values of variables from thescope in which it was created (like pre and post). This is the essenceof closure.
![Page 58: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/58.jpg)
![Page 59: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/59.jpg)
9P Y T H O N S TA N D A R D L I B R A RY
http://docs.python.org/2/library/index.html
9.1 matematicke funkcije
Python modul math sadrži standardne matematicke realne funkcijekoje su definirane C standrdom, s kojima se najcešce susrecemo prili-kom pisanja nekog programa.
Funkcija Opis
math.fabs(x) Funkcija vraca apsolutnu vrijednost realnog broja x.
math.fsum(niz)Funkcija vraca sumu elemenata nekog niza brojeva.
math.isnan(x) Funkcija vraca True ako je x tipa NaN.
math.exp(x) Exponencijalna funkcija ex.
math.log(x, b)Funkcija logb(x) odnosno ln(x) ako se ne zada b.
math.cos(x) Funkcija vraca kosinus kuta x zadanog u radijanima.
math.acos(x) Inverz funkcije kosinus.
math.e Matematicka konstanta e=2.718281828459045...
Tablica 7: Opis nekih funkcija math modula
Primjer upotrebe nekih funkcija math modula:
1 #!/usr/bin/python
2 from math import log,e,fsum
3 print log(e)
4 print fsum([1,2,3])
1.
6.
Python modul cmath sadrži standardne matematicke funkcija nadpoljem kompleksnih brojeva. Argumenti funkcija mogu biti tipa float
ili complex.
Funkcija Opis
cmath.polar(x)Funkcija vraca polranu (r,φ) reprezentaciju kompleksnog broja x.
cmath.sqrt(x) Funkcija vraca korijen kompleksnog broja
Tablica 8: Opis nekih funkcija cmath modula
Primjer upotrebe nekih funkcija cmath modula:
47
![Page 60: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/60.jpg)
48 python standard library
1 from cmath import sqrt
2 sqrt(1.+2.j)
(1.272019649514069+0.7861513777574233j)
Python modul decimal omogucuje racunanje i pravilno zaokruži-vanje realnih brojeva u aritmetici s proizvoljnim brojem decimalnihmjesta.
Primjer upotrebe nekih funkcija math modula:
1 #!/usr/bin/python
2 from decimal import *3 getcontext().prec = 6
4 print Decimal(1) / Decimal(3)
5 getcontext().prec =30
6 print Decimal(1) / Decimal(3)
0.333333
0.333333333333333333333333333333
![Page 61: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/61.jpg)
Dio II
N U M P Y P O L J A I M AT R I C E
Modul numpy je dodatni paket za Python koji omogucujeefikasno manipuliranje višedimenzionalnim poljima bro-jeva.
![Page 62: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/62.jpg)
![Page 63: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/63.jpg)
10Z A D AVA N J E P O L J A U N U M P Y- U
Bazni objekt u NumPy-u, ndarray, je homogeno multidimenzionalnopolje. Homogenost polja podrazumijeva da su svi podaci u polju istogtipa. U NumPy-u, dimenzije se nazivaju axes a broj dimenzija rank.
Elementi polja su indeksirani pozitivnim cijelim brojevima.NumPy polja se mogu zadavati na više nacina. Bazicno, zadava-
nje polja se može podjeliti na rucni unos pomocu naredbe array tena automatsko generiranje polja. NumPy polja mogu se automatskigenerirati pomocu neke od naredbi za generiranje polja.
10.1 array
Naredba array omogucava kreiranje NumPy polja iz obicnih Pythonlisti ili tuple-ova. Prilikom kreiranja polja pomocu array naredbe, uargument funkcije upisuju se elementi matrice i to na nacin da svakadimnezija zapocinje otvornemo uglatom zagradom ([) i završava za-tvorenom uglatom zagradom (]) dok su elementi razdvojeni zarezom.
Najjednostavnija sintaksa naredbe array je:array(object)
Ako je argument naredbe array tuple, onda pojedina dimenzija za-pocinje i završava sa zagradama. Pri tome treba paziti da je argumnetnaredbe array samo jedan tuple (cijeli tuple mora biti u jednim za-gradama). Moguce je kombinirati Python liste i tuple-ove prilikomzadavanja matrice.>>> from numpy import *>>> M1 = array([[1, 2, 3],[4, 5, 6]])
>>> M1
array([[1, 2, 3],
[4, 5, 6]])
>>> M2 = array( ( (6,7,8), (9,10,11) ) )
>>> M2
array([[ 6, 7, 8],
[ 9, 10, 11]])
>>> M3 = array( ( [6,7,8], (9,10,11) ) )
>>> M3
array([[ 6, 7, 8],
[ 9, 10, 11]])
Dodatni, neobavezni argumenti naredbe array su:dtype - željeni tip podataka za elemente polja. Ako argument nije
zadan, elementi polja ce preuzeti minimalni tip potreban za pohranupodataka iz objekta object. Ovaj argument se može koristiti samo za’povecati’ (eng. upcast) tip zadanog objekta. Za ’smanjiti’ (eng. down-cast) tip koristiti .astype(t) naredbu.
51
![Page 64: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/64.jpg)
52 zadavanje polja u numpy-u
copy - bool varijabla (True ili False) koja odreduje da li se objektkopira.order - odreduje nacin na koji se polje pohranjuje u memoriji. Polje
može biti pohranjeno na tri nacina:
• ’C’ - elementi polja ce biti poredani u memoriji na nacin dazadnji indeks varira najbrže (C-povezani poredak)
• ’F’ - elementi polja ce biti poredani u memoriji na nacin da prviindeks varira najbrže (Fortran-povezani poredak)
• ’A’ - elementi polja nece imati definiran poredak u memoriji (C-povezani poredak, Fortran-povezani poredak ili cak nepovezaniporedak)
subok : bool, optional If True, then sub-classes will be passed-through,otherwise the returned array will be forced to be a base-class array(default).
ndmin - minimalni broj dimenzija generiranog polja. Prema potrebi,broj dimenzija ce biti povecan na nacina da ce jedinice biti dodane ushape polja.
10.2 arange
Naredba arange omogucuje kreiranje jednodimenzionalnog polja kojesadrži aritmeticki niz definiran sa prvim clanom, zadnjim clanom tekorakom.
Sintaksa naredbe jearange(start, stop, step, type)
gdje je start pocetak niza, stop kraj niza, step korak niza a type
je tip podataka sadržanih u nizu.Oprez! Prilikomkorištenja
ne-cjelobrojnihkoraka niza rezultatnaredbe array možebiti nekonzistentan.
U takvimslucajevima bolje je
koristiti naredbulinspace (10.3).
Svi argumennti naredbe arange osim stop su neobavezni i ukolikonisu uneseni imaju zadane vrijednosti:
• start ima zadanu vrijednost 0
• step ima zadanu vrijednost 1 te zahtijeva i zadavanje argu-menta start
• type ako nije zadan, postavlja se tipa na temelju ostalih argume-nata.
>>> M1 = arange(10, 30, 3)
>>> M1
array([10, 13, 16, 19, 22, 25, 28])
>>> M2 = arange(-2, 3)
>>> M2
array([-2, -1, 0, 1, 2])
>>> M3 = arange(5)
>>> M3
array([0, 1, 2, 3, 4])
![Page 65: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/65.jpg)
10.3 linspace 53
10.3 linspace
Naredba linspace ima slicnu namjenu kao i naredba arange (kreira-nje aritmetickog niza) samo što se umjesto koraka niza zadaje brojclanova niza.
I sintaksa naredbe je vrlo slicna naredbi arange:
linspace(start, stop, num=50, endpoint=True, retstep=False)
gdje je start pocetak niza, stop kraj niza, num broj elemenata niza,endpoint je opcija ukljucivanja zadnjeg elementa a retstep je opcijavracanja korištenog koraka niza.
>>> M1=linspace(0,10,21)
>>> M1
array([ 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ,
4.5, 5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5,
9. , 9.5, 10. ])
>>> M2 = linspace(0, 5, 10, endpoint=False)
>>> M2
array([ 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
>>> M3, step = linspace(0, 1, retstep=True)
>>> M3
array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,
0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,
0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,
0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,
0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,
0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,
0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,
0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,
0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,
0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])
>>> step
0.02040816326530612
10.4 zeros
Naredba zeros omogucava generiranje polja koje sadrži nule. Os-novna sintaksa naredbe zeros je
zeros(shape)
gdje je shape lista koja sadrži velicine dimenzija.Osim velicine dimnezija, postoje i dodatni neobavezni argumenti
za definiranje tipa podataka te nacina spremanja polja u memoriju:
zeros(shape, dtype=float, order=’C’)Naredbazeros_like imadodatne argumentedtype i order.dtype omogucujenametanje tipapodataka zagenerirano polje, aako nije specificiranonda generiranopolje nasljeduje tippodataka odargumenta a. orderomogucujemijenjanje rasporedaspremanja polja umemoriju.
Za generiranje polja nula može poslužiti i naredba zeros_like kojagenerira polje nula istih dimenzija kao neko postojece polje. Sintaksanaredbe je:
zeros_like(a)
gdje je a matrica cije dimenzije treba preuzeti.
![Page 66: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/66.jpg)
54 zadavanje polja u numpy-u
>>> from numpy import *>>> a = zeros([3, 5])
>>> print a
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
>>> b = array([2, 5, 6, 0])
>>> print b
[2 5 6 0]
>>> c = zeros_like(b)
>>> print c
[0 0 0 0]
10.5 ones
Za generiranje matrice zadanih dimenzija koja sadrži jedinice koristise naredba ones. Sintaksa naredbe je vrlo ista kao i kod naredbezeros:ones(shape, dtype=float, order=’C’)
Naredba ones_like
ima dodatneargumente dtype i
order kojifunkcioniraju
jednako kao što jeopisano za naredbu
zeros_like.
Za kreiranje matrice, koja sadrži jedinice istih dimenzija kao nekapostojeca matrice, koristi se ones_like naredba:ones_like(a)
gdje je a matrica cije dimenzije treba preuzeti.>>> from numpy import *>>> a = ones([2,4])
>>> print a
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
>>> b = ones([3, 2],dtype=int)
>>> print b
[[1 1]
[1 1]
[1 1]]
>>> c = array([5, 8])
>>> d = ones_like(c)
>>> print d
[1 1]
10.6 eye
Generiranje dvodimenzionalne jedinicne matrice (sadrži jedinice nadijagonali a ostalo su nule) moguce je sa naredbom eye. PotpunaNaredba eye
omogucujegeneriranje
iskljucivodvodimenzionalnihjedinicnih matrica.
sintaksa naredbe eye je:eye(N, M=None, k=0, dtype=<type ’float’>)
gdje je N broj redaka generiranog polja, M broj stupaca generiranogpolja (ako nije zadano, broj stupaca je jednak broju redaka), k indeksdijagonale (0 je glavna dijagonala, pozitivna vrijednost se odnosi nadijagonale iznad a negativna na dijagonale ispod glavne dijagonale)dok je dtype tip podataka generiranog polja.
![Page 67: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/67.jpg)
10.7 diag 55
>>> from numpy import *>>> a = eye(4)
>>> print a
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]]
>>> b = eye(5, 3)
>>> print b
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
>>> c = eye(3, 5, 1)
>>> print c
[[ 0. 1. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]
[ 0. 0. 0. 1. 0.]]
10.7 diag
Cesto su brojevi na dijagonali matrice važni u proracunu i javlja se po-treba da ih se spremi u zasebnu varijablu. Naredba diag omogucujeupravo to: generira vektor koji sadrži elemenate dijagonale zadanematrice.
Sintaksa naredbe je vrlo jednostavna. Funkcija diag obavezno prima,kao argument, matricu iz koje se želi preuzeti dijagonala. Dodatni ar-gument, k, specificira položaj (indeks) dijagonale: 0 je glavna dijago-nala, pozitivna vrijednost se odnosi na dijagonale iznad a negativnana dijagonale ispod glavne dijagonale.
diag(v, k=0)
Izvorni kod 25: Spremanje elemenata dijagonale matrice u vektor
1 from numpy import *2 M1 = array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
3 v1 = diag(M1)
4 v2 = diag(M1,1)
5
6 print M1
7 print v1
8 print v2
user@machine:~> python diag01.py
[[1 2 3]
[4 5 6]
[7 8 9]]
[1 5 9]
[2 6]
![Page 68: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/68.jpg)
56 zadavanje polja u numpy-u
10.8 meshgrid
![Page 69: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/69.jpg)
11M A N I P U L A C I J E S A N U M P Y P O L J I M A
11.1 manipulacije sa dimenzijama polja
Elementi NumPy polja odredenih dimenzija, mogu se presložiti uNumPy polje drukcijih dimenzija. Preslagivanje polja na druge di-menzije vrši se pomocu naredbe reshape:
reshape(a, newshape, order=’C’)
gdje je a izvorno polje, newshape vektor novih dimenzija a order jenacin spremanja polja u matricu.
Uvijet za reshape je da broj elemenata polja ostane isti tj. umnožakvelicina dimenzija mora biti konstantan. Ukoliko se, kod
poziva naredbereshape, velicinajedna od dimenzijane specificira, tadase ona automatskiracuna na temeljuostalih velicinadimenzija i ukupnogbroja elemenatainicijalne matrice.
Specificni slucaj mijenjanja dimenzija polja je kada inicijalno polježelimo transformirati u jednodimenzionalno polje tj. vektor. Iako jeto moguce napraviti sa naredbom reshape, postoji specijelizirana na-redba ravel za transformaciju n-dimnezionalnih polja u jednodimen-zionalna polja. Sintaksa naredba je vrlo slicna kao i za reshape osimšto nije potrebno specificirati vektor velicina dimenzija jer je rezultatuvijek jednodimenzionalno polje.
ravel(a, order=’C’)
Za pretvorbu matrice u vektor koristi se i naredba flatten. Razlikaje što je ovo funkcija ndarray objekta i uvijek kreira kopiju polja.
flatten(order=’C’)
Izvorni kod 26: Mijenjanje dimenzija polja
1 from numpy import *2
3 M1 = arange(0, 20)
4 print M1
5
6 M2 = reshape(M1, [4, 5])
7 print M2
8 M3 = reshape(M2, [2, -1])
9 print M3
10
11 print ravel(M2)
12 print M3.flatten()
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
[[ 0 1 2 3 4 5 6 7 8 9]
57
![Page 70: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/70.jpg)
58 manipulacije sa numpy poljima
[10 11 12 13 14 15 16 17 18 19]]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
Brisanje jedinicnih dimenzija matrice, koje vrlo cesto znaju biti su-višne, može se napraviti funkcijom squeeze.
Izvorni kod 27: Mijenjanje dimenzija polja
1 from numpy import *2
3 M1 = arange(0, 20)
4
5 M2 = reshape(M1, [4, 1, 1, 5])
6 print M2.shape
7
8 M3 = squeeze(M2)
9 print M3.shape
(4, 1, 1, 5)
(4, 5)
11.2 transponiranje
Transponiranje matrica moguce je izvesti na dva nacina:
• funkcijom transpose
• atributom T
Izvorni kod 28: Transponiranje matrica
1 from numpy import *2
3 M1 = array([
4 [1, 0, 3, 4],
5 [2, 2, 7 ,8],
6 [6, 8, 3, 0],
7 [9, 8, 2, 1]])
8
9 M2 = M1.T
10 print M2
11
12 M3 = transpose(M1)
13 print M3
[[1 2 6 9]
[0 2 8 8]
[3 7 3 2]
[4 8 0 1]]
[[1 2 6 9]
[0 2 8 8]
[3 7 3 2]
[4 8 0 1]]
![Page 71: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/71.jpg)
11.3 dodavanje i brisanje elemenata polja 59
11.3 dodavanje i brisanje elemenata polja
![Page 72: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/72.jpg)
![Page 73: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/73.jpg)
12N U M P Y M AT R I C E
O matricama...
61
![Page 74: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/74.jpg)
![Page 75: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/75.jpg)
Dio III
P R I P R E M A , O B R A D A I V I Z U A L I Z A C I J AP O D ATA K A
![Page 76: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/76.jpg)
![Page 77: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/77.jpg)
13O S N O V N I 2 D G R A F O V I
Terminlologija:
• Figure = prozor
• Axes = prostor crtanja
• Axis = osi
Prozor
Prostor crtanja Prostor crtanja
Os y
Os x
Os y
Os x
Slika 7: Matplotlib elementi
13.1 linijski grafovi
Osnovna naredba u matplotlibu je plot i služi za crtanje grafova po-mocu linija ili tocaka. Osnovna sintaksa naredbe je
plot(y)
plot(x, y)
gdje su x i y vektori koordinata tocaka koje želimo vizualizirati. Uslucaju da vektor x koordinata nije zadan, koristi se uniformni vektor[0, 1, 2, ..., n] gdje je n broj clanova vektora y. U slucaju da suzadani i vektor x i vektor y, tada oni moraju imati isti broj clanova.
Više uzastopnih plot naredbi ce nacrtati više linija na istom grafu.Naredba plot ne prikazuje graf, graf se iscrtava na ekranu pozivomfunkcije show.
Izvorni kod 29 kreira dva linijska grafa koristeci naredbu plot apotom, naredbom show, graf prikaže na ekranu (Slika 8)
65
![Page 78: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/78.jpg)
66 osnovni 2d grafovi
Izvorni kod 29: Jednostavan graf
1 from pylab import *2 from numpy import *3
4 plot([3, 6, 3, 2, 4])
5
6 x = linspace(0, 4, 100)
7 y = 5*cos(x)/(1 + x**2)
8 plot(x, y)
9
10 show()
Slika 8: Graf napravljen izvodenjem izvronog koda 29
Dodatni argument naredbe plot omogucuje definiranje izgleda li-nije i markera pomocu znakova. Znakovi za definiranje vrste linije,boje linije te vrste markera kombiniraju se u stringu koji se proslje-duje funkciji plot. Simboli za definiranje vrste linije, boje linije i vrstemarkera prikazani su u tablicama 9, 10 i 11. Simboli se mogu kombi-nirati u proizvoljnom redoslijedu. Ako je izostavljen simbol za boju,primjenjuje se zadana vrijednost boje. Markeri se ne prikazuju izos-tavljanjem simobla za vrstu markera. Izostavljanjem simbola za vrstulinije, ako je zadana vrsta markera linija se ne prikazuje a puna linijase iscrtava u slucaju da vrsta markera nije zadana.
![Page 79: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/79.jpg)
13.1 linijski grafovi 67
Simbol Vrsta linije
’-’ Puna linija
’-’ Crtkana linija
’-.’ Crta-tocka
’:’ Tockasta linija
Tablica 9: Vrste linija
Simbol Boja
’b’ Plava
’r’ Crvena
’g’ Zelena
’c’ Cijan
’m’ Magenta
’y’ Žuta
’k’ Crna
’w’ Bijela
Tablica 10: Simboli boja
![Page 80: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/80.jpg)
68 osnovni 2d grafovi
Simbol Vrsta markera
’.’ Tockasti
’,’ Piksel
’o’ Kružni
’v’ Trokutasti prema dolje
’ˆ’ Trokutasti prema gore
’<’ Trokutasti prema lijevo
’>’ Trokutasti prema desno
’s’ Kvadratni
’p’ Peterokutni
’*’ Zvijezdasti
’h’ Šesterokutni 1
’H’ Šesterokutni 2
’+’ Plus
’x’ Križic
’D’ Romb
’d’ Tanki romb
’|’ Vertikalna linija
’_’ Horizontalna linija
Tablica 11: Vrste markera
U izvornom kodu 30 upotrebljene su razlicite varijente linija, mar-kera i boja (Slika 10).
Izvorni kod 30: Kontrola linija i markera
1 from pylab import *2 from numpy import *3
4 plot([1, 6, 3, 2, 4],’r--o’)
5 plot([3, 2, 1, 3, 1],’g-.D’)
6 plot([2, 3, 5, 6, 2],’rx’)
7 plot([5, 4, 2, 4, 5],’ks:’)
8
9 show()
![Page 81: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/81.jpg)
13.2 naprednija kontrola linijskih grafova 69
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.01
2
3
4
5
6
Slika 9: Graf napravljen izvodenjem izvronog koda 30
13.2 naprednija kontrola linijskih grafova
Bolju kontrolu izgleda linijskih grafova u matplotlibu moguce je os-tvariti sa dodatnim parametrima naredbe plot.
Argumentom color (ili skraceno c) moguce je preciznije definiratiboju linije:
plot(x, y, color = gray_string)
plot(x, y, color = hex_string)
plot(x, y, color = rgb_tuple)
gdje je
• gray_string string koji specificira nijansu sive boje kao udiobijele (npr. color = ’0.72’)
• hex_string string koji specificira heksidecimalni zapis RGB boje(npr. color = ’#FF8C00’)
• rgb_tuple tuple kojim se specificiraju udjeli crvene, zelemne iplave (RGB) boje (npr. color = (0.1, 0.5, 0.3))
Izgled markera se može detaljnije specificirati pomocu više para-metara naredbe plot:
• marker za definiranje vrste tj. oblika markera,
• markersize ili ms za definiranje velicine markera,
• markeredgecolor ili mec za definiranje boje ruba markera,
![Page 82: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/82.jpg)
70 osnovni 2d grafovi
• markeredgewidth ili mew za definiranje debljine ruba markera,
• markerfacecolor ili mfc za definiranje boje lica markera
• markerfacecoloralt ili mfcalt za definiranje izmjenjujuce bojelica markera,
• markerevery za definiranje koliko tocaka ce biti prikazane (npr.svaka peta).
1 plot(x, y, markeredgecolor = ’r’, # Boja ruba markera - crvena
2 markeredgewidth = 2, # Debljina ruba
3 markerfacecolor = ’b’, # Boja lica - plava
4 markerfacecoloralt = ’g’, # Izmjenjujuca boja lica - zelena
5 markersize = 4, # Velicina markera
6 markerevery = 5) # Crtaj svaki peti marker
Argumentom label omogucuje se oznaka tj. opis krivulje, koji seprikazuje u legendi grafa (13.4.2).
13.3 svojstva prozora , prostora crtanja i osi
Naredbama xlabel i ylabel moguce je dodati naslove osi. Sintaksaobje naredbe je identicna:
xlabel(’Opis x osi’)
ylabel(’Opis y osi’)
Naredbama xlim i ylim odreduju se granice intervala koji se prika-zuje na prostoru crtanja. Sintaksa naredbe je:
xlim( (xmin, xmax) )
xlim( xmin, xmax )
1 xlim(0, 5) # Donja i gornja granica
2 ylim(ymax=1) # Samo gornja granica
3 ylim(ymin=-1) # Samo donja granica
Ukljucivanje i iskljucivanje mreže pomocnih linija na prostoru crta-nja vrši se naredbom grid.
grid(b=None, which=’major’, axis=’both’, **kwargs)
b je argument kojim se kontrolira da li se iskljucuje ili ukljucujemreža pomocnih linija i može poprimiti vrijednosti true ili false alii ’on’ ili ’off’ (kao i MATLAB). which može biti ’major’, ’minor’ ili’both’ i služi za kontrolu glavne ili sporedne mreže pomocnih linija.Argumentom axis kontorilra se za koje ce osi biti postavljena mrežapomocnih linija. Vrijednosti za axis mogu biti ’both’, ’x’ ili ’y’.
grid može primati dodatne argumente za detaljniju kontrolu mrežepomocnih linija:
1 grid(color=’k’, linestyle=’:’, linewidth=0.2)
![Page 83: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/83.jpg)
13.4 dodavanje teksta i pomocnih objekata 71
13.4 dodavanje teksta i pomocnih objekata
13.4.1 Naslov
Dodavanje naslova na prostor crtanja vrši se naredbom title:
title(’Text naslova’)
13.4.2 Legenda
Prikazivanje legende na na prostoru crtanja vrši se pomocu naredbelegend uz prethodno definirane opise krivulja (label).
Izvorni kod 31: Prikaz legende na grafu
1 from pylab import *2 from numpy import *3
4 x = linspace(0, 10, 100)
5 y1 = sin(x)
6 y2 = cos(x)
7
8 figure(1, [8, 2])
9 plot(x, y1, label=’sinus’)
10 plot(x, y2, label=’kosinus’)
11 legend()
12 show()
0 2 4 6 8 101.0
0.5
0.0
0.5
1.0
sinuskosinus
Slika 10: Prikaz legende ma grafu
13.5 spremanje grafova
13.6 polarni grafovi
13.7 tips and tricks
Use matplotlib’s calls that won’t block:Using draw():
1 from matplotlib import plot, draw, show
2 plot([1,2,3])
3 draw()
4 print ’continue computation’
5
![Page 84: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/84.jpg)
72 osnovni 2d grafovi
6 # at the end call show to ensure window won’t close.
7 show()
Using interactive mode:
1 from matplotlib import plot, ion, show
2 ion() # enables interactive mode
3 plot([1,2,3]) # result shows immediatelly (implicit draw())
4
5 print ’continue computation’
6
7 # at the end call show to ensure window won’t close.
8 show()
![Page 85: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/85.jpg)
Dio IV
N U M E R I C K E M E T O D E
![Page 86: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/86.jpg)
![Page 87: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/87.jpg)
14R J E Š AVA N J E N E L I N E A R N I H F U N K C I J A
Uvod
14.1 metoda bisekcije
Metoda bisekcije namjenjena je rješavnju jednadžbe f(x) = 0 na inter-valu [a,b]. Da bi se metoda mogla primjeniti, funkcija f(x) mora bitineprekidna te mora vrijediti f(a) · f(b) 5 0. Zbog navedenih uvjeta,funkcija f(x) ima bar jedan korijen na intervalu [a,b].
Metoda biskecije, ako su navedeni uvjeti zadovoljeni, ce sigurnokonvergirati u jedan od korijena funkcije f(x) na intervalu [a,b]. Ap-solutna greška se prepolavlja u svakom koraku iteracije pa metoda ko-nvegira linearno, što je, u odnosu na druge metode, relativno sporo.
Osnovna sintaksa:
bisect(f, a, b)
gdje je f funkcija, a a i b su granice intervala na kojem se traži korijenfunkcije. Dodatni argumenti omogucuju kontrolu i pregled konver-gencije:
args=()
xtol=1e-12
rtol=4.4408920985006262e-16
maxiter=100
full_output=False
disp=True
gdje je xtol apsolutna tolerancija, rtol relativna tolerancija, maxitermaksimalni broj iteracija, full_output omogucuje dohvacanje dodat-nih informacija o konvergenciji i disp omogucuje podizanje Runtime-Error u slucaju da metoda ne konvergira. optimize.bisect
poziva_zeros._bisect, kojaje implementirana uC-u.
Izvorni kod 32: Primjer pronalaženja korijena funkcija metodom biskecije
1 #!/usr/bin/python
2 import scipy.optimize as optimize
3 from numpy import cos
4
5 def f(x):
6 return cos(x)**2 + 6 - x
7
8 # 0<=cos(x)**2<=1, so the root has to be near x=7
9 x0, S = optimize.bisect(f,6,8,full_output=True)
10 print x0
11 print S.iterations
12 print S.function_calls
75
![Page 88: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/88.jpg)
76 rješavanje nelinearnih funkcija
6.77609231632
41
43
14.2 newtnova metoda
Osnovna sintaksa:
newton(func, x0)
The convergence rate of the Newton-Raphson method is quadratic,the Halley method is cubic, and the secant method is sub-quadratic.This means that if the function is well behaved the actual error in theestimated zero is approximately the square (cube for Halley) of therequested tolerance up to roundoff error. However, the stopping cri-terion used here is the step size and there is no guarantee that a zerohas been found. Consequently the result should be verified. Safer al-gorithms are brentq, brenth, ridder, and bisect, but they all requirethat the root first be bracketed in an interval where the function chan-ges sign. The brentq algorithm is recommended for general use inone dimensional problems when such an interval has been found.
14.3 brentova metoda
Osnovna sintaksa:
brent(func, a, b)
![Page 89: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/89.jpg)
15I N T E R P O L A C I J E
Cesto se javlja potreba da na temelju nepotpunih ili rijetkih podatakatreba procjeniti odnosno izracunati vrijednosti u željenim tockama.Interpolacija je metoda konstrukcije novi tocaka unutar raspona dis-kretnog skupa poznatih tocaka podataka.
Interpolacije možemo klasificirati s obzirom na :
• broj dimenzija danog interpolacijskog problema,
• interpolacijsku funkciju (linearna, spline itd.),
• na strukturu zadanih diskretnih podataka (zadani na mreži to-caka ili na nepravilno razbacanim tockama (scatterd))
15.1 1d interpolacija
Klasa interp1d u modulu scipy.interpolate omogucuje 1D interpo-laciju.
interp1d(x, y, kind, axis, copy, bounds_error, fill_value)
gdje je x 1D monotono rastuce polje polje a y n-dimenzionalno po-lje. Dimenzija y-a duž koje se vrši interpolacija treba biti iste du-žine kao i x. kind može biti ’linear’, ’nearest’, ’zero’, ’slinear’,’quadratic’, ’cubic’ ili cijeli broj koji specificira red spline inerpola-cije. Parametar axis odreduje dimenziju y-a duž koje se vrši interpo-lacija. Pozivanja interpolacije izvan intervala zadanih tocaka može sekontrolirati parametrima bounds_error i fill_value. bounds_errorodreduje da li se podiže error u slucaju pokušaja interpolacije vangranica a fill_value definira vrijednost koju interpolacija u tom slu-caju vraca.
Izvorni kod 33: Primjer razlicitih 1D interpolacija
1 from numpy.random import *2 from scipy import interpolate
3 from pylab import *4
5 X = linspace(0., 10., 6)
6 Y = array([1.6, 4., 3.4, 1.6, 1.8, 1.2])
7
8 x = linspace(0., 10., 101)
9
10 f1 = interpolate.interp1d(X, Y, kind=’linear’)
11 y1 = f1(x)
12
13 f2 = interpolate.interp1d(X, Y, kind=2)
77
![Page 90: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/90.jpg)
78 interpolacije
14 y2 = f2(x)
15
16 f3 = interpolate.interp1d(X, Y, kind=3)
17 y3 = f3(x)
18
19 figure(1, figsize=[8, 3])
20 plot(X, Y, ’o’)
21 plot(x, y1, label=’linearna’)
22 plot(x, y2, label=’spline 2. reda’)
23 plot(x, y3, label=’spline 3. reda’)
24 subplots_adjust(bottom=0.1,top=0.95,left=0.05,right=0.98)
25 legend()
26 show()
0 2 4 6 8 101.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
linearnaspline 2. redaspline 3. reda
Slika 11: Primjer razlicitih 1D interpolacija
15.2 2d i n-d interpolacija
U slucaju dvo-dimenzionalne (ili više) interpolacije, moguce je in-terpolacijski problem postaviti na diskretnim podacima zadanim namreži tocaka ili nepravilno razbacanim tockama (scatterd).
Za interpolaciju vrijednosti zadanih na N-D nestrukturiranim toc-kama koristi se funkcija griddata:Parametar values
može biti 2D polje,pa se na istim
zadanim tockamamože zadati više
velicina koje semogu interpolirati
preko jednog pozivainterpolacijske
funkcije.
griddata(points, values, xi, method, fill_value)
gdje je points numpy polje koje sadrži koordinate zadanih diskretnihpodataka. Oblik polja points je (broj_tocaka, broj_dimenzija). Pri-padajuce vrijednosti zadaju se preko numpy polja values. xi je poljetocaka za koje je potrebno interpolirati zadane podatke.method specificira metodu interpolacije i podržane su sljedece me-
tode:
• nearest
• linear
• cubic
Parametrom fill_value definira se vrijednost koju vraca interpo-lacijska funkcija za tocke izvan podrucja zadanih podataka.
![Page 91: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/91.jpg)
15.2 2d i n-d interpolacija 79
Interpolacija na podacima zadanim na pravilnoj mreži tocaka sevrši pomocu klase interp2d.
interp2d(x, y, z, kind, copy, bounds_error, fill_value)
U izvornom kodu 34 rješen je problem intepolacije dvo-dimenzionalnogpolja zadanog vrijednostima u 25 tocaka (uniformna mreža 5x5). Za-dane tocke te rješenje linearne i kubicne interpolacije prikazani suna slici 12 na kojo jse jasno vidi razlika u glatkoci linearne i kubicneinterpolacijske funkcije.
Izvorni kod 34: Primjer linearne i kubicne 2D interpolacije
1 from numpy.random import *2 from scipy import interpolate
3 from pylab import *4 from mpl_toolkits.mplot3d import Axes3D
5
6 X = linspace(0., 2., 5)
7 Y = linspace(0., 4., 5)
8 Z = array([
9 [1.3, 1.4, 1.1, 1.0, 0.8],
10 [1.6, 1.1, 1.2, 1.3, 1.5],
11 [1.2, 1.5, 1.6, 1.5, 1.6],
12 [1.2, 1.4, 1.5, 1.4, 1.3],
13 [1.3, 1.2, 1.1, 1.1, 1.2]
14 ])
15
16 XX, YY = np.meshgrid(X, Y)
17
18 f1 = interpolate.interp2d(X, Y, Z, kind=’linear’)
19 f2 = interpolate.interp2d(X, Y, Z, kind=’cubic’)
20
21 x = linspace(0., 2., 51)
22 y = linspace(0., 4., 31)
23 xx, yy = meshgrid(x, y)
24
25 z1 = f1(x, y)
26 z2 = f2(x, y)
27
28 fig = plt.figure(figsize=[8, 3])
29
30 subplot(1, 3, 1)
31 scatter(XX, YY, c=Z, marker = ’s’, s = 100, cmap = cm.Purples)
32 xlim(0, 2)
33 ylim(0, 4)
34
35 subplot(1, 3, 2)
36 CS = plt.contourf(xx, yy, z1, cmap = cm.Purples)
37 xlim(0, 2)
38 ylim(0, 4)
39
40 subplot(1, 3, 3)
41 CS = plt.contourf(xx, yy, z2, cmap = cm.Purples)
42 xlim(0, 2)
43 ylim(0, 4)
44
![Page 92: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/92.jpg)
80 interpolacije
45 subplots_adjust(bottom=0.3,top=0.95,left=0.05,right=0.95)
46 cax = fig.add_axes([0.05, 0.1, 0.9, 0.1])
47 fig.colorbar(CS, cax=cax, orientation=’horizontal’)
48
49 show()
0.0 0.5 1.0 1.5 2.00.0
0.5
1.0
1.52.0
2.5
3.0
3.5
4.0
0.0 0.5 1.0 1.5 2.00.0
0.5
1.0
1.52.0
2.5
3.0
3.5
4.0
0.0 0.5 1.0 1.5 2.00.0
0.5
1.0
1.52.0
2.5
3.0
3.5
4.0
0.75 0.90 1.05 1.20 1.35 1.50 1.65
Slika 12: Primjer 2D interpolacije
![Page 93: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/93.jpg)
Dio V
R J E Š AVA N J E M O D E L A T E M E L J E N I H N A O D J IP D J
![Page 94: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/94.jpg)
![Page 95: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/95.jpg)
16P O C E T N I P R O B L E M I
16.1 modeliranje otvorenog vodotoka
Promatrajmo strujanje fluida u otvorenom vodotoku (eng. open chan-nel flow). Poprecni presjeci kanala mogu biti razliciti npr. pravokutni,trapezni i sl., dok se kod prirodnih vodotoka pojavljuju poprecni pre-sjeci nepravilnih oblika. Ukoliko je poprecni presjek kanala jednakna proizvoljnom presjeku, te je nagib dna jednak u bilo kojoj tocki,govorimo o prizmaticnom kanalu.
Na poprecnom presjeku kanala definiramo sljedece velicine:
• A - površina omocenog presjeka kanala (A = A(x,y)
• P - perimetar odnosno opseg omocenog presjeka (P = P(x,y))
• R - hidraulicki radijus (R =A
P)
Klasifikacija strujanja se može napraviti prema razlicitim kriteri-jima. Ako se brzina strujanja ne mijenja u ovisnosti o vremenu, ondaje strujanje stacionarno, u suprotnom se radi o nestacionarnom stru-janju. Nadalje, ako se brzina strujanja ne mijenja s obzirom na udalje-nost u kanalu (od neke referentne tocke) onda je strujanje uniformno,a inace se radi o neuniformnom strujanju.
Pretpostavke:
• kut Φ je mali
• strujanje je izrazito jednodimenzionalno
• tlak je iskljucivo hidrostatski
Opcenito se strujanje u kanalu opisuje sustavom parcijalnih diferen-cijalnih jednadžbi, koje proizlaze iz zakona ocuvanja mase i zakonaocuvanja kolicine gibanja. Ako pretpostavimo da se radi o prizmatic-nom kanalu, možemo ih zapisati u obliku:
∂A
∂t+∂Q
∂x= 0 (1)
∂v
∂t+ g
∂
∂x
(y+
v2
2g
)= g(S0 − Sf) (2)
83
![Page 96: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/96.jpg)
84 pocetni problemi
Slika 13: Skica poprecnog presjeka otvorenog vodotoka
vodno lice
idealan fluid
referentna ravnina
enegetska linija
Slika 14: Energetske linije u strujanju fluida otvorenim vodotokom
![Page 97: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/97.jpg)
16.1 modeliranje otvorenog vodotoka 85
y je dubina vode, v brzina, a Q protok, pri cemu vrijedi relacija v =Q
A. Sf je pad energetske linije
dH
dx, definiran Manningovom formulom
(koja je prikazana u nastavku). Uvedimo oznaku
dH
dx= −Sf (3)
S S0 smo oznacili nagib dna kanala, tj. S0 = −dz
dx= −tan(Φ).
16.1.1 Stacionarno strujanje
Nadalje, ukoliko promatramo stacionarno strujanje fluida, ocito je da
zbog neovisnosti varijabli o vremenu tj. 0
∂A
∂t= 0 i
∂v
∂t= 0, iz prve
jednadžbe sustava (1) slijedi:
Q = konst. (4)
odnosno iz druge jednanžbe
dz
dx+dy
dx+d
dx
(v2
2g
)= Sf (5)
Zapravo se ova jednadžbe može dobiti i ako krenemo od poznatenam Bernoullijeve jednažbe
z+p
ρg+v2
2g= H (6)
prema kojoj je ukupna energija konstantna duž strujnice. Vrijednostenergetske linije oznacimo s H. Uvažavanjem jednakosti p = ρgy ,
slijedi z+ y+v2
2g= H, odnosno deriviranjem po x dobijemo diferen-
cijalnu jednadžbu za dubinu vode y = y(x):
dz
dx+dy
dx+d
dx
(Q2
2gA2
)=dH
dx(7)
Nadalje, kod stacionarnog toka (Q = konst.) u prizmaticnom ka-nalu vrijedi
d
dx
(Q2
2gA2
)=Q2
2g
d
dx
(1
A2
)=Q2
2g
d
dy
(1
A2
)dy
dx
= −Q2
gA3
dA
dy
dy
dx
= −Q2B
gA3
dy
dx
(8)
![Page 98: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/98.jpg)
86 pocetni problemi
Vrsta kanala Manningov koeficijent
Betonski kanal 0.015
Prirodni kanali (glina) 0.030
Rijecni tokovi 0.030 - 0.070
Tablica 12: Vrijednosti Manningovog koeficijenta za razlicite izvedbe kanala.
Kod druge smo jednakosti uvažili cinjenicu da je kanal prizmatican,što znaci da se poprecni profili ne mijenjaju s obzirom na udaljenost
x u kanalu, dok zadnja jednakost slijedi izdA
dy= B. Pad energetske
linijedH
dx= −Sf definiran je Manningovom formulom, pomocu koje
se modeliraju gubici nastali zbog trenja
16.1.2 Maningova formula
The Manning formula, known also as the Gauckler–Manning formula,or Gauckler–Manning–Strickler formula in Europe, is an empiricalformula for open channel flow, or free-surface flow driven by gravity.Robert Manning
(1816-1897) was anIrish engineer.
It was first presented by the French engineer Philippe Gauckler in1867,[1] and later re-developed by the Irish engineer Robert Manningin 1890.
Sf =Q2n2
R4/3)A2 (9)
gdje je n Manningov koeficijent trenja, R =A
Pje hidraulicki radijus,
a P perimetar.
dy
dx=S0 − Sf
1−BQ2
gA3
(10)
Zadatak: Zapocetni uvjet
y(x0) = y0 odreditidubinu vode y(x) iz
diferencijalnejednadžbe (10).
Opazimo da jednadžba (10) vrijedi zaBQ2
gA36= 1
(10) je diferencijalna jednadžba prvog reda oblika
dy
dx= f(x,y(x))
za koju analiticko rješenje znamo odrediti samo u nekim posebnimslucajevima, za razliku od numerickog rješenja koje znamo odreditiu podrucju u kojem je diferencijalna jednadžba dobro definirana. Dabi problem bio u potpunosti modeliran potrebno je zadati i pocetneuvjete.
![Page 99: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/99.jpg)
16.1 modeliranje otvorenog vodotoka 87
Slika 15: Pravokutni poprecni presjek kanala
16.1.3 Uniformno strujanje i normalna dubina
Kao što smo vec spomenuli, kod uniformnog strujanja su brzina i
dubina vode konstantne velicine pa iz jednadžbe (10), zbogdy
dx= 0,
slijedi:
S0 = Sf (11)
Iz Manningove formule (9) potom proizlazi da kod uniformnog tokavrijedi:
Q =1
nAR2/3S
1/20 (12)
Na osnovu te jednadžbe može se odrediti dubina vode kod uniform-nog toka, tzv. normalna dubina koju cemo oznaciti yn.
16.1.3.1 Prizmaticni kanal s pravokutnim poprecnim presjekom
B - širina kanala
A(y) = B · y⇒ dA
dy= B (13)
P(y) = B+ 2y (14)
Kod zadavanja podataka, obicno su nam poznate velicine: Q, n, S0,B. Normalnu dubinu potom možemo odrediti iz sljedeceg izraza:
Q =1
nAR2/3S
1/20
=1
nByn
(Byn
B+ 2yn
)2/3
S1/20
(15)
koristeci neku od numerickih metoda
![Page 100: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/100.jpg)
88 pocetni problemi
Slika 16: Trapezni poprecni presjek kanala
16.1.3.2 Trapezni kanal
B0 - širina kanala Z - nagib bocnih stranica kanala (tangens kuta na-giba bocnih stranica kanala)
A(y) = (B0 + yZ) · y⇒dA
dy= B0 + 2yZ (16)
P(y) = B0 + 2y√1+Z2 (17)
PrimjerOdrediti normalnu dubinu vode yn u trapeznom kanalu, s bocnim
nagibom Z = 2, te širinom dna B0 = 10m. Nagib dna kanala je kons-
tantan i jednak S0 = −dz
dx= 0.001 (1m po km duljine) a Manningov
koeficijent n = 0.013.RješenjeDubinu vode oznacimo s y. Iz slicnosti trokuta slijedi 1 : z = y : x,
pa je x = zy. Površina omocenog presjeka trapeza je A = (B0 + zy)y.Opseg omocenog presjeka trapeza je P = B0+ 2y
√1+ z2. Hidraulicki
radijus je R =A
P=
(B0 + zy)y
B0 + 2y√1+ z2
.
Normalnu dubinu vode potom odredujemo iz jednadžbe (12), kojanakon uvrštavanja dobivenih izraza i i sredivanja poprimi oblik
nQ
S0−
[(B0 + zyn)yn]5/3[
B0 + 2yn√1+ z2
]2/3 = 0
Nakon uvrštavanja poznatih vrijednosti dobijemo
F(yn) = 12.33(10+ 4.47yn)2/3 − ((10+ 2yn)yn)5/3 = 0
Nul tocka funkcije F(y) predstavlja rješenje gornje jednadžbe. Možese odrediti pomocu neke od numerickih metoda npr. bisekcijom iliNewtonovom metodom. Rješenje je
yn = 1.09m
![Page 101: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/101.jpg)
16.1 modeliranje otvorenog vodotoka 89
16.1.4 Kriticna dubina
Nadalje, definirajmo kriticnu dubinu yc. To je dubina kod koje jeFroudov broj jednak 1, tj. The Froude number
is a dimensionlessnumber defined asthe ratio of acharacteristicvelocity to agravitational wavevelocity. It mayequivalently bedefined as the ratioof a body’s inertia togravitational forces.In fluid mechanics,the Froude numberis used to determinethe resistance of apartially submergedobject movingthrough water, andpermits thecomparison ofobjects of differentsizes. Named afterWilliam Froude, theFroude number isbased on thespeed/length ratio asdefined by him.
Fr =v√gyc
= 1 (18)
Opazimo da je u slucaju kriticne dubine nazivnik u diferencijalnojjednadžbi (10) jednak 0 te da diferencijalna jednadžba u toj tocki nevrijedi. Kriticnu dubinu možemo izraziti iz (18) te dobijemo
yc =3
√Q2
gA2=
3
√q2
g(19)
gdje je q =Q
A. Karakteristika kriticne dubine je da je to dubina kod
koje je specificna energijafluida minimalna.Vrijednost c =
√gy nazivamo brzina širenja poremecaja. To je za-
pravo relativna brzina širenja vala u odnosu na medij unutar kojegtaj val putuje. Apsolutne brzine širenja vala su zapravo jednake v− ci v+ c. Ako je v < c onda govorimo o podkriticnom toku, za v = c jetok kritican, dok je za v > c tok nadkritican. Uocimo da kod podkri-ticnog toka vrijedi v− c < 0 , a v+ c > 0 što znaci da se jedan kraj valaputuje uzvodno, a drugi nizvodno. Kod kriticnog je toka v− c = 0 , paje jedna strana vala stacionarna, dok druga putuje nizvodno brzinomv+ c. Za razliku od toga, kod nadkriticnog toka se obje strane valagibaju nizvodno, jer je v− c > 0 i v+ c > 0. Dakle, kod nadkriticnogtoka poremecaj putuje iskljucivo nizvodno, što znaci da tok uzvodnood promatrane lokacije uopce ’ne zna’ što se dogada nizvodno.
16.1.5 Hidraulicki skok
Hidraulicki skok (jump) se pojavljuje kod prijelaza strujanja iz nadkri-ticnog u pdkriticno. U tocki u kojoj je Froudov broj jednak 1 dogodi sehidraulicki skok. Kod hidraulickog skoka dolazi do gubitka energije(zbog turbulencije) i do naglog skoka u vodnom licu. Kako gubitakenergije na skoku nije unaprijed poznat, jednadžbu ocuvanja energijene možemo primijeniti direktno. Uocimo takoder da u tocki skokadiferencijalna jednadžba (10) ne vrijedi jer je nazivnik desne stranejednak nula.
U nastavku cemo promatrati rješenja jednadžbe (10) uz postavljenipocetni uvjet y(x0) = y0, tj. poznatu dubinu vode u nekoj tocki. Kakoanaliticka rješenja jednadžbe nisu poznata, osim u nekim posebnimslucajevima, za rješavanje cemo koristiti numericke metode. Prisje-timo se, da su standardne numericke metode za rješavanje diferen-cijalne jednadžbe prvog reda: Eulerova metoda, poboljšana Eulerova
![Page 102: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/102.jpg)
90 pocetni problemi
metoda i razlicite Runge-Kutta metode. Koju cemo od spomenutihmetoda odabrati ovisi o tocnosti koju želimo postici. Pritom trebasvakako voditi racuna i o stabilnosti pojedinih metoda.
Rješenja postavljenog pocetnog problema mogu biti razlicitog oblika,u zavisnosti o pocetnom uvjetu, nagibu kanala i trenju u kanalu. Pro-matrati cemo razlicite slucajeve u tzv. kanalima s blagim nagibom(mild slope). Takav je nagib okarakteriziran uvjetom
yc < yn (20)
U tom se slucaju linija kriticne dubine nalazi ispod linije normalnedubine. Tim je dvjema linijama podrucje strujanja podijeljeno u trizone (vidi sliku 3.). Oblik rješenja, dakle vodno lice, ovisi o pocetnomuvjetu. Tražena se rješenja odreduju iz diferencijalne jednadžbe (10),koja se za promatrani pravokutni prizmaticni kanal može zapisati uobliku:
dy
dx= S0
1+
(yn
y
)10/3
1−
(yc
y
)3(21)
U ovisnosti o zoni u kojoj se nalazi pocetni uvjet, dakle pocetna du-bina ovisi sami oblik rješenja. Znacajno je naglasiti da dubina vode,odnosno rješenje ne može prijeci diferencijalne jednadžbe iz jedne udrugu zonu – dakle, ako je pocetni uvjet u zoni 1, vodno lice ostati ceu zoni 1. Pripadajuca se krivulja naziva M1 krivulja.
Razlikujemo M1, M2 i M3 krivulje (Slika 17). Vrijedi:
• za yc < yn < y0 rješenje je M1-krivulja
• za yc < y0 < yn rješenje je M2-krivulja
• za y0 < yc < yn rješenje je M3-krivulja
U tockama u kojima se dogodi prijelaz iz jedne u drugu zonu, rješe-nje zapravo ne zadovoljava diferencijalnu jednadžbu (to su slucajeviu kojima je nazivnik u diferencijalnoj jednadžbi jednak 0, dakle tockeu kojima se dostigne kritican tok).
Primjeri u kojima se pojavljuju promatrane krivulje:
• M1-krivulja – podkriticno strujanje (Fr<1) - utok u jezero;
• M2-krivulja – prijelaz iz podkriticnog u nadkriticno strujanjekod kanala ciji se nagib poveca; strujanje prije prijelaza u nad-kriticno ima oblik M2-krivulje;
• M3-krivulja – prijelaz iz nadkriticnog u podkriticno strujanjenpr. strujanje ispod zapornice; dio krivulje prije prijelaza u pod-kriticni tok ima oblik M3-krivulje.
Na slican se nacin rješenja mogu dobiti i za vece nagibe kanala (steepslope) – kada je yc > yn. U tom slucaju rješenja imaju oblik tzv. S-krivulja (Slika 18).
![Page 103: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/103.jpg)
16.1 modeliranje otvorenog vodotoka 91
Slika 17: M-krivulje vodnog lica Slika 18: S-krivulje vodnog lica
16.1.6 Numericko rješavanje
Izvorni kod 35: Strujanje u pravokutnom kanalu
1 # -*- coding: utf-8 -*-
2 """
3 pravokutni kanal
4 transkriticno strujanje
5 rješavanje ODJ
6 """
7
8 from numpy import *9 from scipy.optimize import *10 from scipy.integrate import *11 from matplotlib.pyplot import *12
13 g = 9.81
14
15 # ulazni podaci o kanalu
16 B = 15.0
17 S0 = 0.001
18 n = 0.012
19
20 Q = 10.0
21
22 yc = ((Q/B)**2/g)**(1.0/3.0)
23 print(’yc = ’+str(yc))
24
25 # osnovne velicine
26 A = lambda y: B*y
27 P = lambda y: B+2*y
28 R = lambda y: A(y)/P(y)
29 Sf = lambda y: (n*Q/(R(y)**(2.0/3.0)*A(y)))**2
30
![Page 104: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/104.jpg)
92 pocetni problemi
31 yn = fsolve((lambda y: Sf(y)-S0),yc)
32 print(’yn = ’+str(yn[0]))
33
34 # racunanje razine vode
35 x0 = 0.0
36 y0 = 0.42
37 x1 = 30.0
38
39 X = linspace(x0,x1,100)
40
41 dydx = lambda y,x: (S0-Sf(y))/(1.0-B*Q**2/(A(y)**3*g))
42 Y = odeint(dydx,y0,X)
43
44 #dydx_2 = lambda y,x: S0*(1.0-(yn/y)**(10.0/3.0))/(1.0-(yc/y)**3)
45 #Y_2 = odeint(dydx_2,y0,X)
46
47 #crtanje
48 figure(1, [8, 3])
49 Ydno = -(X-x0)*S0
50 plot(X,Y[:,0]+Ydno)
51 plot(X,Ydno)
52 #plot(X,Y_2[:,0]-(X-x0)*S0);
53 legend((’razina vode’,’dno’),loc=’best’);
54 subplots_adjust(bottom=0.08,top=0.95,left=0.05,right=0.98)
55 show()
0 5 10 15 20 25 300.1
0.0
0.1
0.2
0.3
0.4
0.5
razina vodedno
Slika 19: Numericko rješenje strujanja u otvorenom kanalu pravokutnog pre-sjeka
![Page 105: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/105.jpg)
17R U B N I P R O B L E M I
Uvod, opcenito o rubnim problemima
17.1 savijanje grede
Za rješavanje ovog primjer korišten je rješavac bvp1lg kojeg se možeinstalirati pomocu naredbe:
sudo pip install scikits.bvp1lgbvp1lg zahtjevaFortran compiler!Veza izmedu progiba elasticne linije i postavljenog opterecenja opi-
sana je Euler-Bernoullijevom jednadžbom (Diferencijalna jednadžbaelasticne linije):
EI · d2 u
d x2= −M(x) (22)
ili prošireno
d2
d x2
(EI · d2 u
d x2
)= q(x) (23)
gdje je E Youngov modul, I osni moment tromosti poprecnog pre-sjeka, u je progib grede, M je moment savijanja, q je kontinuiranopoprecno opterecenje, a x je os nedeformirane grede.
Ako je E · I konstantno duž grede, jednadžba (23) se pojednostav-ljuje:
E · I · d4 u
d x4= q(x) (24)
U jednadžbu savijanja moguce je, osim kontinuiranog opterecenja,uracunati i ostala vanjska opterecenja duž grede:
E · I · dd x
(d
d x
(d
d xdud x
+M(x)
)+Q(x)
)= q(x) (25)
Pomocu supstitucija:
w1(x) = u(x)
w2(x) =dud x
w3(x) =d2 u
d x2+M(x)
w4(x) =dud x
(d2 u
d x2+M(x)
)+Q(x)
(26)
93
![Page 106: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/106.jpg)
94 rubni problemi
obicnu diferencijalnu jednadžbu 4. reda (25) može se zapisati kaosustav 4 obicne diferencijalne jednadžbe 1. reda.
dw1
d x= w2(x)
dw2
d x= w3(x) +M(x)
dw3
d x= w4(x) +Q(x)
dw4
d x=1
EIq(x)
(27)
Za sustav (27) potrebno je postaviti 4 rubna uvjeta kako bi se moglodobiti rješenje savijanja grede. Rubni uvjeti koje je moguce postavitisu:
• Rubni uvjet progiba u|xbc= ubc. U tocki xbc postavlja se vri-
jednost progiba ubc.
• Rubni uvjet nagiba dudx
∣∣xbc
= vbc. U tocki xbc postavlja se vri-jednost nagiba vbc.
• Rubni uvjet momenta d2 udx2
∣∣∣xbc
= Mbc. U tocki xbc postavlja se
vrijednost momenta Mbc.
• Rubni uvjet poprecne sile d3 udx3
∣∣∣xbc
= Qbc. U tocki xbc postavlja
se vrijednost poprecne sile Qbc.
U izvornom kodu 36 prikazan je primjer rješavanja savijanja gredekoristeci bvp1lg paket koji je specijaliziran rješavac za rubne pro-bleme. U danom primjeru korišteni su sljedeci rubni uvjeti: lijevi rubje uklješten (nema progiba ni rotacije/nagiba) dok na desnom rubuzglob (nema pomaka ni momenta). Greda je opterecenja konstantnimkontinuiranim opterecenjem duž cijele dužine.
Izvorni kod 36: Rješavanje elasticne linije savijanja
1 from pylab import *2 import scikits.bvp1lg as bvp
3
4 # Definiranje problema
5 EI = 1.0 # Youngov modul i moment otpora
6 L = 1.0 # Duzina grede
7 # Opterecenja
8 qq=-1.0
9 P=-0.0
10
11 # Kontinuirana sila, poprecna sila i moment savijanja
12 def q(x): return qq
13 def Q(x):
14 if x <= L/2.0: return 0.0
15 else: return P
16 def M(x):
![Page 107: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/107.jpg)
17.2 stacionarno provoðenje topline u štapu 95
17 if x <= L/2.0: return 0.0
18 else: return 0.0
19
20 degrees = [1, 1, 1, 1]
21
22 # Sustav diferencijalnih jednadzbi
23 def function(x , y):
24 u, du, d2u, d3u = y
25 return ([ du,
26 d2u+M(x),
27 d3u+Q(x),
28 q(x)/EI])
29
30 # Rubni uvjeti
31 boundary_points = [0.0, 0.0, L, L]
32 def boundary_conditions(y):
33 u, du, d2u, d3u = y
34 return [u[0], du[1], u[2], d2u[3]]
35
36 tol = [1e-15, 1e-15, 1e-15, 1e-15]
37
38 # Rjesavanje rubnog problema
39 solution = bvp.colnew.solve(
40 boundary_points, degrees, function, boundary_conditions,
41 is_linear=False, tolerances=tol,
42 vectorized=False, maximum_mesh_size=10000)
43
44 # Vizualizacija rjesenja
45 figure(1, figsize=(8, 3))
46 x = solution.mesh
47 plot(x, solution(x)[:,0], ’b-’, linewidth=2)
48 xlabel(’x’)
49 ylabel(’y’)
50 grid()
51 subplots_adjust(bottom=0.15,top=0.95,left=0.13,right=0.98)
52 savefig(’greda.pdf’)
53 show()
0.0 0.2 0.4 0.6 0.8 1.0x
0.006
0.005
0.004
0.003
0.002
0.001
0.000
y
Slika 20: Progib elasticne linije grede
17.2 stacionarno provoðenje topline u štapu
![Page 108: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/108.jpg)
![Page 109: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/109.jpg)
Dio VI
O P T I M I Z A C I J S K E M E T O D E
![Page 110: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/110.jpg)
![Page 111: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/111.jpg)
18E V O L U C I J S K I A L G O R I T M I
http://inspyred.github.com/index.html
Kako instaliraty inspyred:
user@machine:~>sudo pip install inspyred
99
![Page 112: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/112.jpg)
![Page 113: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/113.jpg)
Dio VII
D O D A C I
![Page 114: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/114.jpg)
![Page 115: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/115.jpg)
AA P P E N D I X T E S T
103
![Page 116: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/116.jpg)
![Page 117: Python Skripta](https://reader035.fdocument.pub/reader035/viewer/2022082210/55cf9751550346d03390f272/html5/thumbnails/117.jpg)
colophon
This work is licensed under a Creative CommonsAttribution-ShareAlike 3.0 Unported License.
http://creativecommons.org/licenses/by-sa/3.0/
This document was typeset using the typographical look-and-feelclassicthesis developed by André Miede. The style was inspiredby Robert Bringhurst’s seminal book on typography “The Elements ofTypographic Style”. classicthesis is available for both LATEX and LYX:
http://code.google.com/p/classicthesis/
Final Version as of 6. travnja 2013. (classicthesis v0.1).