import math import numpy as np import matplotlib.pyplot as plt ############### Voreinstellungen ############### 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 ############### print("Bitte Stablänge in Metern angeben") Stablänge = float(input("Stablänge:")) # Länge des Stabes in Metern print("Bitte Zeitschritt in Sekunden angeben") Zeitschritt =float(input("Zeitschritt:")) # Zeitschritt in Sekunden ############### 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 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 ############### Ausgabe der Werte #################### 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 datafile_path = 'fallzeiten'+'_'+str(Stablänge)+'_'+str(Zeitschritt)+'.txt'# Dateispeicherort with open(datafile_path, 'w+') as datafile_id: np.savetxt(datafile_id, data, fmt=['%.2f','%.2f']) #Schreiben der Daten in Textdatei ############### Ploten der Werte #################### xstart= 0 xend= 1.6 xticks= 0.05 ystart= 0 yend= 1.5 plt.figure(figsize=(20,10), dpi=100) 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