13
1 | Page PRIRODOSLOVNO MATEMATIČKI FAKULTET SVEUČILIŠTA U ZAGREBU Seminarski rad: Učenje fizike uz Python STUDENTICA: Romina Dubajić ODSJEK I SMJER: Fizički odsjek, smjer prof. Fizike i tehnike KOLEGIJ: Uporaba računala u nastavi NOSITELJ KOLEGIJA: doc.dr. Dalibor Paar U Zagrebu, lipnja 2014.

Učenje fizike uz Python - phy.pmf.unizg.hr Romina Dubaic.pdf · ponuĎeni već gotovi primjeri kako izgledaju problemski zadaci, a možemo i sami isprogramirati neke situacije da

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

1 | P a g e

PRIRODOSLOVNO MATEMATIČKI FAKULTET

SVEUČILIŠTA U ZAGREBU

Seminarski rad:

Učenje fizike uz Python

STUDENTICA: Romina Dubajić

ODSJEK I SMJER: Fizički odsjek, smjer prof. Fizike i tehnike

KOLEGIJ: Uporaba računala u nastavi

NOSITELJ KOLEGIJA: doc.dr. Dalibor Paar

U Zagrebu, lipnja 2014.

2 | P a g e

Sadržaj

1) Uvod................................................................................................... 3 str.

2) VPython u fizici................................................................................... 4 str.

2.1) Lopta koja odskače................................................................... 7 str.

2.2) Problem triju tijela................................................................... 10 str.

3) Zaključak............................................................................................ 13 str.

4) Literatura............................................................................................ 13 str.

3 | P a g e

1) Uvod

Pred nama, budućim nastavnicima fizike su zanimljivi alati za bolje i dinamičnije sudjelovanje učenika u nastavi. Upotreba Pythona, kao besplatne platforme, omogućava, ne samo interdisciplinarnost fizike i informatike, na taj način potičući učenike i studente da bolje razumiju ono sto rade, već daje i osjećaj korisnosti, jer su svojim trudom napravili samostalne programe koji objašnjavaju pojave i probleme u fizici. Kroz sljedećih nekoliko stranica pokušat ćemo ući u jedan dio programiranja u Pythonu koji nam omogućava vizualizaciju nekih problema, pojašnjava neke dogaĎaje ili pomaže u razumjevanju nekih apstraktnih pojmova. Za tako što nam idealno mogu poslužiti simulacije koje jesu moguće i u Pythonu. Kako bi to ostvarili, moramo imati instaliran Python i VPython.

4 | P a g e

2) VPython u fizici

VPython je programski jezik koji se temelji na Pythonu zajedno s 3D grafičkim modulom tzv.“visual“ kojeg je izvorno napravio David Scherer 2000.g. Upravo on omogućava navigaciju 3D prikaza i animacija. Osim 3D, moguće je naravno i 1D i 2D, a animacije se odvijaju u real - time-u, tj. stvarnom vremenu. Prednost ovog jezika je što omogućava korištenje kako naprednijim programerima tako i onima s nešto manje iskustva.

Nakon što smo skinuli VPython, kliknemo na ikonicu VIDLE na desktopu i otvara nam se novi prozor. Klikanjem na File –> Open otvara se prozor u kojem su nam ponuĎeni već gotovi primjeri kako izgledaju problemski zadaci, a možemo i sami isprogramirati neke situacije da nam imaju simulaciju/animaciju. Kako odaberemo jedan od primjera, otvara se i njihov program, tako da možemo pobliže promotriti od jednostavnijih primjera pa sve do vrlo složenih. Najbolje će nam objasniti primjeri kako zapravo VPython funkcionira i izgleda, pa ćemo uzeti nekoliko iz njegove biblioteke. Odaberemo jedan od primjera dvoklikom i otvara nam se program kojeg pokrećemo ili s F5 ili na Run -> Run module. Pokreće se animacija.

5 | P a g e

Primjer 1. Učenje o vektorima, smjerovima i iznosima. Lijevo je animacija, desno njen program.

Kroz ovu animaciju možemo se kretati tako da mi jenjamo duljinu vektora ili kut, ali ne istovremeno. Učimo zapravo o vektorskom produktu dva vektora crvenog i zelenog, gdje nam je omogućeno mijenjanje kuta ili duljine vektora na ovoj zelenoj i plavoj kuglici i mozemo odmah vidjeti razultate naših pomicanja, a to je žuta strelica. Primjer 2. Animacija električnog motora

U ovoj animaciji nam nije dopušteno mijenjanje nekakvih parametara, već je cilj vidjeti samo kako iznutra izgleda elektromotor i princip njegovog rada Ipak, možemo zaustaviti rad motora jednim klikom na animaciju ili ponovno pokrenuti, takoĎer klikom.

6 | P a g e

Primjer 3. Žiroskop koji se okreće na opruzi.

Za ovakav primjer možemo vidjeti kao nam animacija odlično predočava žiroskop u vrtnji na opruzi. Ukoliko kliknemo na rotor, pokaže nam kutni moment i impuls. Ponovnim klikom miče ih sa slike. Primjer 4. Dokaz da se i u Pythonu može igrati – križić-kružić!

Interaktivna igrica u kojem dva igrača povlače loptice s donje mreže sve do gore. Cilj je, naravno, popuniti sve loptice zaredom kako bi se pobjedilo. Ako se to ostvari, program, osvjetli pobjedničku kombinaciju.

7 | P a g e

Uz svaku animaciju dan je i prikaz programa, samo da se vidi kako to može biti komplicirano i podugačko, ali ako bi se radilo sistematično i neke jednostavnije primjere, moglo bi biti interesantno. Ovo su bili primjeri iz biblioteke samog VPythona. Pogledajmo sada dva programa koja bi mogli isprogramirati u nastavi za jedan jednostavniji i jedan malo složeniji primjer. 2.1) Lopta koja odskače

Primjer se sastoji od jednostavne lopte koja skače gore dolje. Dodali smo i graf kako bi vidjeli kako se energija gubi, smanjuje tijekom vremena sa svakim skokom. Parametri potrebni za rad i razumjevanje programa:

1D kinematika

Diferencijalne jednadžbe

Visual i Visual.graph

Moguće je mijenjati početne brzine, visinu, gravitaciju, elastičnost, trenje, itd…

8 | P a g e

Naš će program izgledati ovako: Prvo ćemo uvesti ono što nam treba iz biblioteke:

#PROGRAM DEPENDENCES:

fromvisual import *

fromvisual.graph import *

Sljedeći korak je dati mogućnost podešavanja veličine prozora, naslova i ako želimo neke dodatne mogućnosti kao što su automatsko podešavanje i sl.:

#SCENE DISPLAY (FROM VPYTHON)

scene.width = 700

scene.height = 600

scene.title = 'BOUNCING BALL'

scene.autoscale=False

scene.fullscreen = False

scene.center = vector(0, 10, 10)

Vrijednosti naših varijabli se mogu mijenjati, jer su jednadžbe napisane kao njihove funkcije: #VARIABLES

t_max = 20 #program timeout

g = -9.81 #acelerationofgravity

y = 10 #initialhighoftheball

v = 10 #initialvelocityoftheball

dt = 0.006 #increaseof time for eachiteration

e = 0.9 #coef. lostofenergyineachbounce

k = 0 #frictionwithair

t = 0 #initial time

Sad moramo definirati pod kao kutiju i loptu kao sferu kako bi ih nacrtali. U sljedećem koraku, pozicija lopte se ažurira kroz petlju:

#DRAWING THE OBJECTS

floor = box(height = 0.2, width = 30, length = 30, color =

color.white, material = materials.wood)

ball = sphere(pos = vector(0, y, 0), radius = 1, color =

color.red)

Prije nego uĎemo u while petlju, definiramo kako će izgledati linija:

#GRAPH

f1 = gdisplay(x=0, y=0, width=600, height=600,

title='MOVEMENT (y vs. t)', xtitle="t", ytitle='y',

foreground=color.black, background=color.white,

xmax=t_max, xmin=0, ymax=15, ymin=0)

f1 = gcurve(color=color.black) #Thegraphicscurve

9 | P a g e

Sljedeći korak je na napravimo petlju kako bi mogli ažurirati poziciju lopte. Ovdje upotrebljavamo diferencijalne jednadžbe kako bi to ažuriranje bilo postupno. Ideja je da započnemo petlju s vrijednosti od dt, koja uzrokuje seriju man jih koraka u brzini i poziciji, samim tim crtajući uzastopne slike lopte, poda koji uzrokuje efekt pokreta:

while t < t_max: #mainloop

rate (200) #loops/sec

#DIFERENTIAL EQUATIONS

dv = g*dt - k*v*dt

v = v + dv

dy = v*dt

y = y + dy

t = t + dt

Sad ide najvažniji dio – skok. Očito je da će lopta oskakivati kada je na podu, pa trebamo obrnuti brzinu na gore. Problem je da naš program ima pogrešku u poziciji koja joj je dana veličinom dt. Ta mala pogreška zabranjuje nam da stavimo npr. If y==ball.radius:, jer nije sigurno da će lopta doseći tu točku, pa smo prisiljeni staviti sljedeći uvjet: if y < ball.radijus: Sada opet imamo problem, lopta zaokupi if u sljedećem ponavljanju, jer nije još doseglo potrebnu visinu da bude višlje od ball.radijus. To je zato što ako upotrijebimo neke gubitke energije, oskakivanje nije simetrično. To proizvodi pogrešku tamo gdje lopta obrne svoju brzinu nekoliko puta i može skakati prema dolje. Riješenje je da složimo položaj lopte prema ball.radijus visoko nakon ulaska u if funkciju, kako bi izbjegli tu pogrešku.

#Bounce conditions

if y < ball.radius:

v = -v*e

y = ball.radius

#Scene updating

ball.y = y

Na kraju, moramo ažurirati ball.y i nacrtati to u graf.

#Drawing in the plot

f1.plot(pos = (t , y))

print "...FINISH!"

print "www.pythonforphysics.blogspot.com"

10 | P a g e

2.2) Problem triju tijela Naš sljedeći primjer je vezan za poznati Newtonov „problem triju tijela“, vezan za brzine, mase i smjerove kretanja triju tijela. Ovdje na zanimljiv način možemo vidjeti kako bi se oni kretali. Parametri potrebni za rad i razumjevanje programa:

Newtonova gravitacija

Visual i Math

kao i uvijek, uvezemo iz biblioteke sve sto nam je potrebno za program, definiramo parametre koji se mogu mijenjati za različite rezultate - masa za sva tri objekta, njihovi radijusi i gravitacijska konstanta G, početne brzine i položaji

crtamo objekte kao sfere i njihove putanje

uključujemo fiziku u proračunima za gibanje, pa radimo funkciju grav kako bi izračunali akceleraciju zbog neka od tri objekta, a za to koristimo varijable – položaj tijela koji se privlači, položaj onoga koji privlači i njihove mase

počinjemo s while petljom, zapravo računamo poziciju tri lopte, tijela preko diferencijalnog računa

nakon toga, bez da napuštamo while petlju, ažuriraju se pozicije.

jednadžbe su napisane kao funkcije sfere.

I na kraju, jedan if uvjet kako bi prekinuo petlju ukoliko se lopte previše približe jedna drugoj

11 | P a g e

Ovako to izgleda u Pythonu:

12 | P a g e

13 | P a g e

3) Zaključak

VPython, kao neobično jednostavan produžetak za Python, omogućuje 3D sagledavanje problema u obrazovanju za razne svrhe, pa tako i za fiziku i programiranje za vizualiziranje sustava i podataka u 3D. Možemo slobodno predvidjeti samo dodatne upgrade-ove ovog programskog jezika i još novih mogućnosti za dinamičniji rad u nastavi.

4) Literatura

Oriol Frigola, (2013.), [Internet], <raspoloživo na: http://pythonforphysics.blogspot.com/>, [28.5.2014.]

[Internet], <raspoloživo na: http://www.vpython.org/index.html>, [ 28.5.2014.]

National Science Foundation , [Internet], <raspoloživo na: http://www.matterandinteractions.org/Content/Materials/materials.html>, [28.5.2014.]

Rob Salgado, (2011.), [Internet], <raspoloživo na: http://www.visualrelativity.com/vpython/>,

[28.5.2014.]