import numpy import matplotlib.pyplot as plt def evaluate(length, phi0, timestep): # length in m, phi0 in rad, timestep in s tau_quadrat = ((2 * length) / (3 * 9.81)) phi = phi0 v_phi = 0 time = 0 while phi < numpy.pi / 2: a_phi = numpy.sin(phi) / tau_quadrat v_phi += timestep * a_phi phi += timestep * v_phi time += timestep return time # testing the evaluation prec_test = 0.01 phi0s_test = [0 + prec_test * i for i in range(1, round(2 * numpy.pi / prec_test) + 1)] sols_test = [evaluate(1.45, phi0, 0.01) for phi0 in phi0s_test] plt.plot(phi0s_test, sols_test, label='test', ls='', marker='.') plt.legend() plt.show() print('Wir lesen aus dem Grafen ab: 0.81\nSelbst gerechneter Wert:', evaluate(1.45, 0.25, 0.01)) def find_sol(length, phi0, prec): # length in m, phi0 in rad, prec is the number of decimal places prev = None for i in range(10): sol = evaluate(length, phi0, 0.1 ** i) if prev and abs(sol - prev) < 0.5 * 0.1 ** prec: break prev = sol return sol def find_sols(lengths, phi0s, prec): sols = {} for length in lengths: phi_sols = [] for phi0 in phi0s: phi_sols += [find_sol(length, phi0, prec)] sols[length] = [phi0s, phi_sols] return sols