def test_exact(self, scheme): self.sys = VerticalRollingDisk() self.scheme = scheme ohm_phi = 2. ohm_theta = 1. phi_0 = 0 self.u0 = self.sys.initial(np.array([0,0,phi_0,0.,0,0,ohm_phi,ohm_theta,0,0])) R = self.sys.radius m = self.sys.mass # consistent initial velocities vx = self.u0[4] = R*ohm_theta*np.cos(phi_0) vy = self.u0[5] = R*ohm_theta*np.sin(phi_0) # lagrange multipliers: used only used as a guess in RK methods self.u0[8], self.u0[9] = -m*ohm_phi*R*ohm_theta*np.sin(phi_0), m*ohm_phi*R*ohm_theta*np.cos(phi_0) self.scheme.h = self.h self.s = Solver(self.scheme, self.sys) self.s.initialize(self.u0,) self.s.run(1.) ## self.s.plot(components=[6,7]) self.check_solution()
from odelab import Solver from odelab.scheme.classic import RungeKutta4 from odelab.system.classic import VanderPol s = Solver(scheme=RungeKutta4(.1), system=VanderPol()) s.initialize([2.7, 0], name='2.7') s.run(10.) s.plot2D() s.initialize([1.3, 0], name='1.3') s.run(10.) s.plot2D()
from odelab import Solver, System from odelab.scheme.classic import ExplicitEuler def f(t,u): return -u s = Solver(scheme=ExplicitEuler(.1), system=System(f)) s.initialize(u0=1.) s.run(1.) s.plot()