def test_SolveEquation(self): obj = EquationSolver() obj.RunEquationReduction = False # By forcing 't' into the variable list, no automatic creation of time variables obj.ParseString(""" x=t z=x+1 z(0) = 2. exogenous t=[10.]*20 MaxTime=3""") obj.ExtractVariableList() obj.SetInitialConditions() obj.SolveStep(1) obj.SolveStep(2) obj.SolveStep(3) obj2 = EquationSolver() obj2.RunEquationReduction = False # By forcing 't' into the variable list, no automatic creation of time variables obj2.ParseString(""" x=t z=x+1 z(0) = 2. exogenous t=[10.]*20 MaxTime=3""") obj2.SolveEquation() self.assertEqual(obj.TimeSeries['x'], obj2.TimeSeries['x'])
def test_SolveEquation_with_initial_equilibrium(self): obj2 = EquationSolver() obj2.RunEquationReduction = False # By forcing 't' into the variable list, no automatic creation of time variables obj2.ParseString(""" x=t z=x+1 z(0) = 2. exogenous t=[10.]*20 MaxTime=3""") obj2.ParameterSolveInitialSteadyState = True obj2.SolveEquation() # Must be reset self.assertFalse(Parameters.SolveInitialEquilibrium) # The Initial equilibrium calculation overrides the initial condition. self.assertEqual([11., 11., 11., 11.], obj2.TimeSeries['z'])
def generate_model(eqns, use_control=False): if use_control: eqns += """ u = (-.7 * x + .75 * r)/.05 u(0) = 1.0 exogenous r = [1.] * 10 + [2.]*21 """ else: eqns += """ exogenous u = [1.] * 10 + [2.]*21 """ print(eqns) out = EquationSolver(eqns) out.Parser.MaxTime = 30 out.SolveEquation() return out