SciPy
Što je SciPy?
SciPy je nadgradnja NumPy paketa, i sadrži veliki broj numeričkih algoritama za cijeli niz područja. Ovdje su pobrojana neka nama zanimljivija:
Specijalne funkcije (scipy.special)
Integracija (scipy.integrate)
Optimizacija (scipy.optimize)
Interpolacija (scipy.interpolate)
Fourierova transformacija (scipy.fftpack)
Linearna algebra (scipy.linalg)
Linearna algebra s rijetkim matricama (scipy.sparse)
Statistika (scipy.stats)
Procesiranje slika (scipy.ndimage)
Za zadnja dva područja postoje i napredniji paketi. Za slike smo već npr. koristili scikit-image), a za statistiku ćemo korititi pandas paket.
SciPy paket učitavamo pomoću scipy
modula.
Narvno, možemo učitati i samo podpaket koji nas zanima, u ovom slučaju za linearnu algebru.
Specijalne funkcije
Kao primjer pogledajmo Besselove funkcije:
Numerička integracija
quad
funkcija se koriste za numeričku integracije (quad ... jer se na engleskom taj proces zove kvadratura). dblquad
služi za dvostruke, a tplquad
za trostruke integrale.
Jednostavan primjer, računamo
Ove funkcije imaju puno opcionalnih argumenata. Ako želimo funkciji koju integriramo proslijediti dodatne parametre (vidi ovdje), možemo korisiti varijablu args
.
Korištenje anonimnih funkcija:
U više dimenzija:
Obične diferencijalne jednadžbe (ODJ)
SciPy nudi dvije mogućnosti rješavanja ODJ: Funkciju odeint
i klasu ode
. Mi ćemo prikazati odeint
.
Sustav ODJ zapisujemo kao:
gdje je
,
Još trebamo i početne uvjete .
Ovo je sintaksa:
t
je niz vremena za koje želimo riješiti ODJy_t
je niz s jednim retkom za svaki trenutak izt
, a stupci daje rješenjey_i(t)
u tom trenutku
Dvostruko njihalo
Opis problema: http://en.wikipedia.org/wiki/Double_pendulum
Ovo su jednadže s wiki stranice:
Definiramo:
Jednostavna animacija, kasnije ćemo vidjeti kako možemo napravit bolju animaciju.
Prigušeni dinamički oscilator
Opis problema možete pročitati ovdje: http://en.wikipedia.org/wiki/Damping
Jednadžba je
pozicija oscilatora,
frekvencija,
koeficijent gušenja.
Definiramo :
Fourierova transformacija
Paket je fftpack
:
Primjenimo Fourierovu transformaciju na prethodni primjer harmoničkog oscilatora.
Kako je signal realan, spektar je simetričan. Stoga nam je dosta nacrtati pozitivne frekvencije.
Linearna algebra
Detaljna dokumentacija: http://docs.scipy.org/doc/scipy/reference/linalg.html
Nećemo prolaziti kroz sve funkcije.
Sustavi linearnih jednadžbi
Svojstveni problem
Svojstveni vektori su stupci u evecs
:
To nije sve, postoje i specijalizirane funkcije, kao npr. eigh
za hermitske matrice
Matrične operacije
Rijetke matrice
Više informacija na http://en.wikipedia.org/wiki/Sparse_matrix
Postoji više formata rijetkih matrica, mi nećemo ulaziti u detalje.
Pametniji način kreiranja rijetke matrice.
Vektor v
smo mogli konstruirati i drugačije (vidjeli smo primjere u predavanju o NumPy-ju), no uvijek trebamo doći do dvodimenzionalnog niza. Za razliku od MATLAB-a u kojemu su svi nizovi 2D, u NumPy-ju 1D niz nije isto što i matrica ili . Npr. jedna mogućnost je
Optimizacija
Više na http://scipy-lectures.github.com/advanced/mathematical_optimization/index.html
Modul je optimize
:
Nalaženje minimuma
Nalaženje rješenja jednadžbi
Problem oblika se rješava fsolve
funkcijom.
Interpolacija
Funkcija interp1d
, za dane nizove i koordinata vraća objekt koji se ponaša kao funkcija.
Statistika
Više na http://docs.scipy.org/doc/scipy/reference/stats.html.
Mi ćemo kasnije raditi s moćnijim paketom pandas
.
Osnovna statistika:
Python verzija | 3.5.3 |
kompajler | GCC 4.8.2 20140120 (Red Hat 4.8.2-15) |
sustav | Linux |
broj CPU-a | 8 |
interpreter | 64bit |
numpy verzija | 1.11.3 |
scipy verzija | 0.19.0 |
matplotlib verzija | 2.0.0 |
Zadaci za vježbu
Konstruirajte matricu tipa
lil_matrix
, konvertirajte je uCSR
format i riješite za neki .Učitajte matricu ODEP400A te izračunajte 100 njenih svojstvenih vrijednosti.
Zadana je funkcija . Ta funkcija ima minimum u . Krenuvši od početne točke , probajte doći blizu minimuma koristeći funkcije za optimizaciju.
Riješite Lotka-Volterrin sustav ODJ za različite parametre , , , .
Riješite sljedeći problem: Za početnu točku uzmite .
Slika moonlanding.png je puna šuma. Zadaća je očistiti sliku koristeći Fourierovu transformaciju.
Učitajte sliku s
pylab.imread()
.Nađite i iskoristite 2-D FFT funkciju iz
scipy.fftpack
i nacrtajte spektar slike.Spektar se sastoji od komponenti s viskom i niskom frekvencijom. Šum je smješten u dijelu spektra s visokom frekvencijom, pa probajte neke od tih komponenti staviti na nulu.
Koristite inverznu Fourierovu transformaciju da pogledate da li ste napravili dobar posao.