Fysik 1/Logbog uge 40

Fra Meinertz Wiki

< Fysik 1(Forskel mellem versioner)
Skift til: Navigation, Søgning
m (T)
 
(Versionssammenligningen medtager en mellemliggende version.)
Linje 7: Linje 7:
Vi vil forsøge at simulere vores katapultforsøg, ved at opbygge et system hvor projektiler bliver affyret i retning og hastighed tilsvarende det virkelige forsøg vi lavede. Vi vil f.eks. bruge en form for rand-funktion samt vores usikkerheder fra første forsøg, til at få resultater der ligner dem vi fik fra det fysiske forsøg mest muligt.
Vi vil forsøge at simulere vores katapultforsøg, ved at opbygge et system hvor projektiler bliver affyret i retning og hastighed tilsvarende det virkelige forsøg vi lavede. Vi vil f.eks. bruge en form for rand-funktion samt vores usikkerheder fra første forsøg, til at få resultater der ligner dem vi fik fra det fysiske forsøg mest muligt.
 +
 +
Da mine egne måledata fra [[Fysik 1/Logbog uge 38|laboratorieøvelsen i uge 38]] var utilstrækkelige i deres antal, er værdierne der er benyttet i denne uge indsamlet af Henrik fra gruppen.
 +
 +
=== Programmet skal fungere således: ===
 +
Logikken i programmet er rimelig simpel (hvis man har nogenlunde styr på den klassiske mekanik). Vi definerer en sfære som repræsenterer projektilet. Dette projektil kan (da vi ser bort fra vindmodstand) antages kun at blive påvirket af tyngdekraften imens den bevæger sig i sin bane, og da tyngdekraften er konstant og nedadrettet kan vi definere den som en nedadrettet vektor med størrelsen 9.82. Vi behøver ikke at tage højde for projektilets masse da vores simulation viser hvad der sker efter affyringen, og vi kan derfor blot sættet projektilets initielle hastighed til en vektor med samme størrelse som resultatet fra laboratorieøvelsen i [[Fysik 1/Logbog uge 38|uge 38]] og retning som vi målte katapultens affyringsvinkel til. Dertil lægges også usikkerheden, som nemt omregnes fra standardafvigelse med funktionen gauss.
 +
 +
Man vælger et passende tidsinterval og laver en løkke der ændrer projektilets hastighed med accelerationen ganget med tidsintervallet, og ændrer projektilets position med hastigheden ganget med tidsintervallet så længe projektilets y-koordinat (vertikale position) er positiv. Når projektilets y-koordinat er lig med (eller en lillebitte smule under) 0, så lader man programmet udskrive boldens position og starter forfra (ved at lade det gentage med en løkke).
== Det endelige resultat ==
== Det endelige resultat ==
Linje 19: Linje 26:
#avec=arrow(color=color.green,shaftwidth=0.1)
#avec=arrow(color=color.green,shaftwidth=0.1)
#vvec=arrow(color=color.yellow,shaftwidth=0.3)
#vvec=arrow(color=color.yellow,shaftwidth=0.3)
-
ball.mass=5
 
-
ball.acceleration=vector(0,-9.82,0)
+
ball.acceleration=vector(0,-9.82,0) # projektilets acceleration
-
path=curve(radius=0.01,color=color.red)
+
path=curve(radius=0.01,color=color.red) # vi tegner projektilets bane
-
autoscale=1 #this off auto scaling!
+
autoscale=1 # sørger for at vi ser affyringen fra samme placering hele tiden
-
scene.range=(2,1,2) #gives the property range to the scene object
+
scene.range=(2,1,2) # angiver hvor stort et område vi skal se
-
scene.center=(1.5,0,0)
+
scene.center=(1.5,0,0) # angiver centrum for vores udsyn
-
dt=0.0002 #dt is delta t and is 0.1 second if we are using MKS
+
dt=0.0002 # sætter tidsintervallet (delta t)
-
#loop for 5 seconds:
+
throws = 25 #hvor mange gange der skal kastes
throws = 25 #hvor mange gange der skal kastes
thrown = 0 # hvor mange gange der er kastet
thrown = 0 # hvor mange gange der er kastet
-
# til statistik
+
while thrown < throws: # så længe projektilet er kastet færre gange end det skal
-
gennemsnit = 2.768
+
-
intervaller =
+
-
 
+
-
while thrown < throws:
+
      
      
-
     ball.pos = (0,0,0)
+
     ball.pos = (0,0,0) # nulstil projektilets position
-
     ball.velocity=vector(gauss(3.71,0.134),gauss(3.71,0.134),0)
+
     ball.velocity=vector(gauss(3.71,0.134),gauss(3.71,0.134),0) # sætter projektilets begyndelseshastighed (med usikkerhed)
-
     thrown += 1
+
     thrown += 1 # angiver at projektilet er kastet igen så vi kan holde styr på hvor mange gange der er kastet
-
     t=0 #start at time 0
+
     t=0 # nulstiller tiden
      
      
-
     while ball.pos.y >= 0:
+
     while ball.pos.y >= 0: # så længe projektilets vertikale position er positiv
         #rate(1000) #slows animation by 1/arg seconds
         #rate(1000) #slows animation by 1/arg seconds
-
         ball.velocity = ball.velocity+ball.acceleration*dt
+
         ball.velocity = ball.velocity+ball.acceleration*dt # ændrer projektilets hastighed med acceleration gange tidsinterval
-
         ball.pos=ball.pos+ball.velocity*dt
+
         ball.pos=ball.pos+ball.velocity*dt # ændrer projektilets position med hastighed gange tidsinterval
-
         t=t+dt
+
         t=t+dt # ændrer tiden
-
         path.append(pos=ball.pos)
+
         path.append(pos=ball.pos) # opdater skitseringen af projektilets bane
         #avec.axis=ball.acceleration
         #avec.axis=ball.acceleration
         #vvec.axis=ball.velocity
         #vvec.axis=ball.velocity
Linje 59: Linje 60:
         #    vvec.pos=ball.pos
         #    vvec.pos=ball.pos
 +
    # udskrive kastets nummer, hvor længe projektilet var i luften, og hvor det landede
     print "----"
     print "----"
     print thrown
     print thrown
     print t
     print t
     print ball.pos.x
     print ball.pos.x
-
 
-
    totlen += ball.pos.x
 
</pre>
</pre>
 +
 +
[[Kategori:Fysik 1]]

Nuværende version fra 8. nov 2009, 17:12

Gruppe 1 består i denne uge af

Indledende overvejelser

Vi vil forsøge at simulere vores katapultforsøg, ved at opbygge et system hvor projektiler bliver affyret i retning og hastighed tilsvarende det virkelige forsøg vi lavede. Vi vil f.eks. bruge en form for rand-funktion samt vores usikkerheder fra første forsøg, til at få resultater der ligner dem vi fik fra det fysiske forsøg mest muligt.

Da mine egne måledata fra laboratorieøvelsen i uge 38 var utilstrækkelige i deres antal, er værdierne der er benyttet i denne uge indsamlet af Henrik fra gruppen.

Programmet skal fungere således:

Logikken i programmet er rimelig simpel (hvis man har nogenlunde styr på den klassiske mekanik). Vi definerer en sfære som repræsenterer projektilet. Dette projektil kan (da vi ser bort fra vindmodstand) antages kun at blive påvirket af tyngdekraften imens den bevæger sig i sin bane, og da tyngdekraften er konstant og nedadrettet kan vi definere den som en nedadrettet vektor med størrelsen 9.82. Vi behøver ikke at tage højde for projektilets masse da vores simulation viser hvad der sker efter affyringen, og vi kan derfor blot sættet projektilets initielle hastighed til en vektor med samme størrelse som resultatet fra laboratorieøvelsen i uge 38 og retning som vi målte katapultens affyringsvinkel til. Dertil lægges også usikkerheden, som nemt omregnes fra standardafvigelse med funktionen gauss.

Man vælger et passende tidsinterval og laver en løkke der ændrer projektilets hastighed med accelerationen ganget med tidsintervallet, og ændrer projektilets position med hastigheden ganget med tidsintervallet så længe projektilets y-koordinat (vertikale position) er positiv. Når projektilets y-koordinat er lig med (eller en lillebitte smule under) 0, så lader man programmet udskrive boldens position og starter forfra (ved at lade det gentage med en løkke).

Det endelige resultat

# -*- coding: utf-8 -*-
from visual import *
from random import gauss

ball=sphere(pos=(0,0,0),radius=0.05,color=color.blue)

arrowtails="atorigin"
#avec=arrow(color=color.green,shaftwidth=0.1)
#vvec=arrow(color=color.yellow,shaftwidth=0.3)

ball.acceleration=vector(0,-9.82,0) # projektilets acceleration
path=curve(radius=0.01,color=color.red) # vi tegner projektilets bane
autoscale=1 # sørger for at vi ser affyringen fra samme placering hele tiden
scene.range=(2,1,2) # angiver hvor stort et område vi skal se
scene.center=(1.5,0,0) # angiver centrum for vores udsyn
dt=0.0002 # sætter tidsintervallet (delta t)

throws = 25 #hvor mange gange der skal kastes
thrown = 0 # hvor mange gange der er kastet

while thrown < throws: # så længe projektilet er kastet færre gange end det skal
    
    ball.pos = (0,0,0) # nulstil projektilets position
    ball.velocity=vector(gauss(3.71,0.134),gauss(3.71,0.134),0) # sætter projektilets begyndelseshastighed (med usikkerhed)

    thrown += 1 # angiver at projektilet er kastet igen så vi kan holde styr på hvor mange gange der er kastet
    t=0 # nulstiller tiden
    
    while ball.pos.y >= 0: # så længe projektilets vertikale position er positiv
        #rate(1000) #slows animation by 1/arg seconds
        ball.velocity = ball.velocity+ball.acceleration*dt # ændrer projektilets hastighed med acceleration gange tidsinterval
        ball.pos=ball.pos+ball.velocity*dt # ændrer projektilets position med hastighed gange tidsinterval
        t=t+dt # ændrer tiden
        path.append(pos=ball.pos) # opdater skitseringen af projektilets bane
        #avec.axis=ball.acceleration
        #vvec.axis=ball.velocity
        #if arrowtails=="onball":
        #    avec.pos=ball.acceleration
        #    vvec.pos=ball.vel
        #if arrowtails=="atorigin":
        #    avec.pos=ball.pos
        #    vvec.pos=ball.pos

    # udskrive kastets nummer, hvor længe projektilet var i luften, og hvor det landede
    print "----"
    print thrown
    print t
    print ball.pos.x
Personlige værktøjer
Navnerum
Varianter
Handlinger
jonas.meinertz.org
Wiki
Værktøjer