def run_example(with_plots=True): #Create an instance of the problem exp_mod = Extended_Problem() #Create the problem exp_sim = Radau5ODE(exp_mod) #Create the solver exp_sim.verbosity = 0 exp_sim.report_continuously = True #Simulate t, y = exp_sim.simulate( 10.0, 1000) #Simulate 10 seconds with 1000 communications points #Basic test nose.tools.assert_almost_equal(y[-1][0], 8.0) nose.tools.assert_almost_equal(y[-1][1], 3.0) nose.tools.assert_almost_equal(y[-1][2], 2.0) #Plot if with_plots: P.plot(t, y) P.title("Solution of a differential equation with discontinuities") P.ylabel('States') P.xlabel('Time') P.show() return exp_mod, exp_sim
def run_example(with_plots=True): r""" Example for the use of the implicit Euler method to solve Van der Pol's equation .. math:: \dot y_1 &= y_2 \\ \dot y_2 &= \mu ((1.-y_1^2) y_2-y_1) with :math:`\mu= 10^6`. on return: - :dfn:`exp_mod` problem instance - :dfn:`exp_sim` solver instance """ #Define the rhs def f(t, y): eps = 1.e-6 my = 1. / eps yd_0 = y[1] yd_1 = my * ((1. - y[0]**2) * y[1] - y[0]) return N.array([yd_0, yd_1]) y0 = [2.0, -0.6] #Initial conditions #Define an Assimulo problem exp_mod = Explicit_Problem(f, y0) exp_mod.name = 'Van der Pol (explicit)' #Define an explicit solver exp_sim = Radau5ODE(exp_mod) #Create a Radau5 solver #Sets the parameters exp_sim.atol = 1e-4 #Default 1e-6 exp_sim.rtol = 1e-4 #Default 1e-6 exp_sim.inith = 1.e-4 #Initial step-size #Simulate t, y = exp_sim.simulate(2.) #Simulate 2 seconds #Plot if with_plots: import pylab as P P.plot(t, y[:, 0]) #, marker='o') P.xlabel('Time') P.ylabel('State') P.title(exp_mod.name) P.show() #Basic test x1 = y[:, 0] assert N.abs(x1[-1] - 1.706168035) < 1e-3 #For test purpose return exp_mod, exp_sim
def _default_solver_instance(self): from assimulo.solvers import Radau5ODE return Radau5ODE(self._assimulo_problem)