m1 = "Euler" m2 = "Euler-Cromer" m3 = "Midpoint" infoelipses = [] x0 = 1. vy0 = 1. for i in range(200): print("cond ini, x0 & vy0 =", round(x0, 2)) v0 = vy0 x0, y0, v0, a0, m = x0, .0, v0, 90., 1. earth = pt.Particle("Earth", x0, y0, v0, a0, m) # print(earth) earth_force = fr.Forces(universal_gravity, sim_params) earth.set_force(earth_force) euler = sl.Solver(earth, m2, deltat) xpos, ypos, tpos = [], [], [] cont = 0 for i in range(200000): xc, yc, vxc, vyc, tc = earth.get_state() # if tc > 0.415: # break xpos.append(xc) ypos.append(yc) tpos.append(tc) euler.do_step() xc1, yc1, vxc1, vyc1, tc1 = earth.get_state() if yc < 0 and yc1 >= 0:
em.append(ener_to) return ek, ep, em x0, v0, w0, t0 = 1.0, 0., 3., 0 sim_params = w0 deltat = 0.1988 m1 = "Euler" m2 = "Euler-Cromer" m3 = "Midpoint" num_method = m2 pendulo = os.Oscillator(x0, v0, w0, t0, "P1") pendulo_force = fr.Forces(restoring_force, sim_params) pendulo.set_force(pendulo_force) euler = sol.Solver(pendulo, num_method, deltat) tvac, xvac, vac = integrate(euler) en_ci, en_po, en_to = energies(tvac, xvac, vac) delta_e = en_to[-1] - en_to[0] print("Theta: ", x0, ", v: ", v0, ", dt: ", deltat, ", de: ", delta_e) print("Energia In: ", en_to[0], ", Energia Fin: ", en_to[-1]) deltae = [] for i in range(len(en_to)): deltae.append(en_to[i] - en_to[0]) fig, ax = plt.subplots() ax.plot(tvac, xvac, ls='--', c='royalblue', label='Angle')
return xpos, ypos, tpos v0, vy = init_c(1, 0, 0) sim_params = pt.grav_ m, x0, y0, v0, a0 = 1., 1., 0., 5., 70 deltat = .0001 m1 = "Euler" m2 = "Euler-Cromer" m3 = "Midpoint" num_method = m2 earth = pt.Particle(x0, y0, v0, a0) earth_force = fr.Forces(Newton_again, sim_params) earth.set_force(earth_force) euler = sol.Solver(earth, num_method, deltat) xvac, yvac, tvac = integrate(euler) m2, x02, y02, v02, a02 = 1., 1.5, 0., 5., 70 mars = pt.Particle(x02, y02, v02, a02) f2 = fr.Forces(Newton_again, sim_params) mars.set_force(f2) i2 = sol.Solver(mars, num_method, deltat) xvac2, yvac2, tvac2 = integrate(i2) sx, sy = 0, 0 ex, ey = 1, 0. mx, my = 1.5, 0
xp, yp, vxp, vyp, _ = state mass, grav, drag = params axp = -drag * vxp / mass ayp = -grav - drag * vyp / mass return vxp, vyp, axp, ayp, 1. ################################################################################ # BLOQUE PRINCIPAL DE INSTRUCCIONES deltat = .01 m, x0, y0, v0, a0 = 1., 0., .0, 1., 45 sim_params = m, pt.GRAV, pt.DRAG # mass, gravity, drag ball = pt.Particle(x0, y0, v0, a0, m) ball_force = fr.Forces(resistive_falling, sim_params) ball.set_force(ball_force) print("Projectile:", ball) xpos, ypos, tpos = [], [], [] while True: xc, yc, _, _, tc = ball.get_state() if yc < 0: break xpos.append(xc) ypos.append(yc) tpos.append(tc) ball.euler_step(deltat) fig, ax = plt.subplots() ax.plot(xpos, ypos, '--', label='numerical')
# v0, vy = init_c(1, 0, 0) #orbita circular k = 1.5 # orbita eliptica m, x0, y0, v0, a0 = 1., k, .0, k, 90. sim_params = m, GMe, W deltat = 0.01 / 128 m1 = "Euler" m2 = "Euler-Cromer" m3 = "Midpoint" num_method = m2 # m1 # m3 satellite = pt.Particle(x0, y0, v0, a0) satellite_force = fr.Forces(Newton_again, sim_params) satellite.set_force(satellite_force) euler = sl.Solver(satellite, num_method, deltat) # El metodo mas estable es Euler Cromer xpos, ypos, tpos, em = [], [], [], [] cont = 0 for i in range(200000): xc, yc, vxc, vyc, tc = satellite.get_state() v = np.sqrt(vxc**2 + vyc**2) emt = mechanic_energy(v, m, xc, yc) em.append(round(emt, 2)) xpos.append(xc) ypos.append(yc) tpos.append(tc) euler.do_step()
# BLOQUE PRINCIPAL DE INSTRUCCIONES # v0, vy = cond_init(1, 0, 0) #orbita circular k = 1.5 # orbita eliptica # print(v0) x0, y0, v0, a0, m = k, .0, k, 90., 1. sim_params = m, GMe, W deltat = 0.01 / 128 m1 = "Euler" m2 = "Euler-Cromer" m3 = "Midpoint" satellite = pt.Particle("Satellite", x0, y0, v0, a0, m) # Revisar por que a0 es 90? satellite_force = fr.Forces(universal_gravity, sim_params) satellite.set_force(satellite_force) euler = sl.Solver(satellite, m2, deltat) # El metodo mas estable es Euler Cromer xpos, ypos, tpos = [], [], [] cont = 0 em = [] vel = [] for i in range(200000): xc, yc, vxc, vyc, tc = satellite.get_state() v = np.sqrt(vxc**2 + vyc**2) vel.append(v) emt = total_mechanic_energy(v, m, xc, yc) em.append(round(emt, 2)) xpos.append(xc)
for i in range(5002): xc, yc, _, _, tc = planet.get_state() xpos.append(xc) ypos.append(yc) tpos.append(tc) numeric.midpoint_step(deltat) #Initial Variables and lists m, x0, y0, v0, a0 = 1., 3., 0., 2., 90 deltat = 0.001 sim_params = pt.GM planet = pt.Particle("Planet X", x0, y0, v0, a0, m) planet_force = fr.Forces(grav_force, sim_params) planet.set_force(planet_force) planet2 = pt.Particle("Planet Y", x0, y0, v0, a0, m) planet2.set_force(planet_force) planet3 = pt.Particle("Planet Z", x0, y0, v0, a0, m) planet3.set_force(planet_force) xposEuler = [] yposEuler = [] tposEuler = [] xposEulerCromer = [] yposEulerCromer = [] tposEulerCromer = []
xc, yc, _, _, tc = planet.get_state() xpos.append(xc) ypos.append(yc) tpos.append(tc) energy.append(planet.get_energy()) numeric.midpoint_step(deltat) m1, x01, y01, v01, a01 = 1., 3., 0., 2., 90 m2, x02, y02, v02, a02 = 1., 1., 0., 8., 90 deltat = 0.00001 ######################################################## planet1 = pt.Particle("Planet 1", x02, y02, v02, a02, m2) planet1.set_force(fr.Forces(grav_force, pt.GM)) planet2 = pt.Particle("Planet 2", x02, y02, v02, a02, m2) planet2.set_force(fr.Forces(grav_force, pt.GM)) planet3 = pt.Particle("Planet 3", x02, y02, v02, a02, m2) planet3.set_force(fr.Forces(grav_force, pt.GM)) xpos1, ypos1, tpos1, energy1 = [], [], [], [] xpos2, ypos2, tpos2, energy2 = [], [], [], [] xpos3, ypos3, tpos3, energy3 = [], [], [], [] numeric1 = sv.Solver(planet1, "Euler", deltat) numeric2 = sv.Solver(planet2, "Euler-Cromer", deltat) numeric3 = sv.Solver(planet3, "Midpoint", deltat)
senel += 1 return xpos, ypos, tpos # BEGINNING-OF-EXECUTION deltat, num_method = .001, "Euler-Cromer" x0, y0, v0, a0 = 1., .0, .9, 90 r0 = np.sqrt(x0**2 + y0**2) v0 = 1.3 * np.sqrt(GM / r0) # create free-falling Particle sim_params = GM planet = pt.Particle("Earth", x0, y0, v0, a0) the_force = fr.Forces(newton_again, sim_params) planet.set_force(the_force) intor = sol.Solver(planet, num_method, deltat) xvac, yvac, tvac = integrate(intor) print("x", len(xvac), "y", len(xvac)) # generate plots fig, ax = plt.subplots() label = 'x0 = %.2f, y0 = %.2f, v0 = %.2f, a0 = %.2f' % (x0, y0, v0, a0) ax.plot(xvac, yvac, '-', label=label) ax.set_aspect('equal') ax.set(xlabel='x (AU)', ylabel='y (AU)', title='Real free falling') ax.grid()
xpos.append(xc) ypos.append(yc) tpos.append(tc) obj.do_step() return xpos, ypos, tpos # BEGINNING-OF-EXECUTION deltat, num_method = .005, "Midpoint" m, x0, y0, v0, a0 = 1., 0., .0, 1., 75 # create free-falling Particle sim_params = pt.grav_ # gravity vacuum = pt.Particle(x0, y0, v0, a0) the_force = fr.Forces(free_falling, sim_params) vacuum.set_force(the_force) intgr = sol.Solver(vacuum, num_method, deltat) xvac, yvac, tvac = integrate(intgr) # create falling Particle with linear drag sim_params = m, pt.grav_, C_DRAG # mass, gravity, drag linear = pt.Particle(x0, y0, v0, a0) the_force = fr.Forces(linear_drag, sim_params) linear.set_force(the_force) intgr = sol.Solver(linear, num_method, deltat) xlin, ylin, tlin = integrate(intgr) # create falling Particle with quadratic drag sim_params = m, pt.grav_, C_DRAG # mass, gravity, drag qdatic = pt.Particle(x0, y0, v0, a0)
delta_sim_1 = 0.001 delta_sim_2 = 0.005 delta_sim_3 = 0.01 delta_sim_4 = 0.05 delta_sim_5 = 0.1 sim_params_1 = pt.GM, delta_sim_1 sim_params_2 = pt.GM, delta_sim_2 sim_params_3 = pt.GM, delta_sim_3 sim_params_4 = pt.GM, delta_sim_4 sim_params_5 = pt.GM, delta_sim_5 planet_1 = pt.Particle("Planet Y", x0, y0, v0, a0, m) planet_1.set_force(fr.Forces(grav_force, sim_params_1)) planet_2 = pt.Particle("Planet Y", x0, y0, v0, a0, m) planet_2.set_force(fr.Forces(grav_force, sim_params_2)) planet_3 = pt.Particle("Planet Y", x0, y0, v0, a0, m) planet_3.set_force(fr.Forces(grav_force, sim_params_3)) planet_4 = pt.Particle("Planet Y", x0, y0, v0, a0, m) planet_4.set_force(fr.Forces(grav_force, sim_params_4)) planet_5 = pt.Particle("Planet Y", x0, y0, v0, a0, m) planet_5.set_force(fr.Forces(grav_force, sim_params_5)) t = [] angles_1, angles_2, angles_3, angles_4, angles_5 = [], [], [], [], []