meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
a_mechanik:kippender_besenstiel:gruppenseiten:gruppe341:start [ 8 January 2021 17:35] alexanderstedinga_mechanik:kippender_besenstiel:gruppenseiten:gruppe341:start [22 January 2021 13:18] (current) – [Computerprogramm] alexandersteding
Line 162: Line 162:
  
 ====== Computerprogramm ====== ====== Computerprogramm ======
-Für die numerische Berechnung der Bewegunsgleichung wurde der folgende Code in Python geschrieben.+Für die numerische Berechnung der Bewegunsgleichung wurde der folgende Code in Python geschrieben. In der überarbeiteten Fassung berechnet er für alle Winkel im Intervall [0,05;1,5] Radiant die Fallzeiten. Die Daten werden automatisch als Plot und formatierte Textdatei zur weiteren Verwendung(z.B. QTIPlot) gespeichert.
  
  
 <code python [enable_line_numbers="true"] Besenstiel.py>  <code python [enable_line_numbers="true"] Besenstiel.py> 
 import math import math
-# Voreinstellungen +import numpy as np 
-Anfangsbeschleunigung= 9.81 # Beschleunigung zum Zeitpunkt t=0 in m/s^2 +import matplotlib.pyplot as plt 
-Anfangsgeschwindigkeit = 0 # Geschwindigkeit zum Zeitpunkt t=0 in m/s +############### Voreinstellungen ############### 
-Meta=[] # Liste in der die Berechneten Fallzeiten gespeichert werden+Erdbeschleunigung= 9.81 Erdbeschleunigung in m/s^2 
 +Meta=[] # Liste in der die Berechneten Fallzeiten gespeichert werden 
 +winkelliste=[] 
 +Berechnungswinkel=0.05 
 +while  Berechnungswinkel <= 1.51: 
 +  winkelliste.append(format(Berechnungswinkel,'.3g')) 
 +  Berechnungswinkel += 0.01 
 +Winkelliste=list(map(float, winkelliste))
  
-#Nutzereingabe+############### Nutzereingabe ###############
 print("Bitte Stablänge in Metern angeben") print("Bitte Stablänge in Metern angeben")
 Stablänge = float(input("Stablänge:")) # Länge des Stabes in Metern Stablänge = float(input("Stablänge:")) # Länge des Stabes in Metern
 print("Bitte Zeitschritt in Sekunden angeben") print("Bitte Zeitschritt in Sekunden angeben")
 Zeitschritt =float(input("Zeitschritt:")) # Zeitschritt in Sekunden Zeitschritt =float(input("Zeitschritt:")) # Zeitschritt in Sekunden
-Tau= math.sqrt((2*Stablänge)/(3*Anfangsbeschleunigung)) # Berechnung von Tau+############### Berechnungen ############### 
 +Tau= math.sqrt((2*Stablänge)/(3*Erdbeschleunigung)) # Berechnung von Tau 
 +for Winkel in Winkelliste: 
 +  listewes=[] 
 +  Momentanwinkel=Winkel 
 +  Momentangeschwindigkeit=0 
 +  while Momentanwinkel <=math.pi/2 : #Berechnung der Winkel 
 +    Beschleunigung= math.sin(Momentanwinkel)/(Tau**2) 
 +    Geschwindigkeit= Momentangeschwindigkeit + Zeitschritt*Beschleunigung 
 +    neuerwinkel= Momentanwinkel + Zeitschritt*Geschwindigkeit 
 +    listewes.append(neuerwinkel) 
 +    Momentanwinkel=neuerwinkel 
 +    Momentangeschwindigkeit=Geschwindigkeit
  
-print("Anzahl an berechneten Winkeln?(1 oder 5)"+  k=format((len(listewes))*Zeitschritt, '.3g') # Berechnung der Fallzeit t und Vermeidung des Floating Point Errors durch Signifikante Stellen 
-wahl= input("Anzahl"+  Meta.append(k#Einhängen der Fallzeiten in die Liste Meta 
-wahlf= float(wahl) +   
-if wahlf<=1: +############### Ausgabe der Werte ####################    
- print("Bitte Winkel in Radiant eingeben") +data np.array([np.array(Winkelliste).astype(np.float) , np.array(Meta).astype(np.float) ]).T #Umwandeln der Winkel und Fallzeiten in ein Array und Transponieren der Daten 
- Winkeleins input("Winkel:"+datafile_path 'fallzeiten'+'_'+str(Stablänge)+'_'+str(Zeitschritt)+'.txt'# Dateispeicherort 
- Anfangswinkellistenamen=[Winkeleins+with open(datafile_path, 'w+') as datafile_id: 
-else : +  np.savetxt(datafile_id, data, fmt=['%.2f','%.2f']) #Schreiben der Daten in Textdatei 
- print("Bitte Winkel in Radiant eingeben") +     
- Winkeleins input("Erster Winkel:") +############### Ploten der Werte #################### 
- Winkelzwei input("Zweiter Winkel:") +xstart0 
- Winkeldrei input("Dritter Winkel:") +xend 1.6 
- Winkelvier input("Vierter Winkel:") +xticks0.05 
- Winkelfünf input("Fünfter Winkel:"+ystart0 
- Anfangswinkellistenamen=[Winkeleins,WinkelzweiWinkeldreiWinkelvier, Winkelfünf+yend1.5 
-  +plt.figure(figsize=(20,10), dpi=100
-Anfangswinkelliste= list(map(float,Anfangswinkellistenamen)) #Gemessene Winkel in Radiant+plt.grid(True,zorder=0) 
 +plt.axis([xstart,xend,ystart,yend]) 
 +plt.title('Numerische Berechnung der Fallzeiten für verschiedene Startwinkel mit l='+str(Stablänge)+'m und'+' \u0394'+'t='+str(Zeitschritt)+'s'             # Titel des Plot 
 +plt.xticks(np.arange(xstart,xend,xticks)) 
 +a=plt.scatter(Winkelliste,list(map(float, Meta)),zorder=3) 
 +plt.legend([a],['Fallzeiten']) # legende 
 +plt.xlabel('Startwinkel in Radiant'                             # x-axis label 
 +plt.ylabel('Fallzeiten in S'                             # y-axis label 
 +plt.savefig('graph'+'_'+str(Stablänge)+'_'+str(Zeitschritt)+'.png'      # Speichern des Plot als Png 
 +plt.close 
 +</code> 
 +===== Überprüfung des Code===== 
 +Um den Code zu verifizieren wird die Fallzeit bei einer Stablänge von 1.45 m bei einem Startwinkel von 0.25 rad und einem Zeitschritt von 0.01 s berechnet. Diese beträgt 0.8 Sekunden. Der Vergleich mit der Grafik aus der Aufgabenstellung bestätigt die Berechnung.
  
-#Berechnungen +{{ :a_mechanik:kippender_besenstiel:gruppenseiten:gruppe341:winkel_1.45_0.01.png |}}
-for Anfangswinkel in Anfangswinkelliste: # for Schleife die für jeden Anfangswinkel die Fallzeit berechnet +
-    Startbeschleuni= math.sin(Anfangswinkel)/Tau**2 # Erster Iterationsschritt +
-    Startgeschwendi= Anfangsgeschwindigkeit +Zeitschritt * Startbeschleuni  +
-    Startwinkel = Anfangswinkel + Zeitschritt *Startgeschwendi +
-    Winkelt= Startwinkel +
-    gest= Startgeschwendi +
-    listebes=[Startbeschleuni] +
-    listeges=[Startgeschwendi] +
-    listewes=[] +
-    b=Zeitschritt+
  
-    while Winkelt  <=math.pi/2 : #while Schleife, welche die weiteren Iterationschritte bis der Erdboden ereicht ist(90°) berechnet 
-        bes=math.sin(Winkelt)/(Tau**2) # Berechnung der Winkelbschleunigung 
-        listebes.append(bes) 
-        ges= gest + b*bes #Berechnen der Winkelgeschwindigkeit 
-        listeges.append(ges) 
-        wes= Winkelt + b*ges # Berechnen des Winkel 
-        listewes.append(wes) 
-        Winkelt=wes 
-        gest=ges 
  
-    k=format((len(listewes))*Zeitschritt, '.3g') # Berechnung der Fallzeit t und Vermeidung des Floating Point Errors durch Signifikante Stellen 
-    Meta.append(k) #Einhängen der Fallzeiten in die Liste Meta  
- 
-for item,nextitem in zip(Meta, Anfangswinkelliste): # Ausgabe der Berechneten Startzeiten 
- print('Die Fallzeit für den Startwinkel',nextitem,'Radiant beträgt', item, 'Sekunden') 
-</code> 
-===== Überprüfung des Code===== 
-Um den Code zu verifizieren wird die Fallzeit bei einer Stablänge von 1.45 m bei einem Startwinkel von 0.25 rad und einem Zeitschritt von 0.01 s berechnet. Diese beträgt 0.8 Sekunden. Der Vergleich mit der Grafik aus der Aufgabenstellung bestätigt die Berechnung. 
 ====== Dokumentation von Fehlern ====== ====== Dokumentation von Fehlern ======
 Ein häufig aufgetauchter systematischer Messfehler, liegt in der gedämpften Schwingung des Besenstiels, nach Auftreffen am Boden. Das nachfolgende Video in Zeitlupe veranschaulicht das wiederholte Aufteffen auf den Boden. Ein häufig aufgetauchter systematischer Messfehler, liegt in der gedämpften Schwingung des Besenstiels, nach Auftreffen am Boden. Das nachfolgende Video in Zeitlupe veranschaulicht das wiederholte Aufteffen auf den Boden.