Пример #1
0
	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()
Пример #2
0
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()
Пример #3
0
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()