def run_example(with_plots=True): r""" Demonstration of the use of CVode by solving the linear test equation :math:`\dot y = - y` on return: - :dfn:`exp_mod` problem instance - :dfn:`exp_sim` solver instance """ #Define the rhs def f(t, y): ydot = -y[0] return N.array([ydot]) #Define an Assimulo problem exp_mod = Explicit_Problem(f, y0=4, name=r'CVode Test Example: $\dot y = - y$') #Define an explicit solver exp_sim = CVode(exp_mod) #Create a CVode solver #Sets the parameters exp_sim.iter = 'Newton' #Default 'FixedPoint' exp_sim.discr = 'BDF' #Default 'Adams' exp_sim.atol = [1e-4] #Default 1e-6 exp_sim.rtol = 1e-4 #Default 1e-6 #Simulate t1, y1 = exp_sim.simulate(5, 100) #Simulate 5 seconds t2, y2 = exp_sim.simulate(7) #Simulate 2 seconds more #Plot if with_plots: import pylab as P P.plot(t1, y1, color="b") P.plot(t2, y2, color="r") P.title(exp_mod.name) P.ylabel('y') P.xlabel('Time') P.show() #Basic test nose.tools.assert_almost_equal(float(y2[-1]), 0.00347746, 5) nose.tools.assert_almost_equal(exp_sim.get_last_step(), 0.0222169642893, 3) return exp_mod, exp_sim