import numpy as np import matplotlib.pyplot as plt import potentials as pot import energies as ene import integrator as itg import initial_conditions as init import poincare_sections as pcs h = 0.01 N_inter = 30000 eps = 1e-2 x_0 = 0.0 y_vals = np.linspace(0, 0.6, 50) E = 0.125 # 1/12 # Initialize lists to store all Poincaré points across different initial conditions all_pcs_pos_y = [] all_pcs_vel_y = [] for i in range(len(y_vals)): y0 = y_vals[i] W_part = init.one_part(x_0, y0, 0, 0) POT = pot.hh_potential(W_part)[0] u_0 = np.sqrt(2 * (E - POT)) v_0 = 0.0 W_part[1, 0] = u_0 W_part[1, 1] = v_0 # Perform integration pos_t, positions = itg.rk4(0, W_part, h, N_inter, pot.hh_evolution) # Extract positions and velocities pos_x = positions[:, 0, 0] pos_y = positions[:, 0, 1] vel_x = positions[:, 1, 0] vel_y = positions[:, 1, 1] # Find Poincaré section points for the current initial condition pcs_pos_y, pcs_vel_y = pcs.pcs_find(pos_x, pos_y, vel_x, vel_y) # Append the current Poincaré section points to the overall lists all_pcs_pos_y.extend(pcs_pos_y) all_pcs_vel_y.extend(pcs_vel_y) # Plotting all Poincaré section points on the same graph fig, ax = plt.subplots() ax.scatter(all_pcs_pos_y, all_pcs_vel_y, s=2, color="C4") # Set labels and legend ax.set_xlabel("coordinate y") ax.set_ylabel("velocity v") ax.set_title("Combined Poincaré Section for Multiple Initial y0 Values") plt.show()