From 0bc9b22bb4827f194b25186e86eaf0d080ca47d2 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Tue, 15 Jul 2014 20:28:02 -0400 Subject: [PATCH 01/49] Added an module for solving initial value problems. --- quantecon/ivp.py | 249 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 quantecon/ivp.py diff --git a/quantecon/ivp.py b/quantecon/ivp.py new file mode 100644 index 000000000..9f749ea1f --- /dev/null +++ b/quantecon/ivp.py @@ -0,0 +1,249 @@ +import numpy as np +from scipy import integrate, interpolate + + +class IVP(object): + """Base class for solving initial value problems (IVPs).""" + + def __init__(self, f, jac, args=None): + """ + Initializes an IVP object with the following attributes: + + f: (callable) Function returning the RHS of a system of ODEs. + + jac: (callable) Function returning the model's Jacobian matrix of + partial derivatives. Must take the same arguments as f. + + args: (tuple) Tuple of extra arguments which should be passed to + functions f and jac. Default is None. + + """ + self.f = f + self.jac = jac + self.args = args + self.ode = integrate.ode(f, jac) + + def integrate(self, t0, y0, h=1.0, T=None, g=None, tol=None, + integrator='dopri5', step=False, relax=False, **kwargs): + """ + Generates solution trajectories of the model given some initial + conditions. + + Arguments: + + t0: (float) Initial condition for the independent variable. + + y0: (float) Initial condition for the dependent variable. + + h: (float) Step-size for computing the solution. + + T: (int) Length of desired trajectory. + + g: (callable) Function of the form g(t, vec, f_args) that + provides stopping conditions for the integration. + If specified, user must also specify a stopping + tolerance, tol. Default is None. + + tol: (float) Stopping tolerance. On required if g is given. + Default is None. + + integrator: (str) Must be one of: + + 'forward_euler': Basic implementation of Euler's + method with fixed step size. See + Judd (1998), Chapter 10, pg 341 for + more detail. + + 'backward_euler': Basic implementation of the + implicit Euler method with a + fixed step size. See Judd (1998), + Chapter 10, pg. 343 for more detail. + + 'trapezoidal_rule': Basic implementation of the + trapezoidal rule with a fixed step + size. See Judd (1998), Chapter 10, + pg. 344 for more detail. + + 'erk2': Second-order explicit Runge-Kutta. + + 'erk3': Third-order explicit Runge-Kutta. + + 'erk4': Fourth-order explicit Runge-Kutta. + + 'erk5': Fifth-order explicit Runge-Kutta. + + 'vode': Real-valued Variable-coefficient ODE + equation solver, with fixed leading + coefficient implementation. It + provides implicit Adams method (for + non-stiff problems) and a method + based on backward differentiation + formulas (BDF) (for stiff problems). + + 'lsoda': Real-valued Variable-coefficient ODE + equation solver, with fixed leading + coefficient implementation. It + provides automatic method switching + between implicit Adams method (for + non-stiff problems) and a method + based on backward differentiation + formulas (BDF) (for stiff problems). + + 'dopri5': Embedded explicit Runge-Kutta method + with order 4(5). See Dormand and + Prince (1980) for details. + 'dop85': + + See documentation for integrate.ode for more details and + references for 'vode', 'lsoda', 'dopri5', and 'dop85', + as well as the rest of the ODE solvers available via + ODEPACK. + + step: (boolean) Allows access to internal steps for those + solvers that use adaptive step size routines. Currently + only 'vode', 'zvode', and 'lsoda' allow support step. + Default is False. + + relax: (boolean) The following integrators support run_relax: + 'vode', 'zvode', 'lsoda'. Default is False. + + **kwargs: (dict) Dictionary of integrator specific keyword args. + + Returns: + + solution: (array-like) Simulated solution trajectory. + + """ + # select the integrator + self.ode.set_integrator(integrator, **kwargs) + + # pass the model parameters as additional args + if self.args != None: + self.ode.set_f_params(*self.args) + self.ode.set_jac_params(*self.args) + + # set the initial condition + self.ode.set_initial_value(y0, t0) + + # create a storage container for the trajectory + solution = np.hstack((t0, y0)) + + # generate a solution trajectory + while self.ode.successful(): + self.ode.integrate(self.ode.t + h, step, relax) + current_step = np.hstack((self.ode.t, self.ode.y)) + solution = np.vstack((solution, current_step)) + + # check terminal conditions + if g is not None and g(self.ode.t, self.ode.y, *self.args) < tol: + break + + elif T is not None and h > 0 and self.ode.t >= T: + break + + elif T is not None and h < 0 and self.ode.t <= T: + break + + else: + pass + + return solution + + def interpolate(self, traj, ti, k=3, der=0, ext=0): + """ + Parameteric B-spline interpolation in N-dimensions. + + Arguments: + + traj: (array-like) Solution trajectory providing the data points for + constructing the B-spline representation. + + ti: (array-like) Array of values for the independent variable at + which to interpolate the value of the B-spline. + + k: (int) Degree of the desired B-spline. Degree must satsify + 1 <= k <= 5. Default is k=3 for cubic B-spline interpolation. + + der: (int) The order of derivative of the spline to compute + (must be less than or equal to k). Default is zero. + + ext: (int) Controls the value of returned elements for outside the + original knot sequence provided by traj. For extrapolation, set + ext=0; ext=1 returns zero; ext=2 raises a ValueError. Default + is to perform extrapolation. + + Returns: + + interp_traj: (array) The interpolated trajectory. + + """ + # array of parameter values + u = traj[:, 0] + + # build list of input arrays + n = traj.shape[1] + x = [traj[:, i] for i in range(1, n)] + + # construct the B-spline representation (s=0 forces interpolation!) + tck, t = interpolate.splprep(x, u=u, k=k, s=0) + + # evaluate the B-spline (returns a list) + out = interpolate.splev(ti, tck, der, ext) + + # convert to a 2D array + interp_traj = np.hstack((ti[:, np.newaxis], np.array(out).T)) + + return interp_traj + + def compare_trajectories(self, traj1, traj2): + """ + Returns the absolute difference between two solution trajectories. + + Arguments: + + traj1: (array-like) (T,n+1) array containing a solution trajectory. + traj2: (array-like) (T,n+1) array containing a solution trajectory. + + Returns: + + abs_diff: (array-like) (T,n) array of the element-wise absolute + difference between traj1 and traj2. + """ + abs_diff = np.abs(traj1[:, 1:] - traj2[:, 1:]) + + return abs_diff + + def get_L2_errors(self, traj1, traj2): + """ + Computes a measure of the total difference between two trajectories + using the L^2 norm. + + Arguments: + + traj1: (array-like) (T,n+1) array containing a solution trajectory. + traj2: (array-like) (T,n+1) array containing a solution trajectory. + + Returns: + + L2_error: (float) Average difference between two trajectories. + + """ + L2_error = np.sum(self.compare_trajectories(traj1, traj2)**2)**0.5 + return L2_error + + def get_maximal_errors(self, traj1, traj2): + """ + Computes a measure of the point-wise distance between two trajectories. + + Arguments: + + traj1: (array-like) (T,n+1) array containing a solution trajectory. + traj2: (array-like) (T,n+1) array containing a solution trajectory. + + Returns: + + maximal_error: (float) Maximal difference between two trajectories. + + """ + maximal_error = np.max(self.compare_trajectories(traj1, traj2)) + return maximal_error From b904e4667bed4b53f3a46c32d229ced23a381edc Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Tue, 15 Jul 2014 22:18:40 -0400 Subject: [PATCH 02/49] Re-wrote docstring to satisfy NumPy conventions...I hope! --- quantecon/ivp.py | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/quantecon/ivp.py b/quantecon/ivp.py index 9f749ea1f..7562dee93 100644 --- a/quantecon/ivp.py +++ b/quantecon/ivp.py @@ -3,19 +3,38 @@ class IVP(object): - """Base class for solving initial value problems (IVPs).""" + """ + Base class for solving initial value problems (IVPs) of the form: - def __init__(self, f, jac, args=None): - """ - Initializes an IVP object with the following attributes: + :math:`y'(t) = f(t,y)` - f: (callable) Function returning the RHS of a system of ODEs. + using finite difference methods. The class uses various integrators from + the ``scipy.ode`` module to perform the integration and parametric B-spline + interpolation from ``scipy.interpolate`` to approximate the value of the + solution between grid points. - jac: (callable) Function returning the model's Jacobian matrix of - partial derivatives. Must take the same arguments as f. + """ - args: (tuple) Tuple of extra arguments which should be passed to - functions f and jac. Default is None. + def __init__(self, f, jac=None, args=None): + """ + Creates an instance of the IVP class. + + Attributes + ---------- + f : callable ``f(t, y, *args)`` + Right hand side of the system of equations defining the ODE. The + independent variable, `t`, is a ``scalar``; `y` is an ``ndarray`` + of endogenous variables with ``y.shape == (n,)``. The function `f` + should return a ``scalar``, ``ndarray`` or ``list`` (but not a + ``tuple``). + + jac : callable ``jac(t, y, *args)``, optional(default=None) + Jacobian of the right hand side of the system of equations defining + the ODE. + :math:`\mathcal{J}_{i,j} = \frac{\partial f_i}}{\partial y_j}` + + args : tuple, optional(default=None) + Additional arguments that should be passed to both `f` and `jac`. """ self.f = f From b38d65765a837a5a558c0c199d820bf8850accdb Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Tue, 15 Jul 2014 23:18:28 -0400 Subject: [PATCH 03/49] All docstrings now reformatted to meet NumPy conventions (hopegully!) --- quantecon/ivp.py | 423 ++++++++++++++++++++++++++++++----------------- 1 file changed, 274 insertions(+), 149 deletions(-) diff --git a/quantecon/ivp.py b/quantecon/ivp.py index 7562dee93..c31a02c3c 100644 --- a/quantecon/ivp.py +++ b/quantecon/ivp.py @@ -24,15 +24,13 @@ def __init__(self, f, jac=None, args=None): f : callable ``f(t, y, *args)`` Right hand side of the system of equations defining the ODE. The independent variable, `t`, is a ``scalar``; `y` is an ``ndarray`` - of endogenous variables with ``y.shape == (n,)``. The function `f` + of dependent variables with ``y.shape == (n,)``. The function `f` should return a ``scalar``, ``ndarray`` or ``list`` (but not a ``tuple``). - jac : callable ``jac(t, y, *args)``, optional(default=None) Jacobian of the right hand side of the system of equations defining the ODE. :math:`\mathcal{J}_{i,j} = \frac{\partial f_i}}{\partial y_j}` - args : tuple, optional(default=None) Additional arguments that should be passed to both `f` and `jac`. @@ -45,99 +43,214 @@ def __init__(self, f, jac=None, args=None): def integrate(self, t0, y0, h=1.0, T=None, g=None, tol=None, integrator='dopri5', step=False, relax=False, **kwargs): """ - Generates solution trajectories of the model given some initial - conditions. - - Arguments: - - t0: (float) Initial condition for the independent variable. - - y0: (float) Initial condition for the dependent variable. - - h: (float) Step-size for computing the solution. - - T: (int) Length of desired trajectory. - - g: (callable) Function of the form g(t, vec, f_args) that - provides stopping conditions for the integration. - If specified, user must also specify a stopping - tolerance, tol. Default is None. - - tol: (float) Stopping tolerance. On required if g is given. - Default is None. - - integrator: (str) Must be one of: - - 'forward_euler': Basic implementation of Euler's - method with fixed step size. See - Judd (1998), Chapter 10, pg 341 for - more detail. - - 'backward_euler': Basic implementation of the - implicit Euler method with a - fixed step size. See Judd (1998), - Chapter 10, pg. 343 for more detail. - - 'trapezoidal_rule': Basic implementation of the - trapezoidal rule with a fixed step - size. See Judd (1998), Chapter 10, - pg. 344 for more detail. - - 'erk2': Second-order explicit Runge-Kutta. - - 'erk3': Third-order explicit Runge-Kutta. - - 'erk4': Fourth-order explicit Runge-Kutta. - - 'erk5': Fifth-order explicit Runge-Kutta. - - 'vode': Real-valued Variable-coefficient ODE - equation solver, with fixed leading - coefficient implementation. It - provides implicit Adams method (for - non-stiff problems) and a method - based on backward differentiation - formulas (BDF) (for stiff problems). - - 'lsoda': Real-valued Variable-coefficient ODE - equation solver, with fixed leading - coefficient implementation. It - provides automatic method switching - between implicit Adams method (for - non-stiff problems) and a method - based on backward differentiation - formulas (BDF) (for stiff problems). - - 'dopri5': Embedded explicit Runge-Kutta method - with order 4(5). See Dormand and - Prince (1980) for details. - 'dop85': - - See documentation for integrate.ode for more details and - references for 'vode', 'lsoda', 'dopri5', and 'dop85', - as well as the rest of the ODE solvers available via - ODEPACK. - - step: (boolean) Allows access to internal steps for those - solvers that use adaptive step size routines. Currently - only 'vode', 'zvode', and 'lsoda' allow support step. - Default is False. - - relax: (boolean) The following integrators support run_relax: - 'vode', 'zvode', 'lsoda'. Default is False. - - **kwargs: (dict) Dictionary of integrator specific keyword args. - - Returns: - - solution: (array-like) Simulated solution trajectory. + Integrates the ODE given some initial condition. + + Arguments + --------- + t0 : float + Initial condition for the independent variable. + y0 : array_like (float, shape=(n,)) + Initial condition for the dependent variables. + h : float, optional(default=1.0) + Step-size for computing the solution. Can be positive or + negative depending on the desired direction of integration. + T : int, optional(default=None) + Terminal value for the independent variable. One of either `T` + or `g` must be specified. + g : callable ``g(t, vec, args)``, optional(default=None) + Provides a stopping condition for the integration. If specified + user must also specify a stopping tolerance, `tol`. + tol : float, optional (default=None) + Stopping tolerance for the integration. Only required if `g` is + also specifed. + integrator : str, optional(default='dopri5') + Must be one of 'vode', 'lsoda', 'dopri5', or 'dop853' + step : bool, optional(default=False) + Allows access to internal steps for those solvers that use + adaptive step size routines. Currently only 'vode', 'zvode', + and 'lsoda' support `step=True`. + relax : bool, optional(default=False) + Currently only 'vode', 'zvode', and 'lsoda' support + `relax=True`. + **kwargs : dict, optional(default=None) + Dictionary of integrator specific keyword arguments. See the + Notes section below for a detailed discussion of the valid + keyword arguments for each of the supported integrators. + + Notes + ----- + Descriptions of the available integrators are listed below. + + "vode" + + Real-valued Variable-coefficient Ordinary Differential Equation + solver, with fixed-leading-coefficient implementation. It provides + implicit Adams method (for non-stiff problems) and a method based + on backward differentiation formulas (BDF) (for stiff problems). + + Source: http://www.netlib.org/ode/vode.f + + .. warning:: + + This integrator is not re-entrant. You cannot have two `ode` + instances using the "vode" integrator at the same time. + + This integrator accepts the following keyword arguments: + + - atol : float or sequence + absolute tolerance for solution + - rtol : float or sequence + relative tolerance for solution + - lband : None or int + - rband : None or int + Jacobian band width, jac[i,j] != 0 for i-lband <= j <= i+rband. + Setting these requires your jac routine to return the jacobian + in packed format, jac_packed[i-j+lband, j] = jac[i,j]. + - method: 'adams' or 'bdf' + Which solver to use, Adams (non-stiff) or BDF (stiff) + - with_jacobian : bool + Whether to use the jacobian + - nsteps : int + Maximum number of (internally defined) steps allowed during one + call to the solver. + - first_step : float + - min_step : float + - max_step : float + Limits for the step sizes used by the integrator. + - order : int + Maximum order used by the integrator, + order <= 12 for Adams, <= 5 for BDF. + + "zvode" + + Complex-valued Variable-coefficient Ordinary Differential Equation + solver, with fixed-leading-coefficient implementation. It provides + implicit Adams method (for non-stiff problems) and a method based + on backward differentiation formulas (BDF) (for stiff problems). + + Source: http://www.netlib.org/ode/zvode.f + + .. warning:: + + This integrator is not re-entrant. You cannot have two `ode` + instances using the "zvode" integrator at the same time. + + This integrator accepts the same keyword arguments as "vode". + + .. note:: + + When using ZVODE for a stiff system, it should only be used for + the case in which the function f is analytic, that is, when + each f(i) is an analytic function of each y(j). Analyticity + means that the partial derivative df(i)/dy(j) is a unique + complex number, and this fact is critical in the way ZVODE + solves the dense or banded linear systems that arise in the + stiff case. For a complex stiff ODE system in which f is not + analytic, ZVODE is likely to have convergence failures, and + for this problem one should instead use DVODE on the equivalent + real system (in the real and imaginary parts of y). + + "lsoda" + + Real-valued Variable-coefficient Ordinary Differential Equation + solver, with fixed-leading-coefficient implementation. It provides + automatic method switching between implicit Adams method (for + non-stiff problems) and a method based on backward differentiation + formulas (BDF) (for stiff problems). + + Source: http://www.netlib.org/odepack + + .. warning:: + + This integrator is not re-entrant. You cannot have two `ode` + instances using the "lsoda" integrator at the same time. + + This integrator accepts the following keyword arguments: + + - atol : float or sequence + absolute tolerance for solution + - rtol : float or sequence + relative tolerance for solution + - lband : None or int + - rband : None or int + Jacobian band width, jac[i,j] != 0 for i-lband <= j <= i+rband. + Setting these requires your jac routine to return the jacobian + in packed format, jac_packed[i-j+lband, j] = jac[i,j]. + - with_jacobian : bool + Whether to use the jacobian + - nsteps : int + Maximum number of (internally defined) steps allowed during one + call to the solver. + - first_step : float + - min_step : float + - max_step : float + Limits for the step sizes used by the integrator. + - max_order_ns : int + Maximum order used in the nonstiff case (default 12). + - max_order_s : int + Maximum order used in the stiff case (default 5). + - max_hnil : int + Maximum number of messages reporting too small step size (t+h=t) + (default 0) + - ixpr : int + Whether to generate extra printing at method switches. Default is + False. + + "dopri5" + + This is an explicit Runge-Kutta method of order (4)5 due to Dormand + and Prince (with adaptive step-size control and dense output). + + Authors: + + E. Hairer and G. Wanner + Universite de Geneve, Dept. de Mathematiques + CH-1211 Geneve 24, Switzerland + e-mail: ernst.hairer@math.unige.ch, + gerhard.wanner@math.unige.ch + + This code is described in [HNW93]_. + + This integrator accepts the following keyword arguments: + + - atol : float or sequence + absolute tolerance for solution + - rtol : float or sequence + relative tolerance for solution + - nsteps : int + Maximum number of (internally defined) steps allowed during one + call to the solver. + - first_step : float + - max_step : float + - safety : float + Safety factor on new step selection (default 0.9) + - ifactor : float + - dfactor : float + Maximum factor to increase/decrease step size by in one step + - beta : float + Beta parameter for stabilised step size control. + - verbosity : int + Switch for printing messages (< 0 for no messages). + + "dop853" + + This is an explicit Runge-Kutta method of order 8(5,3) due to + Dormand and Prince (with adaptive step-size control and dense + output). + + Options and references the same as "dopri5". + + Returns + ------- + solution: array_like (float) + Simulated solution trajectory. """ # select the integrator self.ode.set_integrator(integrator, **kwargs) # pass the model parameters as additional args - if self.args != None: + if self.args is not None: self.ode.set_f_params(*self.args) self.ode.set_jac_params(*self.args) @@ -149,51 +262,53 @@ def integrate(self, t0, y0, h=1.0, T=None, g=None, tol=None, # generate a solution trajectory while self.ode.successful(): + self.ode.integrate(self.ode.t + h, step, relax) current_step = np.hstack((self.ode.t, self.ode.y)) solution = np.vstack((solution, current_step)) # check terminal conditions - if g is not None and g(self.ode.t, self.ode.y, *self.args) < tol: + if (g is not None) and (g(self.ode.t, self.ode.y, *self.args) < tol): break - elif T is not None and h > 0 and self.ode.t >= T: + elif (T is not None) and (h > 0) and (self.ode.t >= T): break - elif T is not None and h < 0 and self.ode.t <= T: + elif (T is not None) and (h < 0) and (self.ode.t <= T): break else: - pass + continue return solution def interpolate(self, traj, ti, k=3, der=0, ext=0): """ - Parameteric B-spline interpolation in N-dimensions. - - Arguments: - - traj: (array-like) Solution trajectory providing the data points for - constructing the B-spline representation. - - ti: (array-like) Array of values for the independent variable at - which to interpolate the value of the B-spline. - - k: (int) Degree of the desired B-spline. Degree must satsify - 1 <= k <= 5. Default is k=3 for cubic B-spline interpolation. - - der: (int) The order of derivative of the spline to compute - (must be less than or equal to k). Default is zero. - - ext: (int) Controls the value of returned elements for outside the - original knot sequence provided by traj. For extrapolation, set - ext=0; ext=1 returns zero; ext=2 raises a ValueError. Default - is to perform extrapolation. - - Returns: - - interp_traj: (array) The interpolated trajectory. + Parametric B-spline interpolation in N-dimensions. + + Arguments + --------- + traj : array_like (float) + Solution trajectory providing the data points for constructing + the B-spline representation. + ti : array_like (float) + Array of values for the independent variable at which to + interpolate the value of the B-spline. + k : int, optional(default=3) + Degree of the desired B-spline. Degree must satisfy + :math:`1 \le k \le 5`. + der : int, optional(default=0) + The order of derivative of the spline to compute (must be less + than or equal to `k`). + ext : int, optional(default=2) Controls the value of returned + elements for outside the original knot sequence provided by + traj. For extrapolation, set `ext=0`; `ext=1` returns zero; + `ext=2` raises a `ValueError`. + + Returns + ------- + interp_traj: array (float) + The interpolated trajectory. """ # array of parameter values @@ -216,52 +331,62 @@ def interpolate(self, traj, ti, k=3, der=0, ext=0): def compare_trajectories(self, traj1, traj2): """ - Returns the absolute difference between two solution trajectories. - - Arguments: + Return the element-wise absolute difference between two trajectories. - traj1: (array-like) (T,n+1) array containing a solution trajectory. - traj2: (array-like) (T,n+1) array containing a solution trajectory. + Arguments + --------- + traj1 : array_like (float) + Array containing a solution trajectory. + traj2 : array_like (float) + Array containing a solution trajectory. - Returns: + Returns + ------- + abs_diff: array_like (float) + Array containing the element-wise absolute difference between + traj1 and traj2. - abs_diff: (array-like) (T,n) array of the element-wise absolute - difference between traj1 and traj2. """ abs_diff = np.abs(traj1[:, 1:] - traj2[:, 1:]) - return abs_diff - def get_L2_errors(self, traj1, traj2): + def get_l2_errors(self, traj1, traj2): """ - Computes a measure of the total difference between two trajectories - using the L^2 norm. - - Arguments: + Computes a measure of the difference between two trajectories using + the :math: `L^2` norm. - traj1: (array-like) (T,n+1) array containing a solution trajectory. - traj2: (array-like) (T,n+1) array containing a solution trajectory. + Arguments + --------- + traj1 : array_like (float) + Array containing a solution trajectory. + traj2 : array_like (float) + Array containing a solution trajectory. - Returns: - - L2_error: (float) Average difference between two trajectories. + Returns + ------- + l2_error: float + Measure of the total difference between two trajectories. """ - L2_error = np.sum(self.compare_trajectories(traj1, traj2)**2)**0.5 - return L2_error + l2_error = np.sum(self.compare_trajectories(traj1, traj2)**2)**0.5 + return l2_error def get_maximal_errors(self, traj1, traj2): """ - Computes a measure of the point-wise distance between two trajectories. - - Arguments: - - traj1: (array-like) (T,n+1) array containing a solution trajectory. - traj2: (array-like) (T,n+1) array containing a solution trajectory. - - Returns: - - maximal_error: (float) Maximal difference between two trajectories. + Computes a measure of the distance between two trajectories using the + :math:`L^{\infty}` norm. + + Arguments + --------- + traj1 : array_like (float) + Array containing a solution trajectory. + traj2 : array_like (float) + Array containing a solution trajectory. + + Returns + ------- + maximal_error: float + Maximal difference between two trajectories. """ maximal_error = np.max(self.compare_trajectories(traj1, traj2)) From ee24b6ba7760e535eef6f1ff52452f77540a5b03 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 21:52:54 -0400 Subject: [PATCH 04/49] Started work on a testing suite for ivp module. --- quantecon/tests/test_ivp.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 quantecon/tests/test_ivp.py diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py new file mode 100644 index 000000000..ab7dabe4d --- /dev/null +++ b/quantecon/tests/test_ivp.py @@ -0,0 +1,14 @@ +""" +Test suite for ivp.py + +""" +import unittest +import ..ivp + + +class IVPTestSuite(unittest.TestCase): + pass + +if __name__ == '__main__': + IVPTest = unittest.TestLoader().loadTestsFromTestCase(IVPTestSuite) + unittest.TextTestRunner(verbosity=2).run(suite1) \ No newline at end of file From f0dfc4c31aa4fa82a918028f62b92bb15393bc68 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 21:56:28 -0400 Subject: [PATCH 05/49] Started work on incorporating the Solow growth model. Solow model will be my first test case for IVP class. --- quantecon/solow.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 quantecon/solow.py diff --git a/quantecon/solow.py b/quantecon/solow.py new file mode 100644 index 000000000..76825ceba --- /dev/null +++ b/quantecon/solow.py @@ -0,0 +1,6 @@ +import ivp + + +class Model(ivp.IVP): + """Base class representing a continuous time Solow growth model.""" + pass \ No newline at end of file From 6479b455ce9b9b1c7a33cb8bd2f29e257829b3e3 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 22:29:43 -0400 Subject: [PATCH 06/49] Added the analytic solution to the Solow model with Cobb-Douglas production. --- quantecon/solow.py | 74 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/quantecon/solow.py b/quantecon/solow.py index 76825ceba..9e7d6384b 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -3,4 +3,76 @@ class Model(ivp.IVP): """Base class representing a continuous time Solow growth model.""" - pass \ No newline at end of file + + def __init__(self, k_dot, jacobian, params): + """ + Creates an instance of the Solow model. + + Arguments + ---------- + k_dot : callable, ``k_dot(t, k, params)`` + Equation of motion for capital (per person/effective person). The + independent variable, `t`, is time; `k`, is capital (per person/ + effective person); `params` is a dictionary of model parameters. + jacobian : callable, ``jacobian(t, k, params)`` + The derivative of the equation of motion for capital (per person/ + effective person) with respect to `k`. The independent variable, t, + is time; k, (per person/effective person); `params` is a dictionary + of model parameters. + params : dict + Dictionary of model parameters. Standard parameters for a Solow + growth model are: + + - `g`: Growth rate of technology (rate of technological progress). + - `n`: Growth rate of labor force. + - `s`: Savings rate. Must satisfy ``0 < s < 1``. + - :math:`\delta`: Depreciation rate of physical capital. Must + satisfy :math:`0 < \delta`. + + Only other model parameters will be the parameters of some + production function. + + """ + super(Model, self).__init__(k_dot, jacobian, (params,)) + + +def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): + """ + Analytic solution for the Solow model with Cobb-Douglas production. + + Arguments + --------- + k0 : float + Initial value for capital (per person/effective person) + t : array_like (float, shape=(T,)) + Array of points at which the solution is desired. + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy ``0 < s < 1``. + alpha : float + Elasticity of output with respect to capital. Must satisfy + :math:`0 < \alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy + :math:`0 < \delta`. + + Returns + ------- + analytic_traj : array_like (float, shape=(T,2)) + Array representing the analytic solution trajectory. + + """ + # speed of convergence + lmbda = (n + g + delta) * (1 - alpha) + + # analytic solution for Solow model at time t + k_t = (((s / (n + g + delta)) * (1 - np.exp(-lmbda * t)) + + k0**(1 - alpha) * np.exp(-lmbda * t))**(1 / (1 - alpha))) + + # combine into a (T, 2) array + analytic_traj = np.hstack((t[:,np.newaxis], k_t[:,np.newaxis])) + + return analytic_traj From bca2974a7e6d66d52a4c1f8c34df2ae8d3d04b98 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 22:31:16 -0400 Subject: [PATCH 07/49] Started a test suite for the solow module. --- quantecon/tests/test_solow.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 quantecon/tests/test_solow.py diff --git a/quantecon/tests/test_solow.py b/quantecon/tests/test_solow.py new file mode 100644 index 000000000..120db6ba6 --- /dev/null +++ b/quantecon/tests/test_solow.py @@ -0,0 +1,14 @@ +""" +Test suite for solow.py + +""" +import unittest +import ..ivp + + +class SolowTestSuite(unittest.TestCase): + pass + +if __name__ == '__main__': + SolowTest = unittest.TestLoader().loadTestsFromTestCase(SolowTestSuite) + unittest.TextTestRunner(verbosity=2).run(suite1) \ No newline at end of file From 02bb0eee7d999394068f2f3b4df3e9cba520d6a3 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 23:25:28 -0400 Subject: [PATCH 08/49] Added equations for Solow model with CES production technology. --- quantecon/solow.py | 159 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 149 insertions(+), 10 deletions(-) diff --git a/quantecon/solow.py b/quantecon/solow.py index 9e7d6384b..5ab3f5c00 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -1,3 +1,5 @@ +import numpy as np + import ivp @@ -11,13 +13,13 @@ def __init__(self, k_dot, jacobian, params): Arguments ---------- k_dot : callable, ``k_dot(t, k, params)`` - Equation of motion for capital (per person/effective person). The - independent variable, `t`, is time; `k`, is capital (per person/ - effective person); `params` is a dictionary of model parameters. + Equation of motion for capital (per worker/effective worker). The + independent variable, `t`, is time; `k`, is capital (per worker/ + effective worker); `params` is a dictionary of model parameters. jacobian : callable, ``jacobian(t, k, params)`` - The derivative of the equation of motion for capital (per person/ - effective person) with respect to `k`. The independent variable, t, - is time; k, (per person/effective person); `params` is a dictionary + The derivative of the equation of motion for capital (per worker/ + effective worker) with respect to `k`. The independent variable, t, + is time; k, (per worker/effective worker); `params` is a dictionary of model parameters. params : dict Dictionary of model parameters. Standard parameters for a Solow @@ -36,6 +38,143 @@ def __init__(self, k_dot, jacobian, params): super(Model, self).__init__(k_dot, jacobian, (params,)) +def ces_actual_investment(k, s, alpha, sigma): + """ + Total amount of output (per worker/effective worker) invested into the + production of new capital. + + Arguments + --------- + k : array_like (float) + Capital (per worker/effective worker). + s : float + Savings rate. Must satisfy ``0 < s < 1``. + alpha : float + Importance of capital relative to effective labor in production. Must + satisfy :math:`0 < \alpha < 1`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + actual_investment : array_like (float) + Total amount of output (per worker/effective worker) invested into the + production of new capital. + + """ + actual_investment = s * ces_output(k, 1, 1, alpha, 1-alpha, sigma) + return actual_investment + + +def ces_break_even_investment(k, g, n, delta): + """ + Amount of investment required to maintain current levels of capital (per + worker/effective worker). + + Arguments + --------- + k : array_like (float) + Capital (per worker/effective worker). + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + delta : float + Depreciation rate of physical capital. Must satisfy + :math:`0 < \delta`. + + Returns + ------- + break_even_investment : array_like (float) + Amount of investment required to maintain current levels of capital + (per worker/effective worker). + + """ + break_even_investment = (n + g + delta) * k + return break_even_investment + + +def ces_k_dot(k, t, g, n, s, alpha, delta, sigma): + """ + Equation of motion for capital (per worker/effective worker) for a + Solow growth model with constant elasticity of substitution (CES) + production function. + + Arguments + --------- + k : array_like (float) + Capital (per worker/effective worker). + t : array_like (float) + Time. + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy ``0 < s < 1``. + alpha : float + Importance of capital relative to effective labor in production. Must + satisfy :math:`0 < \alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy + :math:`0 < \delta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + k_dot : array_like (float) + Rate of change of capital (per worker/effective worker). + + """ + k_dot = (ces_actual_investment(k, s, alpha, sigma) - + ces_break_even_investment(k, g, n, delta)) + return k_dot + + +def ces_output(K, A, L, alpha, beta, sigma): + """ + Constant elasticity of substitution (CES) production function with labor + augmenting technology. + + Arguments + --------- + K : array_like (float) + Capital + L : array_like (float) + Labor + A : array_like (float) + Technology + alpha : float + Importance of capital in production. Must satisfy :math:`0 < \alpha`. + beta : float + Importance of effective labor in production. Must satisfy + :math:`0 < \beta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + Y : array_like (float) + Output + + """ + rho = (sigma - 1) / sigma + + # CES nests both Cobb-Douglas and Leontief functions + if abs(rho) < 1e-3: + Y = K**alpha * (A * L)**beta + elif sigma < 1e-3: + Y = np.minimum(alpha * K, beta * A * L) + else: + Y = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) + + return Y + + def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): """ Analytic solution for the Solow model with Cobb-Douglas production. @@ -43,7 +182,7 @@ def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): Arguments --------- k0 : float - Initial value for capital (per person/effective person) + Initial value for capital (per worker/effective worker) t : array_like (float, shape=(T,)) Array of points at which the solution is desired. g : float @@ -69,10 +208,10 @@ def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): lmbda = (n + g + delta) * (1 - alpha) # analytic solution for Solow model at time t - k_t = (((s / (n + g + delta)) * (1 - np.exp(-lmbda * t)) + - k0**(1 - alpha) * np.exp(-lmbda * t))**(1 / (1 - alpha))) + k_t = (((s / (n + g + delta)) * (1 - np.exp(-lmbda * t)) + + k0**(1 - alpha) * np.exp(-lmbda * t))**(1 / (1 - alpha))) # combine into a (T, 2) array - analytic_traj = np.hstack((t[:,np.newaxis], k_t[:,np.newaxis])) + analytic_traj = np.hstack((t[:, np.newaxis], k_t[:, np.newaxis])) return analytic_traj From cbbec78bc424ef4876bdded2079d8de59b57f804 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 23:48:05 -0400 Subject: [PATCH 09/49] Refactored CES specific functions into their own module. --- quantecon/ces.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 quantecon/ces.py diff --git a/quantecon/ces.py b/quantecon/ces.py new file mode 100644 index 000000000..8843907d9 --- /dev/null +++ b/quantecon/ces.py @@ -0,0 +1,85 @@ +import numpy as np + + +def marginal_product_capital(K, A, L, alpha, beta, sigma): + """ + Marginal product of capital for constant elasticity of substitution (CES) + production function with labor augmenting technology. + + Arguments + --------- + K : array_like (float) + Capital + L : array_like (float) + Labor + A : array_like (float) + Technology + alpha : float + Importance of capital in production. Must satisfy :math:`0 < \alpha`. + beta : float + Importance of effective labor in production. Must satisfy + :math:`0 < \beta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + MPK : array_like (float) + Marginal product of capital. + + """ + rho = (sigma - 1) / sigma + + # CES nests both Cobb-Douglas and Leontief functions + if abs(rho) < 1e-3: + MPK = alpha * K**(alpha - 1) * (A * L)**beta + elif sigma < 1e-3: + MPK = np.nan * K + else: + MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * + ces_output(K, A, L, alpha, sigma)) + + return MPK + + +def output(K, A, L, alpha, beta, sigma): + """ + Constant elasticity of substitution (CES) production function with labor + augmenting technology. + + Arguments + --------- + K : array_like (float) + Capital + L : array_like (float) + Labor + A : array_like (float) + Technology + alpha : float + Importance of capital in production. Must satisfy :math:`0 < \alpha`. + beta : float + Importance of effective labor in production. Must satisfy + :math:`0 < \beta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + Y : array_like (float) + Output + + """ + rho = (sigma - 1) / sigma + + # CES nests both Cobb-Douglas and Leontief functions + if abs(rho) < 1e-3: + Y = K**alpha * (A * L)**beta + elif sigma < 1e-3: + Y = np.minimum(alpha * K, beta * A * L) + else: + Y = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) + + return Y + \ No newline at end of file From a7adf037f47da5a708efde20b9bb7ced771d457d Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 23:49:32 -0400 Subject: [PATCH 10/49] Removed CES specific functions to new module and added imports. --- quantecon/solow.py | 71 +++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/quantecon/solow.py b/quantecon/solow.py index 5ab3f5c00..c9d0e6d2d 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -1,5 +1,6 @@ import numpy as np +import ces import ivp @@ -63,7 +64,7 @@ def ces_actual_investment(k, s, alpha, sigma): production of new capital. """ - actual_investment = s * ces_output(k, 1, 1, alpha, 1-alpha, sigma) + actual_investment = s * ces.output(k, 1, 1, alpha, 1-alpha, sigma) return actual_investment @@ -95,11 +96,10 @@ def ces_break_even_investment(k, g, n, delta): return break_even_investment -def ces_k_dot(k, t, g, n, s, alpha, delta, sigma): +def ces_jacobian(k, t, g, n, s, alpha, delta, sigma): """ - Equation of motion for capital (per worker/effective worker) for a - Solow growth model with constant elasticity of substitution (CES) - production function. + Jacobian for the Solow model with constant elasticity of substitution (CES) + production. Arguments --------- @@ -125,54 +125,53 @@ def ces_k_dot(k, t, g, n, s, alpha, delta, sigma): Returns ------- - k_dot : array_like (float) - Rate of change of capital (per worker/effective worker). + jac : array_like (float) + Derivative of the equation of motion for capital (per worker/effective + worker) with respect to `k`. """ - k_dot = (ces_actual_investment(k, s, alpha, sigma) - - ces_break_even_investment(k, g, n, delta)) - return k_dot + jac = (s * ces.marginal_product_capital(k, 1, 1, alpha, 1-alpha, sigma) - + (n + g + delta)) + return jac -def ces_output(K, A, L, alpha, beta, sigma): +def ces_k_dot(k, t, g, n, s, alpha, delta, sigma): """ - Constant elasticity of substitution (CES) production function with labor - augmenting technology. + Equation of motion for capital (per worker/effective worker) for a + Solow growth model with constant elasticity of substitution (CES) + production function. Arguments --------- - K : array_like (float) - Capital - L : array_like (float) - Labor - A : array_like (float) - Technology + k : array_like (float) + Capital (per worker/effective worker). + t : array_like (float) + Time. + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy ``0 < s < 1``. alpha : float - Importance of capital in production. Must satisfy :math:`0 < \alpha`. - beta : float - Importance of effective labor in production. Must satisfy - :math:`0 < \beta`. + Importance of capital relative to effective labor in production. Must + satisfy :math:`0 < \alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy + :math:`0 < \delta`. sigma : float Elasticity of substitution between capital and effective labor in production. Must satisfy :math:`0 \le \sigma`. Returns ------- - Y : array_like (float) - Output + k_dot : array_like (float) + Rate of change of capital (per worker/effective worker). """ - rho = (sigma - 1) / sigma - - # CES nests both Cobb-Douglas and Leontief functions - if abs(rho) < 1e-3: - Y = K**alpha * (A * L)**beta - elif sigma < 1e-3: - Y = np.minimum(alpha * K, beta * A * L) - else: - Y = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) - - return Y + k_dot = (ces_actual_investment(k, s, alpha, sigma) - + ces_break_even_investment(k, g, n, delta)) + return k_dot def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): From 9c5e235f6740f2b8b90e6504f1570e74aa4a3c6c Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 23:51:05 -0400 Subject: [PATCH 11/49] Fixed small typo. --- quantecon/tests/test_solow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantecon/tests/test_solow.py b/quantecon/tests/test_solow.py index 120db6ba6..386a07a68 100644 --- a/quantecon/tests/test_solow.py +++ b/quantecon/tests/test_solow.py @@ -3,7 +3,7 @@ """ import unittest -import ..ivp +import ..solow class SolowTestSuite(unittest.TestCase): From 85542aa87d02257d0dc473417d20efc14014a461 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Wed, 16 Jul 2014 23:51:21 -0400 Subject: [PATCH 12/49] Started a test suite for the ces module. --- quantecon/tests/test_ces.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 quantecon/tests/test_ces.py diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py new file mode 100644 index 000000000..8be3673b3 --- /dev/null +++ b/quantecon/tests/test_ces.py @@ -0,0 +1,14 @@ +""" +Test suite for ces.py + +""" +import unittest +import ..ces + + +class CESTestSuite(unittest.TestCase): + pass + +if __name__ == '__main__': + CESTest = unittest.TestLoader().loadTestsFromTestCase(CESTestSuite) + unittest.TextTestRunner(verbosity=2).run(suite1) \ No newline at end of file From f88247b197f0d4c31c871b059d231d6e16aad180 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 00:30:10 -0400 Subject: [PATCH 13/49] Fixed small typo. --- quantecon/ces.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 8843907d9..95c4aabda 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -1,3 +1,5 @@ +from __future__ import division + import numpy as np @@ -38,7 +40,7 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): MPK = np.nan * K else: MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * - ces_output(K, A, L, alpha, sigma)) + output(K, A, L, alpha, sigma)) return MPK From 6c1086bea9e3da9a404b69507e5d82523d6367c0 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 00:39:47 -0400 Subject: [PATCH 14/49] Slight rearrangement of args in docstring. --- quantecon/ces.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 95c4aabda..6b3e1e333 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -12,10 +12,10 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): --------- K : array_like (float) Capital - L : array_like (float) - Labor A : array_like (float) Technology + L : array_like (float) + Labor alpha : float Importance of capital in production. Must satisfy :math:`0 < \alpha`. beta : float From 58051b9cec5c8f8e3964ce373a4373059986f595 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 00:45:41 -0400 Subject: [PATCH 15/49] from __future__ import division! --- quantecon/ivp.py | 2 ++ quantecon/solow.py | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/quantecon/ivp.py b/quantecon/ivp.py index c31a02c3c..57e9012c7 100644 --- a/quantecon/ivp.py +++ b/quantecon/ivp.py @@ -1,3 +1,5 @@ +from __future__ import division + import numpy as np from scipy import integrate, interpolate diff --git a/quantecon/solow.py b/quantecon/solow.py index c9d0e6d2d..5c56a555e 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -1,3 +1,5 @@ +from __future__ import division + import numpy as np import ces @@ -13,17 +15,17 @@ def __init__(self, k_dot, jacobian, params): Arguments ---------- - k_dot : callable, ``k_dot(t, k, params)`` + k_dot : callable, ``k_dot(t, k, *params)`` Equation of motion for capital (per worker/effective worker). The independent variable, `t`, is time; `k`, is capital (per worker/ - effective worker); `params` is a dictionary of model parameters. - jacobian : callable, ``jacobian(t, k, params)`` + effective worker); `params` is a tuple of model parameters. + jacobian : callable, ``jacobian(t, k, *params)`` The derivative of the equation of motion for capital (per worker/ effective worker) with respect to `k`. The independent variable, t, - is time; k, (per worker/effective worker); `params` is a dictionary + is time; k, (per worker/effective worker); `params` is a tuple of model parameters. - params : dict - Dictionary of model parameters. Standard parameters for a Solow + params : tuple + Tuple of model parameters. Standard parameters for a Solow growth model are: - `g`: Growth rate of technology (rate of technological progress). @@ -36,7 +38,7 @@ def __init__(self, k_dot, jacobian, params): production function. """ - super(Model, self).__init__(k_dot, jacobian, (params,)) + super(Model, self).__init__(k_dot, jacobian, params) def ces_actual_investment(k, s, alpha, sigma): @@ -92,7 +94,7 @@ def ces_break_even_investment(k, g, n, delta): (per worker/effective worker). """ - break_even_investment = (n + g + delta) * k + break_even_investment = (g + n + delta) * k return break_even_investment @@ -131,7 +133,7 @@ def ces_jacobian(k, t, g, n, s, alpha, delta, sigma): """ jac = (s * ces.marginal_product_capital(k, 1, 1, alpha, 1-alpha, sigma) - - (n + g + delta)) + (g + n + delta)) return jac From c5a737e8fa61ee7cdfb0aa681eb7a8ce3b6a35df Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 01:01:35 -0400 Subject: [PATCH 16/49] BUG FIX: Had reversed order of args! Now all is well...tomorrow I write some tests! --- quantecon/solow.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/quantecon/solow.py b/quantecon/solow.py index 5c56a555e..b92d236a7 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -1,5 +1,4 @@ from __future__ import division - import numpy as np import ces @@ -98,17 +97,17 @@ def ces_break_even_investment(k, g, n, delta): return break_even_investment -def ces_jacobian(k, t, g, n, s, alpha, delta, sigma): +def ces_jacobian(t, k, g, n, s, alpha, delta, sigma): """ Jacobian for the Solow model with constant elasticity of substitution (CES) production. Arguments --------- - k : array_like (float) - Capital (per worker/effective worker). t : array_like (float) Time. + k : array_like (float) + Capital (per worker/effective worker). g : float Growth rate of technology. n : float @@ -137,7 +136,7 @@ def ces_jacobian(k, t, g, n, s, alpha, delta, sigma): return jac -def ces_k_dot(k, t, g, n, s, alpha, delta, sigma): +def ces_k_dot(t, k, g, n, s, alpha, delta, sigma): """ Equation of motion for capital (per worker/effective worker) for a Solow growth model with constant elasticity of substitution (CES) @@ -145,10 +144,10 @@ def ces_k_dot(k, t, g, n, s, alpha, delta, sigma): Arguments --------- - k : array_like (float) - Capital (per worker/effective worker). t : array_like (float) Time. + k : array_like (float) + Capital (per worker/effective worker). g : float Growth rate of technology. n : float From 867a33eccb657f0d135e3e3860db51a2e3de6417 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 10:30:27 -0400 Subject: [PATCH 17/49] Added a function for computing the marginal product of labor. --- quantecon/ces.py | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 6b3e1e333..189e811f3 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -45,6 +45,48 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): return MPK +def marginal_product_labor(K, A, L, alpha, beta, sigma): + """ + Marginal product of labor for constant elasticity of substitution (CES) + production function with labor augmenting technology. + + Arguments + --------- + K : array_like (float) + Capital + A : array_like (float) + Technology + L : array_like (float) + Labor + alpha : float + Importance of capital in production. Must satisfy :math:`0 < \alpha`. + beta : float + Importance of effective labor in production. Must satisfy + :math:`0 < \beta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + MPL : array_like (float) + Marginal product of labor. + + """ + rho = (sigma - 1) / sigma + + # CES nests both Cobb-Douglas and Leontief functions + if abs(rho) < 1e-3: + MPL = (1 - beta) * K**alpha * (A * L)**(beta - 1) + elif sigma < 1e-3: + MPL = np.nan * L + else: + MPL = ((beta * (A * L)**(rho - 1) * A / (alpha * K**rho + beta * (A * L)**rho)) * + output(K, A, L, alpha, sigma)) + + return MPL + + def output(K, A, L, alpha, beta, sigma): """ Constant elasticity of substitution (CES) production function with labor @@ -54,10 +96,10 @@ def output(K, A, L, alpha, beta, sigma): --------- K : array_like (float) Capital - L : array_like (float) - Labor A : array_like (float) Technology + L : array_like (float) + Labor alpha : float Importance of capital in production. Must satisfy :math:`0 < \alpha`. beta : float From e9442c85ef118e1535ed69e74c40071de882d0e2 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 10:31:20 -0400 Subject: [PATCH 18/49] Marginal products current undefined for Leontief production. --- quantecon/ces.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 189e811f3..3d07d83bc 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -37,7 +37,7 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): if abs(rho) < 1e-3: MPK = alpha * K**(alpha - 1) * (A * L)**beta elif sigma < 1e-3: - MPK = np.nan * K + raise NotImplementedError else: MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * output(K, A, L, alpha, sigma)) @@ -79,7 +79,7 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): if abs(rho) < 1e-3: MPL = (1 - beta) * K**alpha * (A * L)**(beta - 1) elif sigma < 1e-3: - MPL = np.nan * L + raise NotImplementedError else: MPL = ((beta * (A * L)**(rho - 1) * A / (alpha * K**rho + beta * (A * L)**rho)) * output(K, A, L, alpha, sigma)) From 362ceabed7802f7c9d524c9ec49febde33ca1d12 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 10:41:17 -0400 Subject: [PATCH 19/49] Added output elasticities. --- quantecon/ces.py | 83 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 3d07d83bc..ccd1579fc 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -126,4 +126,85 @@ def output(K, A, L, alpha, beta, sigma): Y = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) return Y - \ No newline at end of file + + +def output_elasticity_capital(K, A, L, alpha, beta, sigma): + """ + Elasticity of output with respect to capital for the constant elasticity + of substitution (CES) production function with labor augmenting technology. + + Arguments + --------- + K : array_like (float) + Capital + A : array_like (float) + Technology + L : array_like (float) + Labor + alpha : float + Importance of capital in production. Must satisfy :math:`0 < \alpha`. + beta : float + Importance of effective labor in production. Must satisfy + :math:`0 < \beta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + epsilon_YK : array_like (float) + Output elasticity with respect to capital. + + """ + rho = (sigma - 1) / sigma + + # CES nests both Cobb-Douglas and Leontief functions + if abs(rho) < 1e-3: + epsilon_YK = alpha + elif sigma < 1e-3: + raise NotImplementedError + else: + epsilon_YK = alpha * K**rho / (alpha * K**rho + beta * (A * L)**rho) + + return epsilon_YK + + +def output_elasticity_labor(K, A, L, alpha, beta, sigma): + """ + Elasticity of output with respect to labor for the constant elasticity + of substitution (CES) production function with labor augmenting technology. + + Arguments + --------- + K : array_like (float) + Capital + A : array_like (float) + Technology + L : array_like (float) + Labor + alpha : float + Importance of capital in production. Must satisfy :math:`0 < \alpha`. + beta : float + Importance of effective labor in production. Must satisfy + :math:`0 < \beta`. + sigma : float + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`0 \le \sigma`. + + Returns + ------- + epsilon_YL : array_like (float) + Output elasticity with respect to labor. + + """ + rho = (sigma - 1) / sigma + + # CES nests both Cobb-Douglas and Leontief functions + if abs(rho) < 1e-3: + epsilon_YL = beta + elif sigma < 1e-3: + raise NotImplementedError + else: + epsilon_YL = beta * (A * L)**rho / (alpha * K**rho + beta * (A * L)**rho) + + return epsilon_YL \ No newline at end of file From dfe1e17c02b0f3f0c326863a9d3f3b9ecc236a00 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 10:42:58 -0400 Subject: [PATCH 20/49] BUG fix in marginal product formulas. --- quantecon/ces.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index ccd1579fc..1519e652f 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -40,7 +40,7 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): raise NotImplementedError else: MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * - output(K, A, L, alpha, sigma)) + output(K, A, L, alpha, beta, sigma)) return MPK @@ -82,7 +82,7 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): raise NotImplementedError else: MPL = ((beta * (A * L)**(rho - 1) * A / (alpha * K**rho + beta * (A * L)**rho)) * - output(K, A, L, alpha, sigma)) + output(K, A, L, alpha, beta, sigma)) return MPL From d5544c984a6df50ce7e3285235247887aac4bdd6 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 10:46:49 -0400 Subject: [PATCH 21/49] Marginal products now use output elasticities. --- quantecon.egg-info/PKG-INFO | 12 +++++++++++ quantecon.egg-info/SOURCES.txt | 28 +++++++++++++++++++++++++ quantecon.egg-info/dependency_links.txt | 1 + quantecon.egg-info/top_level.txt | 1 + 4 files changed, 42 insertions(+) create mode 100644 quantecon.egg-info/PKG-INFO create mode 100644 quantecon.egg-info/SOURCES.txt create mode 100644 quantecon.egg-info/dependency_links.txt create mode 100644 quantecon.egg-info/top_level.txt diff --git a/quantecon.egg-info/PKG-INFO b/quantecon.egg-info/PKG-INFO new file mode 100644 index 000000000..2937664d4 --- /dev/null +++ b/quantecon.egg-info/PKG-INFO @@ -0,0 +1,12 @@ +Metadata-Version: 1.1 +Name: quantecon +Version: 0.1.3 +Summary: Code for quant-econ.net +Home-page: https://github.com/jstac/quant-econ +Author: Thomas J. Sargent and John Stachurski +Author-email: john.stachurski@gmail.com +License: UNKNOWN +Download-URL: https://github.com/jstac/quant-econ/tarball/0.1.3 +Description: UNKNOWN +Keywords: quantitative,economics +Platform: UNKNOWN diff --git a/quantecon.egg-info/SOURCES.txt b/quantecon.egg-info/SOURCES.txt new file mode 100644 index 000000000..baa063f31 --- /dev/null +++ b/quantecon.egg-info/SOURCES.txt @@ -0,0 +1,28 @@ +setup.cfg +quantecon/__init__.py +quantecon/asset_pricing.py +quantecon/career.py +quantecon/compute_fp.py +quantecon/discrete_rv.py +quantecon/ecdf.py +quantecon/estspec.py +quantecon/ifp.py +quantecon/jv.py +quantecon/kalman.py +quantecon/lae.py +quantecon/linproc.py +quantecon/lqcontrol.py +quantecon/lss.py +quantecon/lucastree.py +quantecon/mc_tools.py +quantecon/odu.py +quantecon/optgrowth.py +quantecon/quadsums.py +quantecon/rank_nullspace.py +quantecon/riccati.py +quantecon/robustlq.py +quantecon/tauchen.py +quantecon.egg-info/PKG-INFO +quantecon.egg-info/SOURCES.txt +quantecon.egg-info/dependency_links.txt +quantecon.egg-info/top_level.txt \ No newline at end of file diff --git a/quantecon.egg-info/dependency_links.txt b/quantecon.egg-info/dependency_links.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/quantecon.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/quantecon.egg-info/top_level.txt b/quantecon.egg-info/top_level.txt new file mode 100644 index 000000000..221c5c059 --- /dev/null +++ b/quantecon.egg-info/top_level.txt @@ -0,0 +1 @@ +quantecon From 35422b5c21784ecf7236536507c637830f9f1902 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 12:16:05 -0400 Subject: [PATCH 22/49] Marginal products now using output elasticity formulas. --- quantecon/ces.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 1519e652f..0ccfdaf02 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -39,7 +39,7 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): elif sigma < 1e-3: raise NotImplementedError else: - MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * + MPK = ((1 / K) * output_elasticity_capital(K, A, L, alpha, beta, sigma) * output(K, A, L, alpha, beta, sigma)) return MPK @@ -81,7 +81,7 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): elif sigma < 1e-3: raise NotImplementedError else: - MPL = ((beta * (A * L)**(rho - 1) * A / (alpha * K**rho + beta * (A * L)**rho)) * + MPL = ((1 / L) * output_elasticity_labor(K, A, L, alpha, beta, sigma) * output(K, A, L, alpha, beta, sigma)) return MPL From d27a8b5b0532b412588b85966f48d990dd643869 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 10:24:57 -0400 Subject: [PATCH 23/49] Added placeholder methods for each of the functions. --- quantecon/tests/test_ces.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 8be3673b3..5e9f29579 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -7,7 +7,19 @@ class CESTestSuite(unittest.TestCase): - pass + + def test_output(self): + """Test function for CES output.""" + raise NotImplementedError + + def test_marginal_product_capital(self): + """Test function for CES marginal product of capital.""" + raise NotImplementedError + + def test_marginal_product_labor(self): + """Test function for CES marginal product of labor.""" + raise NotImplementedError + if __name__ == '__main__': CESTest = unittest.TestLoader().loadTestsFromTestCase(CESTestSuite) From cc44568c7e72ad39abfeb4b462ca8a2f77876ee9 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 13:25:49 -0400 Subject: [PATCH 24/49] More detailed sketch of testing suite for ces.py module. --- quantecon/tests/test_ces.py | 101 +++++++++++++++++++++++++++++++++--- 1 file changed, 95 insertions(+), 6 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 5e9f29579..3c87a788a 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -1,5 +1,5 @@ """ -Test suite for ces.py +Testing suite for ces.py """ import unittest @@ -7,20 +7,109 @@ class CESTestSuite(unittest.TestCase): + """Base class for ces.py module tests.""" + + def test_marginal_product_capital(self): + """Test CES marginal product of capital.""" + raise NotImplementedError + + def test_marginal_product_labor(self): + """Test CES marginal product of labor.""" + raise NotImplementedError def test_output(self): - """Test function for CES output.""" + """Test CES output.""" + raise NotImplementedError + + def test_output_elasticity_capital(self): + """Test CES elasticity of output with respect to capital.""" + raise NotImplementedError + + def test_output_elasticity_labor(self): + """Test CES elasticity of output with respect to capital.""" raise NotImplementedError + +class CobbDouglasCase(CESTestSuite): + + sigma = 1.0 + def test_marginal_product_capital(self): - """Test function for CES marginal product of capital.""" + """Test CES marginal product of capital.""" raise NotImplementedError def test_marginal_product_labor(self): - """Test function for CES marginal product of labor.""" + """Test CES marginal product of labor.""" + raise NotImplementedError + + def test_output(self): + """Test CES output.""" + raise NotImplementedError + + def test_output_elasticity_capital(self): + """Test CES elasticity of output with respect to capital.""" + raise NotImplementedError + + def test_output_elasticity_labor(self): + """Test CES elasticity of output with respect to capital.""" + raise NotImplementedError + + +class LeontiefCase(CESTestSuite): + + sigma = 1e-6 + + def test_marginal_product_capital(self): + """Test CES marginal product of capital.""" + raise NotImplementedError + + def test_marginal_product_labor(self): + """Test CES marginal product of labor.""" + raise NotImplementedError + + def test_output(self): + """Test CES output.""" + raise NotImplementedError + + def test_output_elasticity_capital(self): + """Test CES elasticity of output with respect to capital.""" + raise NotImplementedError + + def test_output_elasticity_labor(self): + """Test CES elasticity of output with respect to capital.""" + raise NotImplementedError + + +class GeneralCESCase(CESTestSuite): + + def test_marginal_product_capital(self): + """Test CES marginal product of capital.""" + raise NotImplementedError + + def test_marginal_product_labor(self): + """Test CES marginal product of labor.""" + raise NotImplementedError + + def test_output(self): + """Test CES output.""" + raise NotImplementedError + + def test_output_elasticity_capital(self): + """Test CES elasticity of output with respect to capital.""" + raise NotImplementedError + + def test_output_elasticity_labor(self): + """Test CES elasticity of output with respect to capital.""" raise NotImplementedError if __name__ == '__main__': - CESTest = unittest.TestLoader().loadTestsFromTestCase(CESTestSuite) - unittest.TextTestRunner(verbosity=2).run(suite1) \ No newline at end of file + test_loader = unittest.TestLoader() + + cobb_douglas = test_loader.loadTestsFromTestCase(CobbDouglasCase) + leontief = test_loader.loadTestsFromTestCase(LeontiefCase) + general_ces = test_loader.loadTestsFromTestCase(GeneralCESCase) + + unittest.TextTestRunner(verbosity=2).run(cobb_douglas) + unittest.TextTestRunner(verbosity=2).run(leontief) + unittest.TextTestRunner(verbosity=2).run(general_ces) \ No newline at end of file From 141ec988c184a096cb30ef7dd82d64f00e23322c Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 14:14:39 -0400 Subject: [PATCH 25/49] Added the first test function. --- quantecon/tests/test_ces.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 3c87a788a..d5bf2c34c 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -3,7 +3,10 @@ """ import unittest -import ..ces + +from numpy import testing + +import ..ces as ces class CESTestSuite(unittest.TestCase): @@ -36,7 +39,19 @@ class CobbDouglasCase(CESTestSuite): def test_marginal_product_capital(self): """Test CES marginal product of capital.""" - raise NotImplementedError + # inputs + T = 100 + capital = np.repeat(4.0, T) + techology = np.ones(T) + labor = np.repeat(3.0, T) + + # CRTS test case + alpha = 0.5 + beta = 1 - alpha + expected_mpk = np.repeat(0.75, T) + actual_mpk = ces.marginal_product_capital(capital, techology, labor, + alpha, beta, self.sigma) + testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): """Test CES marginal product of labor.""" From 392bb63abb02741ac3539385c27ac35a8417457c Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 17 Jul 2014 14:31:01 -0400 Subject: [PATCH 26/49] Added the first test function...but getting an import error! --- quantecon/tests/test_ces.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index d5bf2c34c..4c9205490 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -6,7 +6,7 @@ from numpy import testing -import ..ces as ces +from ..ces import * class CESTestSuite(unittest.TestCase): From 11a8ec36cd5c8949cd2b04b01203c45ea12a1cd7 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 07:34:04 -0400 Subject: [PATCH 27/49] Changed Arguments to Parameters in docstrings. --- quantecon/ivp.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/quantecon/ivp.py b/quantecon/ivp.py index 57e9012c7..44cac3b18 100644 --- a/quantecon/ivp.py +++ b/quantecon/ivp.py @@ -47,8 +47,8 @@ def integrate(self, t0, y0, h=1.0, T=None, g=None, tol=None, """ Integrates the ODE given some initial condition. - Arguments - --------- + Parameters + ---------- t0 : float Initial condition for the independent variable. y0 : array_like (float, shape=(n,)) @@ -288,8 +288,8 @@ def interpolate(self, traj, ti, k=3, der=0, ext=0): """ Parametric B-spline interpolation in N-dimensions. - Arguments - --------- + Parameters + ---------- traj : array_like (float) Solution trajectory providing the data points for constructing the B-spline representation. @@ -335,8 +335,8 @@ def compare_trajectories(self, traj1, traj2): """ Return the element-wise absolute difference between two trajectories. - Arguments - --------- + Parameters + ---------- traj1 : array_like (float) Array containing a solution trajectory. traj2 : array_like (float) @@ -357,8 +357,8 @@ def get_l2_errors(self, traj1, traj2): Computes a measure of the difference between two trajectories using the :math: `L^2` norm. - Arguments - --------- + Parameters + ---------- traj1 : array_like (float) Array containing a solution trajectory. traj2 : array_like (float) @@ -378,8 +378,8 @@ def get_maximal_errors(self, traj1, traj2): Computes a measure of the distance between two trajectories using the :math:`L^{\infty}` norm. - Arguments - --------- + Parameters + ---------- traj1 : array_like (float) Array containing a solution trajectory. traj2 : array_like (float) From d2b26b44542f5b3f8f4a72f3ab2f825edb54e521 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 07:36:16 -0400 Subject: [PATCH 28/49] Changed Arguments to Parameters in docstrings. --- quantecon/ces.py | 20 ++++++++++---------- quantecon/solow.py | 24 ++++++++++++------------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 0ccfdaf02..c2bcac888 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -8,8 +8,8 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): Marginal product of capital for constant elasticity of substitution (CES) production function with labor augmenting technology. - Arguments - --------- + Parameters + ---------- K : array_like (float) Capital A : array_like (float) @@ -50,8 +50,8 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): Marginal product of labor for constant elasticity of substitution (CES) production function with labor augmenting technology. - Arguments - --------- + Parameters + ---------- K : array_like (float) Capital A : array_like (float) @@ -92,8 +92,8 @@ def output(K, A, L, alpha, beta, sigma): Constant elasticity of substitution (CES) production function with labor augmenting technology. - Arguments - --------- + Parameters + ---------- K : array_like (float) Capital A : array_like (float) @@ -133,8 +133,8 @@ def output_elasticity_capital(K, A, L, alpha, beta, sigma): Elasticity of output with respect to capital for the constant elasticity of substitution (CES) production function with labor augmenting technology. - Arguments - --------- + Parameters + ---------- K : array_like (float) Capital A : array_like (float) @@ -174,8 +174,8 @@ def output_elasticity_labor(K, A, L, alpha, beta, sigma): Elasticity of output with respect to labor for the constant elasticity of substitution (CES) production function with labor augmenting technology. - Arguments - --------- + Parameters + ---------- K : array_like (float) Capital A : array_like (float) diff --git a/quantecon/solow.py b/quantecon/solow.py index b92d236a7..85f030099 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -12,8 +12,8 @@ def __init__(self, k_dot, jacobian, params): """ Creates an instance of the Solow model. - Arguments - ---------- + Arttributs + ----------- k_dot : callable, ``k_dot(t, k, *params)`` Equation of motion for capital (per worker/effective worker). The independent variable, `t`, is time; `k`, is capital (per worker/ @@ -45,8 +45,8 @@ def ces_actual_investment(k, s, alpha, sigma): Total amount of output (per worker/effective worker) invested into the production of new capital. - Arguments - --------- + Parameters + ---------- k : array_like (float) Capital (per worker/effective worker). s : float @@ -74,8 +74,8 @@ def ces_break_even_investment(k, g, n, delta): Amount of investment required to maintain current levels of capital (per worker/effective worker). - Arguments - --------- + Parameters + ---------- k : array_like (float) Capital (per worker/effective worker). g : float @@ -102,8 +102,8 @@ def ces_jacobian(t, k, g, n, s, alpha, delta, sigma): Jacobian for the Solow model with constant elasticity of substitution (CES) production. - Arguments - --------- + Parameters + ---------- t : array_like (float) Time. k : array_like (float) @@ -142,8 +142,8 @@ def ces_k_dot(t, k, g, n, s, alpha, delta, sigma): Solow growth model with constant elasticity of substitution (CES) production function. - Arguments - --------- + Parameters + ---------- t : array_like (float) Time. k : array_like (float) @@ -179,8 +179,8 @@ def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): """ Analytic solution for the Solow model with Cobb-Douglas production. - Arguments - --------- + Parameters + ---------- k0 : float Initial value for capital (per worker/effective worker) t : array_like (float, shape=(T,)) From 305aa763319e283556ec2429aebe648e1f9d11fc Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 08:31:21 -0400 Subject: [PATCH 29/49] Test case for MPL identified a bug. Bug has been fixed. --- quantecon/ces.py | 2 +- quantecon/tests/test_ces.py | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index c2bcac888..da77c4e71 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -77,7 +77,7 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): # CES nests both Cobb-Douglas and Leontief functions if abs(rho) < 1e-3: - MPL = (1 - beta) * K**alpha * (A * L)**(beta - 1) + MPL = beta * K**alpha * (A * L)**(beta - 1) elif sigma < 1e-3: raise NotImplementedError else: diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 4c9205490..81a1bfb37 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -43,19 +43,31 @@ def test_marginal_product_capital(self): T = 100 capital = np.repeat(4.0, T) techology = np.ones(T) - labor = np.repeat(3.0, T) + labor = np.repeat(9.0, T) # CRTS test case alpha = 0.5 beta = 1 - alpha expected_mpk = np.repeat(0.75, T) - actual_mpk = ces.marginal_product_capital(capital, techology, labor, - alpha, beta, self.sigma) + actual_mpk = marginal_product_capital(capital, techology, labor, + alpha, beta, self.sigma) testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): """Test CES marginal product of labor.""" - raise NotImplementedError + # inputs + T = 100 + capital = np.repeat(8.0, T) + techology = np.ones(T) + labor = np.repeat(27.0, T) + + # CRTS test case + alpha = 1 / 3.0 + beta = 1 - alpha + expected_mpl = np.repeat(4.0 / 9.0, T) + actual_mpl = marginal_product_labor(capital, techology, labor, + alpha, beta, self.sigma) + testing.assert_almost_equal(expected_mpl, actual_mpl) def test_output(self): """Test CES output.""" From 0c2e5dacf58b73285f08bf837f62ab451a669a77 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 10:48:55 -0400 Subject: [PATCH 30/49] Testing identified another typo! --- quantecon/ces.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index da77c4e71..54c8f6664 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -77,7 +77,7 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): # CES nests both Cobb-Douglas and Leontief functions if abs(rho) < 1e-3: - MPL = beta * K**alpha * (A * L)**(beta - 1) + MPL = beta * K**alpha * (A * L)**(beta - 1) * A elif sigma < 1e-3: raise NotImplementedError else: From bebd11c512ff6dc5efeaea568744b8f60e8f97f7 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 10:55:49 -0400 Subject: [PATCH 31/49] Added test suites for Cobb-Douglas and General CES case. --- quantecon/tests/test_ces.py | 244 ++++++++++++++++++++++++++++++------ 1 file changed, 204 insertions(+), 40 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 81a1bfb37..72fa9d7a4 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -5,13 +5,16 @@ import unittest from numpy import testing +import sympy as sp from ..ces import * - class CESTestSuite(unittest.TestCase): """Base class for ces.py module tests.""" + def setUp(self): + raise NotImplementedError + def test_marginal_product_capital(self): """Test CES marginal product of capital.""" raise NotImplementedError @@ -35,51 +38,118 @@ def test_output_elasticity_labor(self): class CobbDouglasCase(CESTestSuite): - sigma = 1.0 + def setUp(self): + """Use SymPy to construct some functions for use in testing.""" + sp.var('K, A, L, alpha, beta, sigma') + + # compute symbolic expressions + _sp_output = K**alpha * (A * L)**beta + _sp_mpk = sp.diff(_sp_output, K) + _sp_mpl = sp.diff(_sp_output, L) + _sp_elasticity_YK = (K / _sp_output) * _sp_mpk + _sp_elasticity_YL = (L / _sp_output) * _sp_mpl + + # wrap SymPy expressions into callable NumPy funcs + args = (K, A, L, alpha, beta, sigma) + self.np_output = sp.lambdify(args, _sp_output, 'numpy') + self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') + self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') + self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') + self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') + + # create a grid of input values + T = 10 + eps = 1e-2 + capital_pts = np.linspace(eps, 10.0, T) + labor_pts = capital_pts + technology_pts = np.exp(capital_pts) + self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) + + # create a grid of parameter values + alpha_vals = np.linspace(eps, 1 - eps, T) + beta_vals = np.linspace(eps, 1 - eps, T) + sigma_vals = np.ones(T) + self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) def test_marginal_product_capital(self): - """Test CES marginal product of capital.""" - # inputs - T = 100 - capital = np.repeat(4.0, T) - techology = np.ones(T) - labor = np.repeat(9.0, T) - - # CRTS test case - alpha = 0.5 - beta = 1 - alpha - expected_mpk = np.repeat(0.75, T) - actual_mpk = marginal_product_capital(capital, techology, labor, - alpha, beta, self.sigma) + """Test Cobb-Douglas marginal product of capital.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_mpk = np.vectorize(marginal_product_capital) + + # conduct the test + expected_mpk = self.np_mpk(capital, technology, labor, + alpha, beta, sigma) + actual_mpk = test_mpk(capital, technology, labor, + alpha, beta, sigma) testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): - """Test CES marginal product of labor.""" - # inputs - T = 100 - capital = np.repeat(8.0, T) - techology = np.ones(T) - labor = np.repeat(27.0, T) - - # CRTS test case - alpha = 1 / 3.0 - beta = 1 - alpha - expected_mpl = np.repeat(4.0 / 9.0, T) - actual_mpl = marginal_product_labor(capital, techology, labor, - alpha, beta, self.sigma) + """Test Cobb-Douglas marginal product of labor.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_mpl = np.vectorize(marginal_product_labor) + + # conduct the test + expected_mpl = self.np_mpl(capital, technology, labor, + alpha, beta, sigma) + actual_mpl = test_mpl(capital, technology, labor, + alpha, beta, sigma) testing.assert_almost_equal(expected_mpl, actual_mpl) def test_output(self): - """Test CES output.""" - raise NotImplementedError + """Test Cobb-Douglas output.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_output = np.vectorize(output) + + # conduct the test + expected_output = self.np_output(capital, technology, labor, + alpha, beta, sigma) + actual_output = test_output(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_output, actual_output) def test_output_elasticity_capital(self): - """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + """Test Cobb-Douglas elasticity of output with respect to capital.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_elasticity = np.vectorize(output_elasticity_capital) + + # conduct the test + expected_elasticity = self.np_elasticity_YK(capital, technology, labor, + alpha, beta, sigma) + actual_elasticity = test_elasticity(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_elasticity, actual_elasticity) def test_output_elasticity_labor(self): - """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + """Test Cobb-Douglas elasticity of output with respect to labor.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_elasticity = np.vectorize(output_elasticity_labor) + + # conduct the test + expected_elasticity = self.np_elasticity_YL(capital, technology, labor, + alpha, beta, sigma) + actual_elasticity = test_elasticity(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_elasticity, actual_elasticity) class LeontiefCase(CESTestSuite): @@ -109,25 +179,119 @@ def test_output_elasticity_labor(self): class GeneralCESCase(CESTestSuite): + def setUp(self): + """Use SymPy to construct some functions for use in testing.""" + sp.var('K, A, L, alpha, beta, sigma') + rho = (sigma - 1) / sigma + + # compute symbolic expressions + _sp_output = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) + _sp_mpk = sp.diff(_sp_output, K) + _sp_mpl = sp.diff(_sp_output, L) + _sp_elasticity_YK = (K / _sp_output) * _sp_mpk + _sp_elasticity_YL = (L / _sp_output) * _sp_mpl + + # wrap SymPy expressions into callable NumPy funcs + args = (K, A, L, alpha, beta, sigma) + self.np_output = sp.lambdify(args, _sp_output, 'numpy') + self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') + self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') + self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') + self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') + + # create a grid of input values + T = 10 + eps = 1e-2 + capital_pts = np.linspace(eps, 10.0, T) + labor_pts = capital_pts + technology_pts = np.exp(capital_pts) + self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) + + # create a grid of parameter values + alpha_vals = np.linspace(eps, 1 - eps, T) + beta_vals = np.linspace(eps, 1 - eps, T) + sigma_vals = np.logspace(2, 2, T) + self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) + def test_marginal_product_capital(self): """Test CES marginal product of capital.""" - raise NotImplementedError + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_mpk = np.vectorize(marginal_product_capital) + + # conduct the test + expected_mpk = self.np_mpk(capital, technology, labor, + alpha, beta, sigma) + actual_mpk = test_mpk(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): """Test CES marginal product of labor.""" - raise NotImplementedError + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_mpl = np.vectorize(marginal_product_labor) + + # conduct the test + expected_mpl = self.np_mpl(capital, technology, labor, + alpha, beta, sigma) + actual_mpl = test_mpl(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_mpl, actual_mpl) def test_output(self): """Test CES output.""" - raise NotImplementedError + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_output = np.vectorize(output) + + # conduct the test + expected_output = self.np_output(capital, technology, labor, + alpha, beta, sigma) + actual_output = test_output(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_output, actual_output) def test_output_elasticity_capital(self): """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_elasticity = np.vectorize(output_elasticity_capital) + + # conduct the test + expected_elasticity = self.np_elasticity_YK(capital, technology, labor, + alpha, beta, sigma) + actual_elasticity = test_elasticity(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_elasticity, actual_elasticity) def test_output_elasticity_labor(self): - """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + """Test CES elasticity of output with respect to labor.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_elasticity = np.vectorize(output_elasticity_labor) + + # conduct the test + expected_elasticity = self.np_elasticity_YL(capital, technology, labor, + alpha, beta, sigma) + actual_elasticity = test_elasticity(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_elasticity, actual_elasticity) if __name__ == '__main__': From b5bf1f355b28e2ca86d1c0ec745c131548a0909e Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 11:01:35 -0400 Subject: [PATCH 32/49] Implemented MPK and MPL for the Leontief cases. --- quantecon/ces.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 54c8f6664..3d2f6c867 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -37,7 +37,7 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): if abs(rho) < 1e-3: MPK = alpha * K**(alpha - 1) * (A * L)**beta elif sigma < 1e-3: - raise NotImplementedError + MPK = np.where(alpha * K < beta * A * L, alpha, 0) else: MPK = ((1 / K) * output_elasticity_capital(K, A, L, alpha, beta, sigma) * output(K, A, L, alpha, beta, sigma)) @@ -79,7 +79,7 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): if abs(rho) < 1e-3: MPL = beta * K**alpha * (A * L)**(beta - 1) * A elif sigma < 1e-3: - raise NotImplementedError + MPL = np.where(beta * A * L < alpha * K, beta * A, 0) else: MPL = ((1 / L) * output_elasticity_labor(K, A, L, alpha, beta, sigma) * output(K, A, L, alpha, beta, sigma)) From 5ad984039e059aad3bfccb9442736f92ca97aad0 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 11:17:30 -0400 Subject: [PATCH 33/49] Added a bit of code for Leontief special case. --- quantecon/tests/test_ces.py | 112 ++++++++++++++++++++++++++++++++---- 1 file changed, 101 insertions(+), 11 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 72fa9d7a4..e9ddd28a0 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -154,28 +154,118 @@ def test_output_elasticity_labor(self): class LeontiefCase(CESTestSuite): - sigma = 1e-6 + def setUp(self): + """Use SymPy to construct some functions for use in testing.""" + sp.var('K, A, L, alpha, beta, sigma') + + # compute symbolic expressions + _sp_output = sp.Min(alpha * K**alpha, beta * A * L) + _sp_mpk = sp.diff(_sp_output, K) + _sp_mpl = sp.diff(_sp_output, L) + _sp_elasticity_YK = (K / _sp_output) * _sp_mpk + _sp_elasticity_YL = (L / _sp_output) * _sp_mpl + + # wrap SymPy expressions into callable NumPy funcs + args = (K, A, L, alpha, beta, sigma) + self.np_output = sp.lambdify(args, _sp_output, 'numpy') + self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') + self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') + self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') + self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') + + # create a grid of input values + T = 10 + eps = 1e-2 + capital_pts = np.linspace(eps, 10.0, T) + labor_pts = capital_pts + technology_pts = np.exp(capital_pts) + self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) + + # create a grid of parameter values + alpha_vals = np.linspace(eps, 1 - eps, T) + beta_vals = np.linspace(eps, 1 - eps, T) + sigma_vals = np.zeros(T) + self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) def test_marginal_product_capital(self): - """Test CES marginal product of capital.""" - raise NotImplementedError + """Test Cobb-Douglas marginal product of capital.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_mpk = np.vectorize(marginal_product_capital) + + # conduct the test + expected_mpk = self.np_mpk(capital, technology, labor, + alpha, beta, sigma) + actual_mpk = test_mpk(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): - """Test CES marginal product of labor.""" - raise NotImplementedError + """Test Cobb-Douglas marginal product of labor.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_mpl = np.vectorize(marginal_product_labor) + + # conduct the test + expected_mpl = self.np_mpl(capital, technology, labor, + alpha, beta, sigma) + actual_mpl = test_mpl(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_mpl, actual_mpl) def test_output(self): - """Test CES output.""" - raise NotImplementedError + """Test Cobb-Douglas output.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_output = np.vectorize(output) + + # conduct the test + expected_output = self.np_output(capital, technology, labor, + alpha, beta, sigma) + actual_output = test_output(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_output, actual_output) def test_output_elasticity_capital(self): - """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + """Test Cobb-Douglas elasticity of output with respect to capital.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_elasticity = np.vectorize(output_elasticity_capital) + + # conduct the test + expected_elasticity = self.np_elasticity_YK(capital, technology, labor, + alpha, beta, sigma) + actual_elasticity = test_elasticity(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_elasticity, actual_elasticity) def test_output_elasticity_labor(self): - """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + """Test Cobb-Douglas elasticity of output with respect to labor.""" + # unpack grids + capital, technology, labor = self.input_grid + alpha, beta, sigma = self.parameter_grid + + # vectorize original function to accept parameter arrays + test_elasticity = np.vectorize(output_elasticity_labor) + # conduct the test + expected_elasticity = self.np_elasticity_YL(capital, technology, labor, + alpha, beta, sigma) + actual_elasticity = test_elasticity(capital, technology, labor, + alpha, beta, sigma) + testing.assert_almost_equal(expected_elasticity, actual_elasticity) class GeneralCESCase(CESTestSuite): From 2793e9fd31f9a4c164729857dca70aab9e935cf1 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 11:29:32 -0400 Subject: [PATCH 34/49] Now using np.isclose instead of abs to test for special cases. --- quantecon/ces.py | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 3d2f6c867..2a23290f9 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -31,12 +31,10 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): Marginal product of capital. """ - rho = (sigma - 1) / sigma - # CES nests both Cobb-Douglas and Leontief functions - if abs(rho) < 1e-3: + if np.isclose(sigma, 1.0): MPK = alpha * K**(alpha - 1) * (A * L)**beta - elif sigma < 1e-3: + elif np.isclose(sigma, 0.0): MPK = np.where(alpha * K < beta * A * L, alpha, 0) else: MPK = ((1 / K) * output_elasticity_capital(K, A, L, alpha, beta, sigma) * @@ -73,12 +71,10 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): Marginal product of labor. """ - rho = (sigma - 1) / sigma - # CES nests both Cobb-Douglas and Leontief functions - if abs(rho) < 1e-3: + if np.isclose(sigma, 1.0): MPL = beta * K**alpha * (A * L)**(beta - 1) * A - elif sigma < 1e-3: + elif np.isclose(sigma, 0.0): MPL = np.where(beta * A * L < alpha * K, beta * A, 0) else: MPL = ((1 / L) * output_elasticity_labor(K, A, L, alpha, beta, sigma) * @@ -115,14 +111,13 @@ def output(K, A, L, alpha, beta, sigma): Output """ - rho = (sigma - 1) / sigma - # CES nests both Cobb-Douglas and Leontief functions - if abs(rho) < 1e-3: + if np.isclose(sigma, 1.0): Y = K**alpha * (A * L)**beta - elif sigma < 1e-3: + elif np.isclose(sigma, 0.0): Y = np.minimum(alpha * K, beta * A * L) else: + rho = (sigma - 1) / sigma Y = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) return Y @@ -156,14 +151,13 @@ def output_elasticity_capital(K, A, L, alpha, beta, sigma): Output elasticity with respect to capital. """ - rho = (sigma - 1) / sigma - # CES nests both Cobb-Douglas and Leontief functions - if abs(rho) < 1e-3: + if np.isclose(sigma, 1.0): epsilon_YK = alpha - elif sigma < 1e-3: + elif np.isclose(sigma, 0.0): raise NotImplementedError else: + rho = (sigma - 1) / sigma epsilon_YK = alpha * K**rho / (alpha * K**rho + beta * (A * L)**rho) return epsilon_YK @@ -197,14 +191,13 @@ def output_elasticity_labor(K, A, L, alpha, beta, sigma): Output elasticity with respect to labor. """ - rho = (sigma - 1) / sigma - # CES nests both Cobb-Douglas and Leontief functions - if abs(rho) < 1e-3: + if np.isclose(sigma, 1.0): epsilon_YL = beta - elif sigma < 1e-3: + elif np.isclose(sigma, 0.0): raise NotImplementedError else: + rho = (sigma - 1) / sigma epsilon_YL = beta * (A * L)**rho / (alpha * K**rho + beta * (A * L)**rho) return epsilon_YL \ No newline at end of file From 2a0f61b0b235c412f8a4d66a4c8166e0a8f077e6 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 12:16:37 -0400 Subject: [PATCH 35/49] Functioning test cases for 3/5 parts of the Leontief case. --- quantecon/tests/test_ces.py | 40 ++++++++++--------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index e9ddd28a0..178a8360e 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -155,24 +155,7 @@ def test_output_elasticity_labor(self): class LeontiefCase(CESTestSuite): def setUp(self): - """Use SymPy to construct some functions for use in testing.""" - sp.var('K, A, L, alpha, beta, sigma') - - # compute symbolic expressions - _sp_output = sp.Min(alpha * K**alpha, beta * A * L) - _sp_mpk = sp.diff(_sp_output, K) - _sp_mpl = sp.diff(_sp_output, L) - _sp_elasticity_YK = (K / _sp_output) * _sp_mpk - _sp_elasticity_YL = (L / _sp_output) * _sp_mpl - - # wrap SymPy expressions into callable NumPy funcs - args = (K, A, L, alpha, beta, sigma) - self.np_output = sp.lambdify(args, _sp_output, 'numpy') - self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') - self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') - self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') - self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') - + """Create a grid of inputs and parameters over which to iterate.""" # create a grid of input values T = 10 eps = 1e-2 @@ -188,7 +171,7 @@ def setUp(self): self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) def test_marginal_product_capital(self): - """Test Cobb-Douglas marginal product of capital.""" + """Test Leontief marginal product of capital.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -197,14 +180,14 @@ def test_marginal_product_capital(self): test_mpk = np.vectorize(marginal_product_capital) # conduct the test - expected_mpk = self.np_mpk(capital, technology, labor, - alpha, beta, sigma) + expected_mpk = np.where(alpha * capital < beta * technology * labor, + alpha, 0.0) actual_mpk = test_mpk(capital, technology, labor, alpha, beta, sigma) testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): - """Test Cobb-Douglas marginal product of labor.""" + """Test Leontief marginal product of labor.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -213,14 +196,14 @@ def test_marginal_product_labor(self): test_mpl = np.vectorize(marginal_product_labor) # conduct the test - expected_mpl = self.np_mpl(capital, technology, labor, - alpha, beta, sigma) + expected_mpl = np.where(beta * technology * labor < alpha * capital, + beta * technology, 0.0) actual_mpl = test_mpl(capital, technology, labor, alpha, beta, sigma) testing.assert_almost_equal(expected_mpl, actual_mpl) def test_output(self): - """Test Cobb-Douglas output.""" + """Test Leontief output.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -229,14 +212,13 @@ def test_output(self): test_output = np.vectorize(output) # conduct the test - expected_output = self.np_output(capital, technology, labor, - alpha, beta, sigma) + expected_output = np.minimum(alpha * capital, beta * technology * labor) actual_output = test_output(capital, technology, labor, alpha, beta, sigma) testing.assert_almost_equal(expected_output, actual_output) def test_output_elasticity_capital(self): - """Test Cobb-Douglas elasticity of output with respect to capital.""" + """Test Leontief elasticity of output with respect to capital.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -252,7 +234,7 @@ def test_output_elasticity_capital(self): testing.assert_almost_equal(expected_elasticity, actual_elasticity) def test_output_elasticity_labor(self): - """Test Cobb-Douglas elasticity of output with respect to labor.""" + """Test Leontief elasticity of output with respect to labor.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid From ba67d7c3dacf4f11e4cb98c652e4ecbb15507a7e Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 12:25:36 -0400 Subject: [PATCH 36/49] Output elasticities now make use of marginal product formulas. --- quantecon/ces.py | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/quantecon/ces.py b/quantecon/ces.py index 2a23290f9..9b932c41e 100644 --- a/quantecon/ces.py +++ b/quantecon/ces.py @@ -37,7 +37,8 @@ def marginal_product_capital(K, A, L, alpha, beta, sigma): elif np.isclose(sigma, 0.0): MPK = np.where(alpha * K < beta * A * L, alpha, 0) else: - MPK = ((1 / K) * output_elasticity_capital(K, A, L, alpha, beta, sigma) * + rho = (sigma - 1) / sigma + MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * output(K, A, L, alpha, beta, sigma)) return MPK @@ -77,7 +78,8 @@ def marginal_product_labor(K, A, L, alpha, beta, sigma): elif np.isclose(sigma, 0.0): MPL = np.where(beta * A * L < alpha * K, beta * A, 0) else: - MPL = ((1 / L) * output_elasticity_labor(K, A, L, alpha, beta, sigma) * + rho = (sigma - 1) / sigma + MPL = ((beta * (A * L)**(rho - 1) * A / (alpha * K**rho + beta * (A * L)**rho)) * output(K, A, L, alpha, beta, sigma)) return MPL @@ -151,15 +153,8 @@ def output_elasticity_capital(K, A, L, alpha, beta, sigma): Output elasticity with respect to capital. """ - # CES nests both Cobb-Douglas and Leontief functions - if np.isclose(sigma, 1.0): - epsilon_YK = alpha - elif np.isclose(sigma, 0.0): - raise NotImplementedError - else: - rho = (sigma - 1) / sigma - epsilon_YK = alpha * K**rho / (alpha * K**rho + beta * (A * L)**rho) - + Y = output(K, A, L, alpha, beta, sigma) + epsilon_YK = (K / Y) * marginal_product_capital(K, A, L, alpha, beta, sigma) return epsilon_YK @@ -191,13 +186,6 @@ def output_elasticity_labor(K, A, L, alpha, beta, sigma): Output elasticity with respect to labor. """ - # CES nests both Cobb-Douglas and Leontief functions - if np.isclose(sigma, 1.0): - epsilon_YL = beta - elif np.isclose(sigma, 0.0): - raise NotImplementedError - else: - rho = (sigma - 1) / sigma - epsilon_YL = beta * (A * L)**rho / (alpha * K**rho + beta * (A * L)**rho) - + Y = output(K, A, L, alpha, beta, sigma) + epsilon_YL = (L / Y) * marginal_product_labor(K, A, L, alpha, beta, sigma) return epsilon_YL \ No newline at end of file From 2ed0fdff3a3ed285eeb0def6009c539c2579072e Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 18 Jul 2014 12:40:46 -0400 Subject: [PATCH 37/49] Finished test suite for ces.py module. --- quantecon/tests/test_ces.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 178a8360e..95e59570c 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -225,10 +225,14 @@ def test_output_elasticity_capital(self): # vectorize original function to accept parameter arrays test_elasticity = np.vectorize(output_elasticity_capital) + test_output = np.vectorize(output) + test_mpk = np.vectorize(marginal_product_capital) # conduct the test - expected_elasticity = self.np_elasticity_YK(capital, technology, labor, - alpha, beta, sigma) + K = capital + Y = test_output(capital, technology, labor, alpha, beta, sigma) + MPK = test_mpk(capital, technology, labor, alpha, beta, sigma) + expected_elasticity = (K / Y) * MPK actual_elasticity = test_elasticity(capital, technology, labor, alpha, beta, sigma) testing.assert_almost_equal(expected_elasticity, actual_elasticity) @@ -241,10 +245,14 @@ def test_output_elasticity_labor(self): # vectorize original function to accept parameter arrays test_elasticity = np.vectorize(output_elasticity_labor) + test_output = np.vectorize(output) + test_mpl = np.vectorize(marginal_product_labor) # conduct the test - expected_elasticity = self.np_elasticity_YL(capital, technology, labor, - alpha, beta, sigma) + L = labor + Y = test_output(capital, technology, labor, alpha, beta, sigma) + MPL = test_mpl(capital, technology, labor, alpha, beta, sigma) + expected_elasticity = (L / Y) * MPL actual_elasticity = test_elasticity(capital, technology, labor, alpha, beta, sigma) testing.assert_almost_equal(expected_elasticity, actual_elasticity) From f8d3b731fd2681a4db8c0cfd1672109c9cd80d63 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Mon, 21 Jul 2014 17:16:45 -0400 Subject: [PATCH 38/49] Compare trajectories now just looks at elementwise difference. --- quantecon/ivp.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/quantecon/ivp.py b/quantecon/ivp.py index 44cac3b18..8998771f3 100644 --- a/quantecon/ivp.py +++ b/quantecon/ivp.py @@ -333,24 +333,24 @@ def interpolate(self, traj, ti, k=3, der=0, ext=0): def compare_trajectories(self, traj1, traj2): """ - Return the element-wise absolute difference between two trajectories. + Return the element-wise difference between two trajectories. Parameters ---------- - traj1 : array_like (float) + traj1 : array_like (float, shape=(T, N+1)) Array containing a solution trajectory. - traj2 : array_like (float) + traj2 : array_like (float, shape=(T, N+1)) Array containing a solution trajectory. Returns ------- abs_diff: array_like (float) - Array containing the element-wise absolute difference between - traj1 and traj2. + Array containing the element-wise difference between traj1 and + traj2. """ - abs_diff = np.abs(traj1[:, 1:] - traj2[:, 1:]) - return abs_diff + diff = traj1[:, 1:] - traj2[:, 1:] + return diff def get_l2_errors(self, traj1, traj2): """ @@ -391,5 +391,5 @@ def get_maximal_errors(self, traj1, traj2): Maximal difference between two trajectories. """ - maximal_error = np.max(self.compare_trajectories(traj1, traj2)) + maximal_error = np.max(np.abs(self.compare_trajectories(traj1, traj2))) return maximal_error From 636e8ea01bb93e3fa6b2347aeae67a27bb5dfd8f Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Mon, 21 Jul 2014 17:20:01 -0400 Subject: [PATCH 39/49] Changed interface to the cobb_douglas_analtyic solution. --- quantecon/solow.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/quantecon/solow.py b/quantecon/solow.py index 85f030099..851c57a86 100644 --- a/quantecon/solow.py +++ b/quantecon/solow.py @@ -175,16 +175,16 @@ def ces_k_dot(t, k, g, n, s, alpha, delta, sigma): return k_dot -def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): +def cobb_douglas_analytic_solution(t, k0, g, n, s, alpha, delta, sigma=1.0): """ Analytic solution for the Solow model with Cobb-Douglas production. Parameters ---------- - k0 : float - Initial value for capital (per worker/effective worker) t : array_like (float, shape=(T,)) Array of points at which the solution is desired. + k0 : float + Initial value for capital (per worker/effective worker) g : float Growth rate of technology. n : float @@ -197,6 +197,10 @@ def cobb_douglas_analytic_solution(k0, t, g, n, s, alpha, delta): delta : float Depreciation rate of physical capital. Must satisfy :math:`0 < \delta`. + sigma : float, optional(default=1.0) + Elasticity of substitution between capital and effective labor in + production. Must satisfy :math:`\sigma=1.0` in order to have + Cobb-Douglas production. Returns ------- From 87abd3dea4d2195c4da1c5476c18bec4445573cb Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Mon, 21 Jul 2014 15:42:49 -0400 Subject: [PATCH 40/49] Added a base class for IVP tests. --- quantecon/tests/test_ivp.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py index ab7dabe4d..4a36b1d0c 100644 --- a/quantecon/tests/test_ivp.py +++ b/quantecon/tests/test_ivp.py @@ -3,11 +3,25 @@ """ import unittest -import ..ivp + +from ..ivp import * +from ..solow import * class IVPTestSuite(unittest.TestCase): - pass + """Base class for ivp.py module tests.""" + + def setUp(self): + raise NotImplementedError + + def test_integrate(self): + """Test ODE integration.""" + raise NotImplementedError + + def test_interpolate(self): + """Test B_splien interpolation.""" + raise NotImplementedError + if __name__ == '__main__': IVPTest = unittest.TestLoader().loadTestsFromTestCase(IVPTestSuite) From d70a8aeba1827f61e40ddad7a883aa100673e7cd Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Mon, 21 Jul 2014 15:43:29 -0400 Subject: [PATCH 41/49] Fixed a small typo in docstrings. --- quantecon/tests/test_ivp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py index 4a36b1d0c..09d33c89b 100644 --- a/quantecon/tests/test_ivp.py +++ b/quantecon/tests/test_ivp.py @@ -19,7 +19,7 @@ def test_integrate(self): raise NotImplementedError def test_interpolate(self): - """Test B_splien interpolation.""" + """Test B_spline interpolation.""" raise NotImplementedError From 2b84585a1086b2433e8975a45e8030c910b3b7b7 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Mon, 21 Jul 2014 17:27:51 -0400 Subject: [PATCH 42/49] Started a testing example for IVP class. --- quantecon/tests/test_ivp.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py index 09d33c89b..e5d4d2aec 100644 --- a/quantecon/tests/test_ivp.py +++ b/quantecon/tests/test_ivp.py @@ -4,6 +4,8 @@ """ import unittest +from numpy import testing + from ..ivp import * from ..solow import * @@ -23,6 +25,36 @@ def test_interpolate(self): raise NotImplementedError +class SolowModelCase(IVPTestSuite): + + def setUp(self): + # specify some parameters (g, n, s, alpha, delta, sigma) + params = (0.02, 0.02, 0.15, 0.33, 0.04, 1.0) + + # define the initial value problem (IVP) + self.ivp = IVP(f=ces_k_dot, jac=ces_jacobian, args=params) + + def test_integrate(self): + """Test ODE integration.""" + t0 = 0.0 + k0 = 0.5 + + traj = self.ivp.integrate(t0, k0, h=1.0, T=10.0, integrator='dopri5') + + expected_sol = cobb_douglas_analytic_solution(traj[:0], k0, *self.ivp.args) + actual_sol = traj[:, 1] + + testing.assert_almost_equal(expected_sol, actual_sol) + + +class SpenceModelCase(IVPTestSuite): + pass + + +class PredatorPreyModelCase(IVPTestSuite): + pass + + if __name__ == '__main__': - IVPTest = unittest.TestLoader().loadTestsFromTestCase(IVPTestSuite) - unittest.TextTestRunner(verbosity=2).run(suite1) \ No newline at end of file + SolowTest = unittest.TestLoader().loadTestsFromTestCase(SolowModelCase) + unittest.TextTestRunner(verbosity=2).run(SolowTest) \ No newline at end of file From 8e743e6bd87aa1ce57e2499575aa63f48de0fb98 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 31 Jul 2014 08:45:40 +0100 Subject: [PATCH 43/49] Added a basic test function for B-Spline interpolation. --- quantecon/tests/test_ivp.py | 52 ++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py index e5d4d2aec..5921526d1 100644 --- a/quantecon/tests/test_ivp.py +++ b/quantecon/tests/test_ivp.py @@ -36,15 +36,59 @@ def setUp(self): def test_integrate(self): """Test ODE integration.""" + # analytic test case using Cobb-Douglas production technology. t0 = 0.0 k0 = 0.5 - traj = self.ivp.integrate(t0, k0, h=1.0, T=10.0, integrator='dopri5') + # tighten tolerances so tests don't file due to numerical issues + kwargs = {'atol': 1e-12, 'rtol': 1e-9} - expected_sol = cobb_douglas_analytic_solution(traj[:0], k0, *self.ivp.args) - actual_sol = traj[:, 1] + integrators = ['dopri5', 'dop853', 'vode', 'lsoda'] - testing.assert_almost_equal(expected_sol, actual_sol) + for integrator in integrators: + + tmp_numeric_traj = self.ivp.integrate(t0, k0, h=1e-1, T=100.0, + integrator=integrator, + **kwargs) + + tmp_grid_pts = tmp_numeric_traj[:, 0] + tmp_analytic_traj = cobb_douglas_analytic_solution(tmp_grid_pts, + k0, + *self.ivp.args) + + expected_sol = tmp_analytic_traj[:, 1] + actual_sol = tmp_numeric_traj[:, 1] + + testing.assert_almost_equal(expected_sol, actual_sol) + + def test_interpolate(self): + """Test B-spline interpolation.""" + # analytic test case using Cobb-Douglas production technology. + t0 = 0.0 + k0 = 0.5 + + # tighten tolerances so tests don't file due to numerical issues + kwargs = {'atol': 1e-12, 'rtol': 1e-9} + + integrators = ['dopri5', 'dop853', 'vode', 'lsoda'] + + for integrator in integrators: + + tmp_numeric_traj = self.ivp.integrate(t0, k0, h=1e-1, T=100.0, + integrator=integrator, + **kwargs) + T = tmp_numeric_traj[:, 0][-1] + tmp_grid_pts = np.linspace(t0, T, 1000) + + tmp_interp_traj = self.ivp.interpolate(tmp_numeric_traj, tmp_grid_pts, k=3) + tmp_analytic_traj = cobb_douglas_analytic_solution(tmp_grid_pts, + k0, + *self.ivp.args) + + expected_sol = tmp_analytic_traj[:, 1] + actual_sol = tmp_interp_traj[:, 1] + + testing.assert_almost_equal(expected_sol, actual_sol) class SpenceModelCase(IVPTestSuite): From 720cdee9a500e9c6e3941465c7beeff4f9c59fc1 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 31 Jul 2014 09:34:54 +0100 Subject: [PATCH 44/49] Added a couple of extra lines. --- quantecon/tests/test_ces.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 95e59570c..51d6617ea 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -9,6 +9,7 @@ from ..ces import * + class CESTestSuite(unittest.TestCase): """Base class for ces.py module tests.""" @@ -257,6 +258,7 @@ def test_output_elasticity_labor(self): alpha, beta, sigma) testing.assert_almost_equal(expected_elasticity, actual_elasticity) + class GeneralCESCase(CESTestSuite): def setUp(self): From fa6674511e7516d0f7c89a90c03a9026bbc64abd Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 31 Jul 2014 09:37:27 +0100 Subject: [PATCH 45/49] Removed raise NotImplementedError, replace with pass. --- quantecon/tests/test_ces.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 51d6617ea..ed37a4b90 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -14,27 +14,27 @@ class CESTestSuite(unittest.TestCase): """Base class for ces.py module tests.""" def setUp(self): - raise NotImplementedError + pass def test_marginal_product_capital(self): """Test CES marginal product of capital.""" - raise NotImplementedError + pass def test_marginal_product_labor(self): """Test CES marginal product of labor.""" - raise NotImplementedError + pass def test_output(self): """Test CES output.""" - raise NotImplementedError + pass def test_output_elasticity_capital(self): """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + pass def test_output_elasticity_labor(self): """Test CES elasticity of output with respect to capital.""" - raise NotImplementedError + pass class CobbDouglasCase(CESTestSuite): From 15a1b5b94b10fb1ddbc23a4db422380794779580 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 31 Jul 2014 15:59:25 +0100 Subject: [PATCH 46/49] Got rid of interface/base class. Now individual cases inherit from general CES case. --- quantecon/tests/test_ces.py | 199 +++++++++--------------------------- 1 file changed, 46 insertions(+), 153 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index ed37a4b90..60541bac4 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -10,41 +10,15 @@ from ..ces import * -class CESTestSuite(unittest.TestCase): - """Base class for ces.py module tests.""" - - def setUp(self): - pass - - def test_marginal_product_capital(self): - """Test CES marginal product of capital.""" - pass - - def test_marginal_product_labor(self): - """Test CES marginal product of labor.""" - pass - - def test_output(self): - """Test CES output.""" - pass - - def test_output_elasticity_capital(self): - """Test CES elasticity of output with respect to capital.""" - pass - - def test_output_elasticity_labor(self): - """Test CES elasticity of output with respect to capital.""" - pass - - -class CobbDouglasCase(CESTestSuite): +class GeneralCESCase(unittest.TestCase): def setUp(self): """Use SymPy to construct some functions for use in testing.""" sp.var('K, A, L, alpha, beta, sigma') + rho = (sigma - 1) / sigma # compute symbolic expressions - _sp_output = K**alpha * (A * L)**beta + _sp_output = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) _sp_mpk = sp.diff(_sp_output, K) _sp_mpl = sp.diff(_sp_output, L) _sp_elasticity_YK = (K / _sp_output) * _sp_mpk @@ -69,11 +43,11 @@ def setUp(self): # create a grid of parameter values alpha_vals = np.linspace(eps, 1 - eps, T) beta_vals = np.linspace(eps, 1 - eps, T) - sigma_vals = np.ones(T) + sigma_vals = np.logspace(2, 2, T) self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) def test_marginal_product_capital(self): - """Test Cobb-Douglas marginal product of capital.""" + """Test CES marginal product of capital.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -89,7 +63,7 @@ def test_marginal_product_capital(self): testing.assert_almost_equal(expected_mpk, actual_mpk) def test_marginal_product_labor(self): - """Test Cobb-Douglas marginal product of labor.""" + """Test CES marginal product of labor.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -105,7 +79,7 @@ def test_marginal_product_labor(self): testing.assert_almost_equal(expected_mpl, actual_mpl) def test_output(self): - """Test Cobb-Douglas output.""" + """Test CES output.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -121,7 +95,7 @@ def test_output(self): testing.assert_almost_equal(expected_output, actual_output) def test_output_elasticity_capital(self): - """Test Cobb-Douglas elasticity of output with respect to capital.""" + """Test CES elasticity of output with respect to capital.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -137,7 +111,7 @@ def test_output_elasticity_capital(self): testing.assert_almost_equal(expected_elasticity, actual_elasticity) def test_output_elasticity_labor(self): - """Test Cobb-Douglas elasticity of output with respect to labor.""" + """Test CES elasticity of output with respect to labor.""" # unpack grids capital, technology, labor = self.input_grid alpha, beta, sigma = self.parameter_grid @@ -153,7 +127,43 @@ def test_output_elasticity_labor(self): testing.assert_almost_equal(expected_elasticity, actual_elasticity) -class LeontiefCase(CESTestSuite): +class CobbDouglasCase(GeneralCESCase): + + def setUp(self): + """Use SymPy to construct some functions for use in testing.""" + sp.var('K, A, L, alpha, beta, sigma') + + # compute symbolic expressions + _sp_output = K**alpha * (A * L)**beta + _sp_mpk = sp.diff(_sp_output, K) + _sp_mpl = sp.diff(_sp_output, L) + _sp_elasticity_YK = (K / _sp_output) * _sp_mpk + _sp_elasticity_YL = (L / _sp_output) * _sp_mpl + + # wrap SymPy expressions into callable NumPy funcs + args = (K, A, L, alpha, beta, sigma) + self.np_output = sp.lambdify(args, _sp_output, 'numpy') + self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') + self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') + self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') + self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') + + # create a grid of input values + T = 10 + eps = 1e-2 + capital_pts = np.linspace(eps, 10.0, T) + labor_pts = capital_pts + technology_pts = np.exp(capital_pts) + self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) + + # create a grid of parameter values + alpha_vals = np.linspace(eps, 1 - eps, T) + beta_vals = np.linspace(eps, 1 - eps, T) + sigma_vals = np.ones(T) + self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) + + +class LeontiefCase(GeneralCESCase): def setUp(self): """Create a grid of inputs and parameters over which to iterate.""" @@ -259,123 +269,6 @@ def test_output_elasticity_labor(self): testing.assert_almost_equal(expected_elasticity, actual_elasticity) -class GeneralCESCase(CESTestSuite): - - def setUp(self): - """Use SymPy to construct some functions for use in testing.""" - sp.var('K, A, L, alpha, beta, sigma') - rho = (sigma - 1) / sigma - - # compute symbolic expressions - _sp_output = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) - _sp_mpk = sp.diff(_sp_output, K) - _sp_mpl = sp.diff(_sp_output, L) - _sp_elasticity_YK = (K / _sp_output) * _sp_mpk - _sp_elasticity_YL = (L / _sp_output) * _sp_mpl - - # wrap SymPy expressions into callable NumPy funcs - args = (K, A, L, alpha, beta, sigma) - self.np_output = sp.lambdify(args, _sp_output, 'numpy') - self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') - self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') - self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') - self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') - - # create a grid of input values - T = 10 - eps = 1e-2 - capital_pts = np.linspace(eps, 10.0, T) - labor_pts = capital_pts - technology_pts = np.exp(capital_pts) - self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) - - # create a grid of parameter values - alpha_vals = np.linspace(eps, 1 - eps, T) - beta_vals = np.linspace(eps, 1 - eps, T) - sigma_vals = np.logspace(2, 2, T) - self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) - - def test_marginal_product_capital(self): - """Test CES marginal product of capital.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_mpk = np.vectorize(marginal_product_capital) - - # conduct the test - expected_mpk = self.np_mpk(capital, technology, labor, - alpha, beta, sigma) - actual_mpk = test_mpk(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_mpk, actual_mpk) - - def test_marginal_product_labor(self): - """Test CES marginal product of labor.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_mpl = np.vectorize(marginal_product_labor) - - # conduct the test - expected_mpl = self.np_mpl(capital, technology, labor, - alpha, beta, sigma) - actual_mpl = test_mpl(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_mpl, actual_mpl) - - def test_output(self): - """Test CES output.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_output = np.vectorize(output) - - # conduct the test - expected_output = self.np_output(capital, technology, labor, - alpha, beta, sigma) - actual_output = test_output(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_output, actual_output) - - def test_output_elasticity_capital(self): - """Test CES elasticity of output with respect to capital.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_elasticity = np.vectorize(output_elasticity_capital) - - # conduct the test - expected_elasticity = self.np_elasticity_YK(capital, technology, labor, - alpha, beta, sigma) - actual_elasticity = test_elasticity(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_elasticity, actual_elasticity) - - def test_output_elasticity_labor(self): - """Test CES elasticity of output with respect to labor.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_elasticity = np.vectorize(output_elasticity_labor) - - # conduct the test - expected_elasticity = self.np_elasticity_YL(capital, technology, labor, - alpha, beta, sigma) - actual_elasticity = test_elasticity(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_elasticity, actual_elasticity) - - if __name__ == '__main__': test_loader = unittest.TestLoader() From 37691979163dc0e4d5a81c0b1ce21172f83927ec Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Thu, 31 Jul 2014 16:02:22 +0100 Subject: [PATCH 47/49] Got rid of if/main block. --- quantecon/tests/test_ces.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py index 60541bac4..3a96b9f92 100644 --- a/quantecon/tests/test_ces.py +++ b/quantecon/tests/test_ces.py @@ -267,15 +267,3 @@ def test_output_elasticity_labor(self): actual_elasticity = test_elasticity(capital, technology, labor, alpha, beta, sigma) testing.assert_almost_equal(expected_elasticity, actual_elasticity) - - -if __name__ == '__main__': - test_loader = unittest.TestLoader() - - cobb_douglas = test_loader.loadTestsFromTestCase(CobbDouglasCase) - leontief = test_loader.loadTestsFromTestCase(LeontiefCase) - general_ces = test_loader.loadTestsFromTestCase(GeneralCESCase) - - unittest.TextTestRunner(verbosity=2).run(cobb_douglas) - unittest.TextTestRunner(verbosity=2).run(leontief) - unittest.TextTestRunner(verbosity=2).run(general_ces) \ No newline at end of file From fa01b0cb99da3c86df38dee694ff68670827ace8 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Sat, 9 Aug 2014 21:11:02 +0100 Subject: [PATCH 48/49] Files should not have been commited to master. --- quantecon/ces.py | 191 ---------------- quantecon/ivp.py | 395 ---------------------------------- quantecon/solow.py | 221 ------------------- quantecon/tests/test_ces.py | 269 ----------------------- quantecon/tests/test_ivp.py | 104 --------- quantecon/tests/test_solow.py | 14 -- 6 files changed, 1194 deletions(-) delete mode 100644 quantecon/ces.py delete mode 100644 quantecon/ivp.py delete mode 100644 quantecon/solow.py delete mode 100644 quantecon/tests/test_ces.py delete mode 100644 quantecon/tests/test_ivp.py delete mode 100644 quantecon/tests/test_solow.py diff --git a/quantecon/ces.py b/quantecon/ces.py deleted file mode 100644 index 9b932c41e..000000000 --- a/quantecon/ces.py +++ /dev/null @@ -1,191 +0,0 @@ -from __future__ import division - -import numpy as np - - -def marginal_product_capital(K, A, L, alpha, beta, sigma): - """ - Marginal product of capital for constant elasticity of substitution (CES) - production function with labor augmenting technology. - - Parameters - ---------- - K : array_like (float) - Capital - A : array_like (float) - Technology - L : array_like (float) - Labor - alpha : float - Importance of capital in production. Must satisfy :math:`0 < \alpha`. - beta : float - Importance of effective labor in production. Must satisfy - :math:`0 < \beta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - MPK : array_like (float) - Marginal product of capital. - - """ - # CES nests both Cobb-Douglas and Leontief functions - if np.isclose(sigma, 1.0): - MPK = alpha * K**(alpha - 1) * (A * L)**beta - elif np.isclose(sigma, 0.0): - MPK = np.where(alpha * K < beta * A * L, alpha, 0) - else: - rho = (sigma - 1) / sigma - MPK = ((alpha * K**(rho - 1) / (alpha * K**rho + beta * (A * L)**rho)) * - output(K, A, L, alpha, beta, sigma)) - - return MPK - - -def marginal_product_labor(K, A, L, alpha, beta, sigma): - """ - Marginal product of labor for constant elasticity of substitution (CES) - production function with labor augmenting technology. - - Parameters - ---------- - K : array_like (float) - Capital - A : array_like (float) - Technology - L : array_like (float) - Labor - alpha : float - Importance of capital in production. Must satisfy :math:`0 < \alpha`. - beta : float - Importance of effective labor in production. Must satisfy - :math:`0 < \beta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - MPL : array_like (float) - Marginal product of labor. - - """ - # CES nests both Cobb-Douglas and Leontief functions - if np.isclose(sigma, 1.0): - MPL = beta * K**alpha * (A * L)**(beta - 1) * A - elif np.isclose(sigma, 0.0): - MPL = np.where(beta * A * L < alpha * K, beta * A, 0) - else: - rho = (sigma - 1) / sigma - MPL = ((beta * (A * L)**(rho - 1) * A / (alpha * K**rho + beta * (A * L)**rho)) * - output(K, A, L, alpha, beta, sigma)) - - return MPL - - -def output(K, A, L, alpha, beta, sigma): - """ - Constant elasticity of substitution (CES) production function with labor - augmenting technology. - - Parameters - ---------- - K : array_like (float) - Capital - A : array_like (float) - Technology - L : array_like (float) - Labor - alpha : float - Importance of capital in production. Must satisfy :math:`0 < \alpha`. - beta : float - Importance of effective labor in production. Must satisfy - :math:`0 < \beta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - Y : array_like (float) - Output - - """ - # CES nests both Cobb-Douglas and Leontief functions - if np.isclose(sigma, 1.0): - Y = K**alpha * (A * L)**beta - elif np.isclose(sigma, 0.0): - Y = np.minimum(alpha * K, beta * A * L) - else: - rho = (sigma - 1) / sigma - Y = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) - - return Y - - -def output_elasticity_capital(K, A, L, alpha, beta, sigma): - """ - Elasticity of output with respect to capital for the constant elasticity - of substitution (CES) production function with labor augmenting technology. - - Parameters - ---------- - K : array_like (float) - Capital - A : array_like (float) - Technology - L : array_like (float) - Labor - alpha : float - Importance of capital in production. Must satisfy :math:`0 < \alpha`. - beta : float - Importance of effective labor in production. Must satisfy - :math:`0 < \beta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - epsilon_YK : array_like (float) - Output elasticity with respect to capital. - - """ - Y = output(K, A, L, alpha, beta, sigma) - epsilon_YK = (K / Y) * marginal_product_capital(K, A, L, alpha, beta, sigma) - return epsilon_YK - - -def output_elasticity_labor(K, A, L, alpha, beta, sigma): - """ - Elasticity of output with respect to labor for the constant elasticity - of substitution (CES) production function with labor augmenting technology. - - Parameters - ---------- - K : array_like (float) - Capital - A : array_like (float) - Technology - L : array_like (float) - Labor - alpha : float - Importance of capital in production. Must satisfy :math:`0 < \alpha`. - beta : float - Importance of effective labor in production. Must satisfy - :math:`0 < \beta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - epsilon_YL : array_like (float) - Output elasticity with respect to labor. - - """ - Y = output(K, A, L, alpha, beta, sigma) - epsilon_YL = (L / Y) * marginal_product_labor(K, A, L, alpha, beta, sigma) - return epsilon_YL \ No newline at end of file diff --git a/quantecon/ivp.py b/quantecon/ivp.py deleted file mode 100644 index 8998771f3..000000000 --- a/quantecon/ivp.py +++ /dev/null @@ -1,395 +0,0 @@ -from __future__ import division - -import numpy as np -from scipy import integrate, interpolate - - -class IVP(object): - """ - Base class for solving initial value problems (IVPs) of the form: - - :math:`y'(t) = f(t,y)` - - using finite difference methods. The class uses various integrators from - the ``scipy.ode`` module to perform the integration and parametric B-spline - interpolation from ``scipy.interpolate`` to approximate the value of the - solution between grid points. - - """ - - def __init__(self, f, jac=None, args=None): - """ - Creates an instance of the IVP class. - - Attributes - ---------- - f : callable ``f(t, y, *args)`` - Right hand side of the system of equations defining the ODE. The - independent variable, `t`, is a ``scalar``; `y` is an ``ndarray`` - of dependent variables with ``y.shape == (n,)``. The function `f` - should return a ``scalar``, ``ndarray`` or ``list`` (but not a - ``tuple``). - jac : callable ``jac(t, y, *args)``, optional(default=None) - Jacobian of the right hand side of the system of equations defining - the ODE. - :math:`\mathcal{J}_{i,j} = \frac{\partial f_i}}{\partial y_j}` - args : tuple, optional(default=None) - Additional arguments that should be passed to both `f` and `jac`. - - """ - self.f = f - self.jac = jac - self.args = args - self.ode = integrate.ode(f, jac) - - def integrate(self, t0, y0, h=1.0, T=None, g=None, tol=None, - integrator='dopri5', step=False, relax=False, **kwargs): - """ - Integrates the ODE given some initial condition. - - Parameters - ---------- - t0 : float - Initial condition for the independent variable. - y0 : array_like (float, shape=(n,)) - Initial condition for the dependent variables. - h : float, optional(default=1.0) - Step-size for computing the solution. Can be positive or - negative depending on the desired direction of integration. - T : int, optional(default=None) - Terminal value for the independent variable. One of either `T` - or `g` must be specified. - g : callable ``g(t, vec, args)``, optional(default=None) - Provides a stopping condition for the integration. If specified - user must also specify a stopping tolerance, `tol`. - tol : float, optional (default=None) - Stopping tolerance for the integration. Only required if `g` is - also specifed. - integrator : str, optional(default='dopri5') - Must be one of 'vode', 'lsoda', 'dopri5', or 'dop853' - step : bool, optional(default=False) - Allows access to internal steps for those solvers that use - adaptive step size routines. Currently only 'vode', 'zvode', - and 'lsoda' support `step=True`. - relax : bool, optional(default=False) - Currently only 'vode', 'zvode', and 'lsoda' support - `relax=True`. - **kwargs : dict, optional(default=None) - Dictionary of integrator specific keyword arguments. See the - Notes section below for a detailed discussion of the valid - keyword arguments for each of the supported integrators. - - Notes - ----- - Descriptions of the available integrators are listed below. - - "vode" - - Real-valued Variable-coefficient Ordinary Differential Equation - solver, with fixed-leading-coefficient implementation. It provides - implicit Adams method (for non-stiff problems) and a method based - on backward differentiation formulas (BDF) (for stiff problems). - - Source: http://www.netlib.org/ode/vode.f - - .. warning:: - - This integrator is not re-entrant. You cannot have two `ode` - instances using the "vode" integrator at the same time. - - This integrator accepts the following keyword arguments: - - - atol : float or sequence - absolute tolerance for solution - - rtol : float or sequence - relative tolerance for solution - - lband : None or int - - rband : None or int - Jacobian band width, jac[i,j] != 0 for i-lband <= j <= i+rband. - Setting these requires your jac routine to return the jacobian - in packed format, jac_packed[i-j+lband, j] = jac[i,j]. - - method: 'adams' or 'bdf' - Which solver to use, Adams (non-stiff) or BDF (stiff) - - with_jacobian : bool - Whether to use the jacobian - - nsteps : int - Maximum number of (internally defined) steps allowed during one - call to the solver. - - first_step : float - - min_step : float - - max_step : float - Limits for the step sizes used by the integrator. - - order : int - Maximum order used by the integrator, - order <= 12 for Adams, <= 5 for BDF. - - "zvode" - - Complex-valued Variable-coefficient Ordinary Differential Equation - solver, with fixed-leading-coefficient implementation. It provides - implicit Adams method (for non-stiff problems) and a method based - on backward differentiation formulas (BDF) (for stiff problems). - - Source: http://www.netlib.org/ode/zvode.f - - .. warning:: - - This integrator is not re-entrant. You cannot have two `ode` - instances using the "zvode" integrator at the same time. - - This integrator accepts the same keyword arguments as "vode". - - .. note:: - - When using ZVODE for a stiff system, it should only be used for - the case in which the function f is analytic, that is, when - each f(i) is an analytic function of each y(j). Analyticity - means that the partial derivative df(i)/dy(j) is a unique - complex number, and this fact is critical in the way ZVODE - solves the dense or banded linear systems that arise in the - stiff case. For a complex stiff ODE system in which f is not - analytic, ZVODE is likely to have convergence failures, and - for this problem one should instead use DVODE on the equivalent - real system (in the real and imaginary parts of y). - - "lsoda" - - Real-valued Variable-coefficient Ordinary Differential Equation - solver, with fixed-leading-coefficient implementation. It provides - automatic method switching between implicit Adams method (for - non-stiff problems) and a method based on backward differentiation - formulas (BDF) (for stiff problems). - - Source: http://www.netlib.org/odepack - - .. warning:: - - This integrator is not re-entrant. You cannot have two `ode` - instances using the "lsoda" integrator at the same time. - - This integrator accepts the following keyword arguments: - - - atol : float or sequence - absolute tolerance for solution - - rtol : float or sequence - relative tolerance for solution - - lband : None or int - - rband : None or int - Jacobian band width, jac[i,j] != 0 for i-lband <= j <= i+rband. - Setting these requires your jac routine to return the jacobian - in packed format, jac_packed[i-j+lband, j] = jac[i,j]. - - with_jacobian : bool - Whether to use the jacobian - - nsteps : int - Maximum number of (internally defined) steps allowed during one - call to the solver. - - first_step : float - - min_step : float - - max_step : float - Limits for the step sizes used by the integrator. - - max_order_ns : int - Maximum order used in the nonstiff case (default 12). - - max_order_s : int - Maximum order used in the stiff case (default 5). - - max_hnil : int - Maximum number of messages reporting too small step size (t+h=t) - (default 0) - - ixpr : int - Whether to generate extra printing at method switches. Default is - False. - - "dopri5" - - This is an explicit Runge-Kutta method of order (4)5 due to Dormand - and Prince (with adaptive step-size control and dense output). - - Authors: - - E. Hairer and G. Wanner - Universite de Geneve, Dept. de Mathematiques - CH-1211 Geneve 24, Switzerland - e-mail: ernst.hairer@math.unige.ch, - gerhard.wanner@math.unige.ch - - This code is described in [HNW93]_. - - This integrator accepts the following keyword arguments: - - - atol : float or sequence - absolute tolerance for solution - - rtol : float or sequence - relative tolerance for solution - - nsteps : int - Maximum number of (internally defined) steps allowed during one - call to the solver. - - first_step : float - - max_step : float - - safety : float - Safety factor on new step selection (default 0.9) - - ifactor : float - - dfactor : float - Maximum factor to increase/decrease step size by in one step - - beta : float - Beta parameter for stabilised step size control. - - verbosity : int - Switch for printing messages (< 0 for no messages). - - "dop853" - - This is an explicit Runge-Kutta method of order 8(5,3) due to - Dormand and Prince (with adaptive step-size control and dense - output). - - Options and references the same as "dopri5". - - Returns - ------- - solution: array_like (float) - Simulated solution trajectory. - - """ - # select the integrator - self.ode.set_integrator(integrator, **kwargs) - - # pass the model parameters as additional args - if self.args is not None: - self.ode.set_f_params(*self.args) - self.ode.set_jac_params(*self.args) - - # set the initial condition - self.ode.set_initial_value(y0, t0) - - # create a storage container for the trajectory - solution = np.hstack((t0, y0)) - - # generate a solution trajectory - while self.ode.successful(): - - self.ode.integrate(self.ode.t + h, step, relax) - current_step = np.hstack((self.ode.t, self.ode.y)) - solution = np.vstack((solution, current_step)) - - # check terminal conditions - if (g is not None) and (g(self.ode.t, self.ode.y, *self.args) < tol): - break - - elif (T is not None) and (h > 0) and (self.ode.t >= T): - break - - elif (T is not None) and (h < 0) and (self.ode.t <= T): - break - - else: - continue - - return solution - - def interpolate(self, traj, ti, k=3, der=0, ext=0): - """ - Parametric B-spline interpolation in N-dimensions. - - Parameters - ---------- - traj : array_like (float) - Solution trajectory providing the data points for constructing - the B-spline representation. - ti : array_like (float) - Array of values for the independent variable at which to - interpolate the value of the B-spline. - k : int, optional(default=3) - Degree of the desired B-spline. Degree must satisfy - :math:`1 \le k \le 5`. - der : int, optional(default=0) - The order of derivative of the spline to compute (must be less - than or equal to `k`). - ext : int, optional(default=2) Controls the value of returned - elements for outside the original knot sequence provided by - traj. For extrapolation, set `ext=0`; `ext=1` returns zero; - `ext=2` raises a `ValueError`. - - Returns - ------- - interp_traj: array (float) - The interpolated trajectory. - - """ - # array of parameter values - u = traj[:, 0] - - # build list of input arrays - n = traj.shape[1] - x = [traj[:, i] for i in range(1, n)] - - # construct the B-spline representation (s=0 forces interpolation!) - tck, t = interpolate.splprep(x, u=u, k=k, s=0) - - # evaluate the B-spline (returns a list) - out = interpolate.splev(ti, tck, der, ext) - - # convert to a 2D array - interp_traj = np.hstack((ti[:, np.newaxis], np.array(out).T)) - - return interp_traj - - def compare_trajectories(self, traj1, traj2): - """ - Return the element-wise difference between two trajectories. - - Parameters - ---------- - traj1 : array_like (float, shape=(T, N+1)) - Array containing a solution trajectory. - traj2 : array_like (float, shape=(T, N+1)) - Array containing a solution trajectory. - - Returns - ------- - abs_diff: array_like (float) - Array containing the element-wise difference between traj1 and - traj2. - - """ - diff = traj1[:, 1:] - traj2[:, 1:] - return diff - - def get_l2_errors(self, traj1, traj2): - """ - Computes a measure of the difference between two trajectories using - the :math: `L^2` norm. - - Parameters - ---------- - traj1 : array_like (float) - Array containing a solution trajectory. - traj2 : array_like (float) - Array containing a solution trajectory. - - Returns - ------- - l2_error: float - Measure of the total difference between two trajectories. - - """ - l2_error = np.sum(self.compare_trajectories(traj1, traj2)**2)**0.5 - return l2_error - - def get_maximal_errors(self, traj1, traj2): - """ - Computes a measure of the distance between two trajectories using the - :math:`L^{\infty}` norm. - - Parameters - ---------- - traj1 : array_like (float) - Array containing a solution trajectory. - traj2 : array_like (float) - Array containing a solution trajectory. - - Returns - ------- - maximal_error: float - Maximal difference between two trajectories. - - """ - maximal_error = np.max(np.abs(self.compare_trajectories(traj1, traj2))) - return maximal_error diff --git a/quantecon/solow.py b/quantecon/solow.py deleted file mode 100644 index 851c57a86..000000000 --- a/quantecon/solow.py +++ /dev/null @@ -1,221 +0,0 @@ -from __future__ import division -import numpy as np - -import ces -import ivp - - -class Model(ivp.IVP): - """Base class representing a continuous time Solow growth model.""" - - def __init__(self, k_dot, jacobian, params): - """ - Creates an instance of the Solow model. - - Arttributs - ----------- - k_dot : callable, ``k_dot(t, k, *params)`` - Equation of motion for capital (per worker/effective worker). The - independent variable, `t`, is time; `k`, is capital (per worker/ - effective worker); `params` is a tuple of model parameters. - jacobian : callable, ``jacobian(t, k, *params)`` - The derivative of the equation of motion for capital (per worker/ - effective worker) with respect to `k`. The independent variable, t, - is time; k, (per worker/effective worker); `params` is a tuple - of model parameters. - params : tuple - Tuple of model parameters. Standard parameters for a Solow - growth model are: - - - `g`: Growth rate of technology (rate of technological progress). - - `n`: Growth rate of labor force. - - `s`: Savings rate. Must satisfy ``0 < s < 1``. - - :math:`\delta`: Depreciation rate of physical capital. Must - satisfy :math:`0 < \delta`. - - Only other model parameters will be the parameters of some - production function. - - """ - super(Model, self).__init__(k_dot, jacobian, params) - - -def ces_actual_investment(k, s, alpha, sigma): - """ - Total amount of output (per worker/effective worker) invested into the - production of new capital. - - Parameters - ---------- - k : array_like (float) - Capital (per worker/effective worker). - s : float - Savings rate. Must satisfy ``0 < s < 1``. - alpha : float - Importance of capital relative to effective labor in production. Must - satisfy :math:`0 < \alpha < 1`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - actual_investment : array_like (float) - Total amount of output (per worker/effective worker) invested into the - production of new capital. - - """ - actual_investment = s * ces.output(k, 1, 1, alpha, 1-alpha, sigma) - return actual_investment - - -def ces_break_even_investment(k, g, n, delta): - """ - Amount of investment required to maintain current levels of capital (per - worker/effective worker). - - Parameters - ---------- - k : array_like (float) - Capital (per worker/effective worker). - g : float - Growth rate of technology. - n : float - Growth rate of the labor force. - delta : float - Depreciation rate of physical capital. Must satisfy - :math:`0 < \delta`. - - Returns - ------- - break_even_investment : array_like (float) - Amount of investment required to maintain current levels of capital - (per worker/effective worker). - - """ - break_even_investment = (g + n + delta) * k - return break_even_investment - - -def ces_jacobian(t, k, g, n, s, alpha, delta, sigma): - """ - Jacobian for the Solow model with constant elasticity of substitution (CES) - production. - - Parameters - ---------- - t : array_like (float) - Time. - k : array_like (float) - Capital (per worker/effective worker). - g : float - Growth rate of technology. - n : float - Growth rate of the labor force. - s : float - Savings rate. Must satisfy ``0 < s < 1``. - alpha : float - Importance of capital relative to effective labor in production. Must - satisfy :math:`0 < \alpha < 1`. - delta : float - Depreciation rate of physical capital. Must satisfy - :math:`0 < \delta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - jac : array_like (float) - Derivative of the equation of motion for capital (per worker/effective - worker) with respect to `k`. - - """ - jac = (s * ces.marginal_product_capital(k, 1, 1, alpha, 1-alpha, sigma) - - (g + n + delta)) - return jac - - -def ces_k_dot(t, k, g, n, s, alpha, delta, sigma): - """ - Equation of motion for capital (per worker/effective worker) for a - Solow growth model with constant elasticity of substitution (CES) - production function. - - Parameters - ---------- - t : array_like (float) - Time. - k : array_like (float) - Capital (per worker/effective worker). - g : float - Growth rate of technology. - n : float - Growth rate of the labor force. - s : float - Savings rate. Must satisfy ``0 < s < 1``. - alpha : float - Importance of capital relative to effective labor in production. Must - satisfy :math:`0 < \alpha < 1`. - delta : float - Depreciation rate of physical capital. Must satisfy - :math:`0 < \delta`. - sigma : float - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`0 \le \sigma`. - - Returns - ------- - k_dot : array_like (float) - Rate of change of capital (per worker/effective worker). - - """ - k_dot = (ces_actual_investment(k, s, alpha, sigma) - - ces_break_even_investment(k, g, n, delta)) - return k_dot - - -def cobb_douglas_analytic_solution(t, k0, g, n, s, alpha, delta, sigma=1.0): - """ - Analytic solution for the Solow model with Cobb-Douglas production. - - Parameters - ---------- - t : array_like (float, shape=(T,)) - Array of points at which the solution is desired. - k0 : float - Initial value for capital (per worker/effective worker) - g : float - Growth rate of technology. - n : float - Growth rate of the labor force. - s : float - Savings rate. Must satisfy ``0 < s < 1``. - alpha : float - Elasticity of output with respect to capital. Must satisfy - :math:`0 < \alpha < 1`. - delta : float - Depreciation rate of physical capital. Must satisfy - :math:`0 < \delta`. - sigma : float, optional(default=1.0) - Elasticity of substitution between capital and effective labor in - production. Must satisfy :math:`\sigma=1.0` in order to have - Cobb-Douglas production. - - Returns - ------- - analytic_traj : array_like (float, shape=(T,2)) - Array representing the analytic solution trajectory. - - """ - # speed of convergence - lmbda = (n + g + delta) * (1 - alpha) - - # analytic solution for Solow model at time t - k_t = (((s / (n + g + delta)) * (1 - np.exp(-lmbda * t)) + - k0**(1 - alpha) * np.exp(-lmbda * t))**(1 / (1 - alpha))) - - # combine into a (T, 2) array - analytic_traj = np.hstack((t[:, np.newaxis], k_t[:, np.newaxis])) - - return analytic_traj diff --git a/quantecon/tests/test_ces.py b/quantecon/tests/test_ces.py deleted file mode 100644 index 3a96b9f92..000000000 --- a/quantecon/tests/test_ces.py +++ /dev/null @@ -1,269 +0,0 @@ -""" -Testing suite for ces.py - -""" -import unittest - -from numpy import testing -import sympy as sp - -from ..ces import * - - -class GeneralCESCase(unittest.TestCase): - - def setUp(self): - """Use SymPy to construct some functions for use in testing.""" - sp.var('K, A, L, alpha, beta, sigma') - rho = (sigma - 1) / sigma - - # compute symbolic expressions - _sp_output = (alpha * K**rho + beta * (A * L)**rho)**(1 / rho) - _sp_mpk = sp.diff(_sp_output, K) - _sp_mpl = sp.diff(_sp_output, L) - _sp_elasticity_YK = (K / _sp_output) * _sp_mpk - _sp_elasticity_YL = (L / _sp_output) * _sp_mpl - - # wrap SymPy expressions into callable NumPy funcs - args = (K, A, L, alpha, beta, sigma) - self.np_output = sp.lambdify(args, _sp_output, 'numpy') - self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') - self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') - self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') - self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') - - # create a grid of input values - T = 10 - eps = 1e-2 - capital_pts = np.linspace(eps, 10.0, T) - labor_pts = capital_pts - technology_pts = np.exp(capital_pts) - self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) - - # create a grid of parameter values - alpha_vals = np.linspace(eps, 1 - eps, T) - beta_vals = np.linspace(eps, 1 - eps, T) - sigma_vals = np.logspace(2, 2, T) - self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) - - def test_marginal_product_capital(self): - """Test CES marginal product of capital.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_mpk = np.vectorize(marginal_product_capital) - - # conduct the test - expected_mpk = self.np_mpk(capital, technology, labor, - alpha, beta, sigma) - actual_mpk = test_mpk(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_mpk, actual_mpk) - - def test_marginal_product_labor(self): - """Test CES marginal product of labor.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_mpl = np.vectorize(marginal_product_labor) - - # conduct the test - expected_mpl = self.np_mpl(capital, technology, labor, - alpha, beta, sigma) - actual_mpl = test_mpl(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_mpl, actual_mpl) - - def test_output(self): - """Test CES output.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_output = np.vectorize(output) - - # conduct the test - expected_output = self.np_output(capital, technology, labor, - alpha, beta, sigma) - actual_output = test_output(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_output, actual_output) - - def test_output_elasticity_capital(self): - """Test CES elasticity of output with respect to capital.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_elasticity = np.vectorize(output_elasticity_capital) - - # conduct the test - expected_elasticity = self.np_elasticity_YK(capital, technology, labor, - alpha, beta, sigma) - actual_elasticity = test_elasticity(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_elasticity, actual_elasticity) - - def test_output_elasticity_labor(self): - """Test CES elasticity of output with respect to labor.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_elasticity = np.vectorize(output_elasticity_labor) - - # conduct the test - expected_elasticity = self.np_elasticity_YL(capital, technology, labor, - alpha, beta, sigma) - actual_elasticity = test_elasticity(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_elasticity, actual_elasticity) - - -class CobbDouglasCase(GeneralCESCase): - - def setUp(self): - """Use SymPy to construct some functions for use in testing.""" - sp.var('K, A, L, alpha, beta, sigma') - - # compute symbolic expressions - _sp_output = K**alpha * (A * L)**beta - _sp_mpk = sp.diff(_sp_output, K) - _sp_mpl = sp.diff(_sp_output, L) - _sp_elasticity_YK = (K / _sp_output) * _sp_mpk - _sp_elasticity_YL = (L / _sp_output) * _sp_mpl - - # wrap SymPy expressions into callable NumPy funcs - args = (K, A, L, alpha, beta, sigma) - self.np_output = sp.lambdify(args, _sp_output, 'numpy') - self.np_mpk = sp.lambdify(args, _sp_mpk, 'numpy') - self.np_mpl = sp.lambdify(args, _sp_mpl, 'numpy') - self.np_elasticity_YK = sp.lambdify(args, _sp_elasticity_YK, 'numpy') - self.np_elasticity_YL = sp.lambdify(args, _sp_elasticity_YL, 'numpy') - - # create a grid of input values - T = 10 - eps = 1e-2 - capital_pts = np.linspace(eps, 10.0, T) - labor_pts = capital_pts - technology_pts = np.exp(capital_pts) - self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) - - # create a grid of parameter values - alpha_vals = np.linspace(eps, 1 - eps, T) - beta_vals = np.linspace(eps, 1 - eps, T) - sigma_vals = np.ones(T) - self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) - - -class LeontiefCase(GeneralCESCase): - - def setUp(self): - """Create a grid of inputs and parameters over which to iterate.""" - # create a grid of input values - T = 10 - eps = 1e-2 - capital_pts = np.linspace(eps, 10.0, T) - labor_pts = capital_pts - technology_pts = np.exp(capital_pts) - self.input_grid = np.meshgrid(capital_pts, technology_pts, labor_pts) - - # create a grid of parameter values - alpha_vals = np.linspace(eps, 1 - eps, T) - beta_vals = np.linspace(eps, 1 - eps, T) - sigma_vals = np.zeros(T) - self.parameter_grid = np.meshgrid(alpha_vals, beta_vals, sigma_vals) - - def test_marginal_product_capital(self): - """Test Leontief marginal product of capital.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_mpk = np.vectorize(marginal_product_capital) - - # conduct the test - expected_mpk = np.where(alpha * capital < beta * technology * labor, - alpha, 0.0) - actual_mpk = test_mpk(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_mpk, actual_mpk) - - def test_marginal_product_labor(self): - """Test Leontief marginal product of labor.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_mpl = np.vectorize(marginal_product_labor) - - # conduct the test - expected_mpl = np.where(beta * technology * labor < alpha * capital, - beta * technology, 0.0) - actual_mpl = test_mpl(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_mpl, actual_mpl) - - def test_output(self): - """Test Leontief output.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_output = np.vectorize(output) - - # conduct the test - expected_output = np.minimum(alpha * capital, beta * technology * labor) - actual_output = test_output(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_output, actual_output) - - def test_output_elasticity_capital(self): - """Test Leontief elasticity of output with respect to capital.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_elasticity = np.vectorize(output_elasticity_capital) - test_output = np.vectorize(output) - test_mpk = np.vectorize(marginal_product_capital) - - # conduct the test - K = capital - Y = test_output(capital, technology, labor, alpha, beta, sigma) - MPK = test_mpk(capital, technology, labor, alpha, beta, sigma) - expected_elasticity = (K / Y) * MPK - actual_elasticity = test_elasticity(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_elasticity, actual_elasticity) - - def test_output_elasticity_labor(self): - """Test Leontief elasticity of output with respect to labor.""" - # unpack grids - capital, technology, labor = self.input_grid - alpha, beta, sigma = self.parameter_grid - - # vectorize original function to accept parameter arrays - test_elasticity = np.vectorize(output_elasticity_labor) - test_output = np.vectorize(output) - test_mpl = np.vectorize(marginal_product_labor) - - # conduct the test - L = labor - Y = test_output(capital, technology, labor, alpha, beta, sigma) - MPL = test_mpl(capital, technology, labor, alpha, beta, sigma) - expected_elasticity = (L / Y) * MPL - actual_elasticity = test_elasticity(capital, technology, labor, - alpha, beta, sigma) - testing.assert_almost_equal(expected_elasticity, actual_elasticity) diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py deleted file mode 100644 index 5921526d1..000000000 --- a/quantecon/tests/test_ivp.py +++ /dev/null @@ -1,104 +0,0 @@ -""" -Test suite for ivp.py - -""" -import unittest - -from numpy import testing - -from ..ivp import * -from ..solow import * - - -class IVPTestSuite(unittest.TestCase): - """Base class for ivp.py module tests.""" - - def setUp(self): - raise NotImplementedError - - def test_integrate(self): - """Test ODE integration.""" - raise NotImplementedError - - def test_interpolate(self): - """Test B_spline interpolation.""" - raise NotImplementedError - - -class SolowModelCase(IVPTestSuite): - - def setUp(self): - # specify some parameters (g, n, s, alpha, delta, sigma) - params = (0.02, 0.02, 0.15, 0.33, 0.04, 1.0) - - # define the initial value problem (IVP) - self.ivp = IVP(f=ces_k_dot, jac=ces_jacobian, args=params) - - def test_integrate(self): - """Test ODE integration.""" - # analytic test case using Cobb-Douglas production technology. - t0 = 0.0 - k0 = 0.5 - - # tighten tolerances so tests don't file due to numerical issues - kwargs = {'atol': 1e-12, 'rtol': 1e-9} - - integrators = ['dopri5', 'dop853', 'vode', 'lsoda'] - - for integrator in integrators: - - tmp_numeric_traj = self.ivp.integrate(t0, k0, h=1e-1, T=100.0, - integrator=integrator, - **kwargs) - - tmp_grid_pts = tmp_numeric_traj[:, 0] - tmp_analytic_traj = cobb_douglas_analytic_solution(tmp_grid_pts, - k0, - *self.ivp.args) - - expected_sol = tmp_analytic_traj[:, 1] - actual_sol = tmp_numeric_traj[:, 1] - - testing.assert_almost_equal(expected_sol, actual_sol) - - def test_interpolate(self): - """Test B-spline interpolation.""" - # analytic test case using Cobb-Douglas production technology. - t0 = 0.0 - k0 = 0.5 - - # tighten tolerances so tests don't file due to numerical issues - kwargs = {'atol': 1e-12, 'rtol': 1e-9} - - integrators = ['dopri5', 'dop853', 'vode', 'lsoda'] - - for integrator in integrators: - - tmp_numeric_traj = self.ivp.integrate(t0, k0, h=1e-1, T=100.0, - integrator=integrator, - **kwargs) - T = tmp_numeric_traj[:, 0][-1] - tmp_grid_pts = np.linspace(t0, T, 1000) - - tmp_interp_traj = self.ivp.interpolate(tmp_numeric_traj, tmp_grid_pts, k=3) - tmp_analytic_traj = cobb_douglas_analytic_solution(tmp_grid_pts, - k0, - *self.ivp.args) - - expected_sol = tmp_analytic_traj[:, 1] - actual_sol = tmp_interp_traj[:, 1] - - testing.assert_almost_equal(expected_sol, actual_sol) - - -class SpenceModelCase(IVPTestSuite): - pass - - -class PredatorPreyModelCase(IVPTestSuite): - pass - - -if __name__ == '__main__': - SolowTest = unittest.TestLoader().loadTestsFromTestCase(SolowModelCase) - unittest.TextTestRunner(verbosity=2).run(SolowTest) \ No newline at end of file diff --git a/quantecon/tests/test_solow.py b/quantecon/tests/test_solow.py deleted file mode 100644 index 386a07a68..000000000 --- a/quantecon/tests/test_solow.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -Test suite for solow.py - -""" -import unittest -import ..solow - - -class SolowTestSuite(unittest.TestCase): - pass - -if __name__ == '__main__': - SolowTest = unittest.TestLoader().loadTestsFromTestCase(SolowTestSuite) - unittest.TextTestRunner(verbosity=2).run(suite1) \ No newline at end of file From 9041acbedec7915ea0679f1665db6e28ea931d52 Mon Sep 17 00:00:00 2001 From: "David R. Pugh" Date: Fri, 29 Aug 2014 11:28:30 -0400 Subject: [PATCH 49/49] Added most recent copies of files. --- examples/solving_initial_value_problems.ipynb | 1365 +++++++++++++++++ quantecon/ivp.py | 295 ++++ quantecon/tests/test_ivp.py | 306 ++++ 3 files changed, 1966 insertions(+) create mode 100644 examples/solving_initial_value_problems.ipynb create mode 100644 quantecon/ivp.py create mode 100644 quantecon/tests/test_ivp.py diff --git a/examples/solving_initial_value_problems.ipynb b/examples/solving_initial_value_problems.ipynb new file mode 100644 index 000000000..702a32106 --- /dev/null +++ b/examples/solving_initial_value_problems.ipynb @@ -0,0 +1,1365 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:29b1a0f602cce2181b458fce33ea9e9d30b154e221b2e1b1a8361f04e6f3c26d" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "#Solving initial value problems (IVPs) in `quantecon`\n", + "\n", + "## David R. Pugh" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import sympy as sp\n", + "\n", + "# comment out if you don't want plots rendered in notebook\n", + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Introduction\n", + "This notebook demonstrates how to solve initial value problems (IVPs) using the [`quantecon`](http://jstac.github.io/quant-econ/) Python library. Before demonstrating how one might solve an IVP using `quantecon`, I provide formal definitions for ordinary differential equations (ODEs) and initial value problems (IVPs), as well as a short discussion of finite-difference methods that will be used to solve IVPs.\n", + "\n", + "## Ordinary differential equations (ODE)\n", + "An [ordinary differential equation (ODE)](http://en.wikipedia.org/wiki/Ordinary_differential_equation) is in equation of the form\n", + "\n", + "\\begin{equation}\n", + "\\textbf{y}'= \\textbf{f}(t ,\\textbf{y}) \\tag{1.1}\n", + "\\end{equation}\n", + "\n", + "where $\\textbf{f}:[t_0,\\infty) \\times \\mathbb{R}^n\\rightarrow\\mathbb{R}^n$. In the case where $n=1$, then equation 1.1 reduces to a single ODE; when $n>1$, equation 1.1 defines a system of ODEs. ODEs are one of the most basic examples of functional equations: the solution to equation 1.1 is a function $\\textbf{y}(t): D \\subset \\mathbb{R}\\rightarrow\\mathbb{R}^n$. \n", + "\n", + "## Initial value problems (IVPs)\n", + "An [initial value problem (IVP)](http://en.wikipedia.org/wiki/Initial_value_problem) has the form\n", + "\n", + "\\begin{equation}\n", + "\\textbf{y}'= \\textbf{f}(t ,\\textbf{y}),\\ t \\ge t_0,\\ \\textbf{y}(t_0) = \\textbf{y}_0 \\tag{1.2}\n", + "\\end{equation}\n", + "\n", + "where $\\textbf{f}:[t_0,\\infty) \\times \\mathbb{R}^n\\rightarrow\\mathbb{R}^n$ and the initial condition $\\textbf{y}_0 \\in \\mathbb{R}^n$ is a given vector. Alternatively, I could also specify an initial value problem by imposing a terminal condition of the form $\\textbf{y}(T) = \\textbf{y}_T$. The key point is that the solution $\\textbf{y}(t)$ is pinned down at one $t\\in[t_0, T]$. \n", + "\n", + "The solution to the IVP defined by equation 1.2 is the function $\\textbf{y}(t): [t_0,T] \\subset \\mathbb{R}\\rightarrow\\mathbb{R}^n$ that satisfies the initial condition $\\textbf{y}(t_0) = \\textbf{y}_0$. So long as the function $\\textbf{f}$ is [reasonably well-behaved](http://en.wikipedia.org/wiki/Ordinary_differential_equation#Existence_and_uniqueness_of_solutions), the solution $\\textbf{y}(t)$ exists and is unique.\n", + "\n", + "## Finite-difference methods\n", + "[Finite-difference methods](http://en.wikipedia.org/wiki/Finite_difference_method) are perhaps the most commonly used class of numerical methods for approximating solutions to IVPs. The basic idea behind all finite-difference methods is to construct a difference equation \n", + "\n", + "\\begin{equation}\n", + "\\textbf{y}(t_i)'= \\textbf{f}(t_i ,\\textbf{y}(t_i)) \\tag{1.3}\n", + "\\end{equation}\n", + "\n", + "which is \"similar\" to the differential equation at some grid of values $t_0 < \\dots < t_N$. Finite-difference methods then \"solve\" the original differential equation by finding for each $n=0,\\dots,N$ a value $\\textbf{y}_n$ that approximates the value of the solution $\\textbf{y}(t_n)$.\n", + "\n", + "It is important to note that finite-difference methods only approximate the solution $\\textbf{y}$ at the $N$ grid points. In order to approximate $\\textbf{y}$ between grid points one must resort to some form of [interpolation](http://en.wikipedia.org/wiki/Interpolation). \n", + "\n", + "The literature on finite-difference methods for solving IVPs is vast and there are many excellent reference texts. Those interested in a more in-depth treatment of these topics, including formal proofs of convergence, order, and stability of the numerical methods used in this notebook, should consult (Hairer, 1993), (Butcher, 2008), (Iserles, 2009). Chapter 10 of (Judd, 1998) covers a subset of these more formal texts with a specific focus on economic applications. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Examples\n", + "The remainder of this notebook demonstrates the usage and functionality of the `quantecon.ivp` module by way of example. To get started, we need to import the `quantecon.ivp module`..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from quantecon import ivp" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1 Lotka-Volterra \"Predator-Prey\" model\n", + "\n", + "We begin with the Lotka-Volterra model, also known as the predator-prey model, which is a pair of first order, non-linear, differential equations frequently used to describe the dynamics of biological systems in which two species interact, one a predator and the other its prey. The model was proposed independently by Alfred J. Lotka in 1925 and Vito Volterra in 1926. \n", + "\n", + "\\begin{align}\n", + " \\frac{du}{dt} =& au - buv \\tag{2.1} \\\\\n", + " \\frac{dv}{dt} =& -cv + dbuv \\tag{2.2}\n", + "\\end{align}\n", + "\n", + "where $u$ is the number of preys (for example, rabbits), $v$ is the number of predators (for example, foxes) and $a, b, c, d$ are constant parameters defining the behavior of the population.\n", + "\n", + "Parameter definitions are as follows:\n", + "* $a$: the natural growing rate of prey in the absence of predators.\n", + "* $b$: the natural dying rate of prey due to predation.\n", + "* $c$: the natural dying rate of predators, in teh absence of prey.\n", + "* $d$: the factor describing how many caught prey is necessary to create a new predator.\n", + "\n", + "I will use $\\textbf{y}=[u, v]$ to describe the state of both populations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Defining an instance of the `IVP` class\n", + "\n", + "First, we need to create an instance of the IVP class representing the Lotka-Volterra \"Predator-Prey\" model. To initialize an instance of the IVP class we need to define the following...\n", + "\n", + "* ``f`` : Callable of the form ``f(t, y, *args)``. The function ``f`` is the right hand side of the system of equations defining the model. The independent variable, ``t``, should be a ``scalar``; ``y`` is an ``ndarray`` of dependent variables with ``y.shape == (n,)``. The function `f` should return a ``scalar``, ``ndarray`` or ``list`` (but not a ``tuple``).\n", + "* ``jac`` : Callable of the form ``jac(t, y, *args)``, optional(default=None). The Jacobian of the right hand side of the system of equations defining the ODE.\n", + "\n", + "$$ \\mathcal{J}_{i,j} = \\bigg[\\frac{\\partial f_i}{\\partial y_j}\\bigg] \\tag {2.3}$$\n", + "\n", + "* ``f_args`` : tuple, optional(default=None). Additional arguments that should be passed to the function `f`. Typically this will be a tuple of model parameters.\n", + "* ``jac_args`` : tuple, optional(default=None). Additional arguments that should be passed to the function `jac`. Typically this will be a tuple of model parameters.\n", + "\n", + "Most all of this information can be found in the docstring for the `ivp.IVP` class." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ivp.IVP?" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the docstring we see that we are required to define a function describing the right-hand side of the system of differential equations that we wish to solve. While, optional, it is always a good idea to also define a function describing the Jacobian matrix of partial derivatives.\n", + "\n", + "For the Lotka-Volterra model, these two functions would look as follows..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lotka_volterra_system(t, y, a, b, c, d):\n", + " \"\"\"\n", + " Return the Lotka-Voltera system.\n", + "\n", + " Parameters\n", + " ----------\n", + " t : float\n", + " Time\n", + " y : ndarray (float, shape=(2,))\n", + " Endogenous variables of the Lotka-Volterra system. Ordering is\n", + " `y = [u, v]` where `u` is the number of prey and `v` is the number of\n", + " predators.\n", + " a : float\n", + " Natural growth rate of prey in the absence of predators.\n", + " b : float\n", + " Natural death rate of prey due to predation.\n", + " c : float\n", + " Natural death rate of predators, due to absence of prey.\n", + " d : float\n", + " Factor describing how many caught prey is necessary to create a new\n", + " predator.\n", + "\n", + " Returns\n", + " -------\n", + " jac : ndarray (float, shape=(2,2))\n", + " Jacobian of the Lotka-Volterra system of ODEs.\n", + "\n", + " \"\"\"\n", + " f = np.array([ a * y[0] - b * y[0] * y[1] ,\n", + " -c * y[1] + d * b * y[0] * y[1] ])\n", + " return f\n", + "\n", + "\n", + "def lotka_volterra_jacobian(t, y, a, b, c, d):\n", + " \"\"\"\n", + " Return the Lotka-Voltera Jacobian matrix.\n", + "\n", + " Parameters\n", + " ----------\n", + " t : float\n", + " Time\n", + " y : ndarray (float, shape=(2,))\n", + " Endogenous variables of the Lotka-Volterra system. Ordering is\n", + " `y = [u, v]` where `u` is the number of prey and `v` is the number of\n", + " predators.\n", + " a : float\n", + " Natural growth rate of prey in the absence of predators.\n", + " b : float\n", + " Natural death rate of prey due to predation.\n", + " c : float\n", + " Natural death rate of predators, due to absence of prey.\n", + " d : float\n", + " Factor describing how many caught prey is necessary to create a new\n", + " predator.\n", + "\n", + " Returns\n", + " -------\n", + " jac : ndarray (float, shape=(2,2))\n", + " Jacobian of the Lotka-Volterra system of ODEs.\n", + "\n", + " \"\"\"\n", + " jac = np.array([[a - b * y[1], -b * y[0]],\n", + " [b * d * y[1], -c + b * d * y[0]]])\n", + " return jac" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since, from the docstring we see that the parameters `f_args`, and `jac_args` are optional, we can go ahead and create our instance of the `ivp.IVP` class representing the Lotka-Volterra model." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "lotka_volterra_ivp = ivp.IVP(f=lotka_volterra_system,\n", + " jac=lotka_volterra_jacobian)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to simulate the model, however, we will need to supply values for the model parameters $a,b,c,d$. Let's define some \"reasonable\" values..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# ordering is (a, b, c, d)\n", + "lotka_volterra_params = (1.0, 0.1, 1.5, 0.75)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "...and add them as attributes of the `lotka_volterra_ivp` instance." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "lotka_volterra_ivp.f_args = lotka_volterra_params\n", + "lotka_volterra_ivp.jac_args = lotka_volterra_params" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some basic type checking is done in order to insure that the both the `f_args` and `jac_args` parameters are tuples. For example, the following will raise an `AttributeError`...." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# dictionary is not a valid data type for parameters!\n", + "invalid_lotka_volterra_params = {'a': 1.0, 'b': 0.1, 'c': 1.5, 'd': 0.75}\n", + "lotka_volterra_ivp.f_args = invalid_lotka_volterra_params" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "IVP.args must be a tuple, not a .", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0minvalid_lotka_volterra_params\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'a'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'b'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'c'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m1.5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'd'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0.75\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mlotka_volterra_ivp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf_args\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minvalid_lotka_volterra_params\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/Users/drpugh/Research/python-dev/quant-econ/quantecon/ivp.py\u001b[0m in \u001b[0;36mf_args\u001b[0;34m(self, new_f_args)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_f_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtuple\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mNoneType\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[0mmesg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"IVP.args must be a tuple, not a {}.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 88\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmesg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_f_args\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 89\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mnew_f_args\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_f_params\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnew_f_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: IVP.args must be a tuple, not a ." + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using `ivp.IVP.solve` to integrate the ODE\n", + "\n", + "In order to solve a system of ODEs, the `ivp.IVP.solve` method provides an interface into the ODE integration routines provided in the `scipy.integrate.ode` module. The method takes the following parameters...\n", + "\n", + "* `t0` : float. Initial condition for the independent variable.\n", + "* `y0` : array_like (float, shape=(n,)). Initial condition for the dependent variables.\n", + "* `h` : float, optional(default=1.0). Step-size for computing the solution. Can be positive or negative depending on the desired direction of integration.\n", + "* `T` : int, optional(default=None). Terminal value for the independent variable. One of either `T` or `g` must be specified.\n", + "* `g` : Callable of the form ``g(t, y, args)``, optional(default=None). Provides a stopping condition for the integration. If specified user must also specify a stopping tolerance, `tol`.\n", + "* `tol` : float, optional (default=None). Stopping tolerance for the integration. Only required if `g` is also specifed.\n", + "* `integrator` : str, optional(default='dopri5') Must be one of 'vode', 'lsoda', 'dopri5', or 'dop853'\n", + "* `step` : bool, optional(default=False) Allows access to internal steps for those solvers that use adaptive step size routines. Currently only 'vode', 'zvode', and 'lsoda' support `step=True`.\n", + "* `relax` : bool, optional(default=False) Currently only 'vode', 'zvode', and 'lsoda' support `relax=True`.\n", + "* `**kwargs` : dict, optional(default=None). Dictionary of integrator specific keyword arguments. See the Notes section of the docstring for `scipy.integrate.ode` for a complete description of solver specific keyword arguments.\n", + "\n", + "... and returns:\n", + "\n", + "* `solution`: array_like (float). Simulated solution trajectory.\n", + "\n", + "The above information can be found in the doctring of the `ivp.IVP.solve` method." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# remember...always read the docs!\n", + "ivp.IVP.solve?" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example usage\n", + "Using `dopri5`, an embedded Runge-Kutta method of order 4(5) with adaptive step size control due to [Dormand and Prince](http://en.wikipedia.org/wiki/Dormand%E2%80%93Prince_method), integrate the model forward from an initial condition of 10 rabbits and 5 foxes for 15 years." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# define the initial condition...\n", + "t0, y0 = 0, np.array([10, 5])\n", + "\n", + "# ...and integrate!\n", + "solution = lotka_volterra_ivp.solve(t0, y0, h=1e-1, T=15, integrator='dopri5',\n", + " atol=1e-12, rtol=1e-9)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plotting the solution\n", + "\n", + "Once we have computed the solution, we can plot it using the excellent [`matplotlib`](http://matplotlib.org/) Python library." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# extract the components of the solution trajectory\n", + "t = solution[:, 0]\n", + "rabbits = solution[:, 1]\n", + "foxes = solution[:, 2]\n", + "\n", + "# create the plot\n", + "fig = plt.figure(figsize=(8, 6))\n", + "plt.plot(t, rabbits, 'r.', label='Rabbits')\n", + "plt.plot(t, foxes , 'b.', label='Foxes')\n", + "plt.grid()\n", + "plt.legend(loc=0, frameon=False, bbox_to_anchor=(1, 1))\n", + "plt.xlabel('Time', fontsize=15)\n", + "plt.ylabel('Population', fontsize=15)\n", + "plt.title('Evolution of fox and rabbit populations', fontsize=20)\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 23 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we have plotted the time paths of rabbit and fox populations as sequences of points rather than smooth curves. This is done to visually emphasize the fact that finite-difference methods used to approximate the solution return a discrete approximation to the true continuous solution." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using `ivp.IVP.interpolate` to interpolate the solution\n", + "\n", + "The `IVP.interpolate` method provides an interface to the parametric [B-spline interpolation](http://en.wikipedia.org/wiki/B-spline) routines in `scipy.interpolate` in order to constuct a continuous approximation to the true solution. For more details on B-spline interpolation, including some additional economic applications, see chapter 6 of (Judd, 1998). The `ivp.IVP.interpolate` method takes the following parameters... \n", + "\n", + "* `traj` : array_like (float)\n", + " Solution trajectory providing the data points for constructing the\n", + " B-spline representation.\n", + "* `ti` : array_like (float)\n", + " Array of values for the independent variable at which to\n", + " interpolate the value of the B-spline.\n", + "* `k` : int, optional(default=3)\n", + " Degree of the desired B-spline. Degree must satisfy\n", + " :math:`1 \\le k \\le 5`.\n", + "* `der` : int, optional(default=0)\n", + " The order of derivative of the spline to compute (must be less\n", + " than or equal to `k`).\n", + "* `ext` : int, optional(default=2) Controls the value of returned elements\n", + " for outside the original knot sequence provided by traj. For\n", + " extrapolation, set `ext=0`; `ext=1` returns zero; `ext=2` raises a\n", + " `ValueError`.\n", + "\n", + "... and returns:\n", + "\n", + "* `interp_traj`: ndarray (float). The interpolated trajectory.\n", + "\n", + "#### Example usage\n", + "Approximate the solution to the Lotka-Volterra model at 1000 evenly spaced points using a 5th order B-spline interpolation and no extrapolation." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# define the desired interpolation points...\n", + "ti = np.linspace(t0, solution[-1, 0], 1000)\n", + "\n", + "# ...and interpolate!\n", + "interp_solution = lotka_volterra_ivp.interpolate(solution, ti, k=5, ext=2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plotting the interpolated solution\n", + "\n", + "We can now plot the interpolated solution using `matplotlib` as follows..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# extract the components of the solution\n", + "ti = interp_solution[:, 0]\n", + "rabbits = interp_solution[:, 1]\n", + "foxes = interp_solution[:, 2]\n", + "\n", + "# make the plot\n", + "fig = plt.figure(figsize=(8, 6))\n", + "\n", + "plt.plot(ti, rabbits, 'r-', label='Rabbits')\n", + "plt.plot(ti, foxes , 'b-', label='Foxes')\n", + "\n", + "plt.xlabel('Time', fontsize=15)\n", + "plt.ylabel('Population', fontsize=15)\n", + "plt.title('Evolution of fox and rabbit populations', fontsize=20)\n", + "\n", + "plt.legend(loc='best', frameon=False, bbox_to_anchor=(1,1))\n", + "plt.grid()\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nxHYgMdCc8NU0AcwBzsn4/BHCs7ulHrJbpyTyOB0H3G01In8k8udC8MxduQ8Q7EJp+PP42iA7IMtb\nicZ/ieResxXGmqbewKMZn5+DLJcrlacwN728HHnnsAxZwlrKsaNkwqY54dw9Vw95BxiGLd3Z3c+x\nlgPjOLaDJ6jGI/VZR5BayR7Ii+xMwtFyIPv4bkNatfyPY88vI61F513m+A5z7P7LaiPBTppyGl9x\n4C3kb3AxkGQrOKWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllAqh9AJ8\nNAc2I00elVJK5SJsZ/QopY53SZbPTwK+AB4Hpmf5/hqgOnJcStiOKFJKKaWUKrRTkJmlW2wHopRS\nQRSEA3uVUtG3GXg2y9dvIEfDtANWA/uR2akywHlAMrAv42cuzHatIsgZbuuBQ8gRSJqoKaWUUiow\n8ppp2sTxNU1jgRQkKeoAdAV2Ah8i5yT2Qs5IXIqcTZfVS8Be4D6gJXIA7lEkAVNKKaWUcl5hkqY3\ngFSgWpbvDc74/W5ZvndlxvfOzfi6JpCW7WdADvtdGGHcSinlBF2eU0rlZlPGR6YNGf9+kcP3Kmf8\n2wpJoqYAxbJ8fAHURzefKKUCrJjtAJRSztqV7esjOXw/83snZvxbHigK7M7hegY4E9jmV4BKKRVL\nmjQppXITyazQTqR+6TJkxim7Xz1FpJRSFmnSpJTKjYngd75AZppKAzP9DUcppezSpEkpBTnPKkUy\n07QWeAWYgBSWL0aW7uoAtZBdd0opFUiaNCml4M+zSiaH7+X0czl9725gHZIgPQbsQdoSjPYYo1JK\nKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSiml\nQuv/Aa7LYlYfk4WcAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 15 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we have plotted the time paths of rabbit and fox populations as smooth curves. This is done to visually emphasize the fact that the B-spline interpolation methods used to approximate the solution return a continuous approximation to the true continuous solution." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Assessing accuracy using `ivp.IVP.compute_residual`\n", + "\n", + "After computing a continuous approximation to the solution of our IVP, it is important to verify that the computed approximation is actually a \"good\" approximation. To assess the accuracy of our numerical solution we first define a residual function, $R(t)$, as the difference between the derivative of the B-spline approximation of the solution trajectory, $\\hat{\\textbf{y}}'(t)$, and the right-hand side of the original ODE evaluated along the approximated solution trajectory. \n", + "\n", + "\\begin{equation}\n", + " \\textbf{R}(t) = \\hat{\\textbf{y}}'(t) - f(t, \\hat{\\textbf{y}}(t)) \\tag{2.4}\n", + "\\end{equation}\n", + "\n", + "The idea is that if our numerical approximation of the true solution is \"good\", then this residual function should be roughly zero everywhere within the interval of approximation. The `ivp.IVP.compute_residual` method takes the following parameters...\n", + "\n", + "* `traj` : array_like (float). Solution trajectory providing the data points for constructing the B-spline representation.\n", + "* `ti` : array_like (float). Array of values for the independent variable at which to interpolate the value of the B-spline.\n", + "* `k` : int, optional(default=3). Degree of the desired B-spline. Degree must satisfy $1 \\le k \\le 5$.\n", + "* `ext` : int, optional(default=2). Controls the value of returned elements for outside the original knot sequence provided by `traj`. For extrapolation, set `ext=0`; `ext=1` returns zero; `ext=2` raises a `ValueError`.\n", + "\n", + "... and returns:\n", + "\n", + "* `residual` : array (float) Difference between the derivative of the B-spline approximation of the solution trajectory and the right-hand side of the ODE evaluated along the approximated solution trajectory.\n", + "\n", + "Remember to check the docstring for more information!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# life will be easier if you read the docs!\n", + "lotka_volterra_ivp.compute_residual?" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example usage\n", + "Compute the residual to the Lotka-Volterra model at 1000 evenly spaced points using a 1st order B-spline interpolation (which is equivalent to linear interpolation!)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# reset original parameters\n", + "lotka_volterra_ivp.args = lotka_volterra_params\n", + "\n", + "# compute the residual\n", + "residual = lotka_volterra_ivp.compute_residual(solution, ti, k=1)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plotting the residual\n", + "\n", + "In your introductory econometrics/statistics course, your professor likely implored you to \"always plot your residuals!\" This maxim of data analysis is no less true in numerical analysis. However, while patterns in residuals are generally a \"bad\" thing in econometrics/statistics (as they suggest model mispecification, or other related problems), patterns in a residual function, $\\textbf{R}(t)$, in numerical analysis are generally OK (and in certain cases actually desireable!). \n", + "\n", + "In this context, what is important is that overall size of the residuals is \"small\"." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# extract the raw residuals\n", + "rabbits_residual = residual[:, 1]\n", + "foxes_residual = residual[:, 2]\n", + "\n", + "# typically, normalize residual by the level of the variable\n", + "norm_rabbits_residual = np.abs(rabbits_residual) / rabbits\n", + "norm_foxes_residual = np.abs(foxes_residual) / foxes\n", + "\n", + "# create the plot\n", + "fig = plt.figure(figsize=(8, 6))\n", + "plt.plot(ti, norm_rabbits_residual, 'r-', label='Rabbits')\n", + "plt.plot(ti, norm_foxes_residual**2 / foxes, 'b-', label='Foxes')\n", + "plt.axhline(np.finfo('float').eps, linestyle='dashed', color='k', label='Machine eps')\n", + "plt.xlabel('Time', fontsize=15)\n", + "plt.ylim(1e-16, 1)\n", + "plt.ylabel('Residuals (normalized)', fontsize=15)\n", + "plt.yscale('log')\n", + "plt.title('Lotka-Volterra residuals', fontsize=20)\n", + "plt.grid()\n", + "plt.legend(loc='best', frameon=False, bbox_to_anchor=(1,1))\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 29 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Understanding determinants of accuracy\n", + "We can use [IPython widgets](http://nbviewer.ipython.org/github/ipython/ipython/blob/master/examples/Interactive%20Widgets/Index.ipynb) to investigate the determinants of accuracy of our approximated solution. Good candidates for exploration are... \n", + "\n", + "* `h`: the step size used in computing the initial finite difference solution. \n", + "* `atol`: the absolute tolerance for the solver.\n", + "* `rtol`: the relative tolerance for the solver.\n", + "* `k`: the degree of the B-spline used in the interpolation of that finite difference solution." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.html.widgets import (interact, FloatTextWidget, FloatSliderWidget,\n", + " IntSliderWidget, TextWidget)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# reset parameters\n", + "lotka_volterra_ivp.f_args = (1.0, 0.1, 2.0, 0.75)\n", + "lotka_volterra_ivp.jac_args = lotka_volterra_ivp.f_args " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can make use of the `@interact` decorator and the various IPython widgets to create an interactive visualization of the residual plot for the Lotka-Volterra \"Predator-Prey\" model." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "@interact(h=FloatTextWidget(value=1e0), atol=FloatTextWidget(value=1e-3),\n", + " rtol=FloatTextWidget(value=1e-3), k=IntSliderWidget(min=1, value=3, max=5), \n", + " integrator=TextWidget(value='lsoda'))\n", + "def plot_lotka_volterra_residuals(h, atol, rtol, k, integrator):\n", + " \"\"\"Plots residuals of the Lotka-Volterra system.\"\"\"\n", + " # re-compute the solution \n", + " tmp_solution = lotka_volterra_ivp.solve(t0, y0, h=h, T=15, integrator=integrator,\n", + " atol=atol, rtol=rtol)\n", + "\n", + " # re-compute the interpolated solution and residual\n", + " tmp_ti = np.linspace(t0, tmp_solution[-1, 0], 1000)\n", + " tmp_interp_solution = lotka_volterra_ivp.interpolate(tmp_solution, tmp_ti, k=k)\n", + " tmp_residual = lotka_volterra_ivp.compute_residual(tmp_solution, tmp_ti, k=k)\n", + " \n", + " # extract the components of the solution\n", + " tmp_rabbits = tmp_interp_solution[:, 1]\n", + " tmp_foxes = tmp_interp_solution[:, 2]\n", + "\n", + " # extract the raw residuals\n", + " tmp_rabbits_residual = tmp_residual[:, 1]\n", + " tmp_foxes_residual = tmp_residual[:, 2]\n", + "\n", + " # typically, normalize residual by the level of the variable\n", + " tmp_norm_rabbits_residual = np.abs(tmp_rabbits_residual) / tmp_rabbits\n", + " tmp_norm_foxes_residual = np.abs(tmp_foxes_residual) / tmp_foxes\n", + "\n", + " # create the plot\n", + " fig = plt.figure(figsize=(8, 6))\n", + "\n", + " plt.plot(tmp_ti, tmp_norm_rabbits_residual, 'r-', label='Rabbits')\n", + " plt.plot(tmp_ti, tmp_norm_foxes_residual**2 / foxes, 'b-', label='Foxes')\n", + " plt.axhline(np.finfo('float').eps, linestyle='dashed', color='k', label='Machine eps')\n", + "\n", + " plt.xlabel('Time', fontsize=15)\n", + " plt.ylim(1e-16, 1)\n", + " plt.ylabel('Residuals (normalized)', fontsize=15)\n", + " plt.yscale('log')\n", + " plt.title('Lotka-Volterra residuals', fontsize=20)\n", + "\n", + " plt.grid()\n", + " plt.legend(loc='best', frameon=False, bbox_to_anchor=(1,1))\n", + "\n", + " " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 21 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sensitivity to parameters\n", + "Once we have computed and plotted an approximate solution (and verified that the approximation is a good one by plotting the residual function!), we can try and learn something about the dependence of the solution on model parameters." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "@interact(a=FloatSliderWidget(min=0.0, max=5.0, step=0.5, value=1.5),\n", + " b=FloatSliderWidget(min=0.0, max=1.0, step=0.01, value=0.5), \n", + " c=FloatSliderWidget(min=0.0, max=5.0, step=0.5, value=3.5),\n", + " d=FloatSliderWidget(min=0.0, max=1.0, step=0.01, value=0.5))\n", + "def plot_lotka_volterra(a, b, c, d):\n", + " \"\"\"Plots trajectories of the Lotka-Volterra system.\"\"\"\n", + " # update the parameters and re-compute the solution\n", + " lotka_volterra_ivp.f_args = (a, b, c, d)\n", + " lotka_volterra_ivp.jac_args = (a, b, c, d)\n", + " tmp_solution = lotka_volterra_ivp.solve(t0, y0, h=1e-1, T=15, integrator='dopri5',\n", + " atol=1e-12, rtol=1e-9)\n", + " # extract the components of the solution\n", + " tmp_t = tmp_solution[:, 0]\n", + " tmp_rabbits = tmp_solution[:, 1]\n", + " tmp_foxes = tmp_solution[:, 2]\n", + "\n", + " # create the plot!\n", + " fig = plt.figure(figsize=(8, 6))\n", + " \n", + " plt.plot(tmp_t, tmp_rabbits, 'r.', label='Rabbits')\n", + " plt.plot(tmp_t, tmp_foxes , 'b.', label='Foxes')\n", + " \n", + " plt.xlabel('Time', fontsize=15)\n", + " plt.ylabel('Population', fontsize=15)\n", + " plt.title('Evolution of fox and rabbit populations', fontsize=20)\n", + "\n", + " plt.legend(loc='best', frameon=False, bbox_to_anchor=(1,1))\n", + " plt.grid()\n", + " " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAGTCAYAAADa5E2kAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucJFV5//HPchFZNzCS5SrCIIKIGgacEHUlM17Doglr\nzGKiBlYT1gSMmiiI0V9YvESjRMjF23ph8bJERMVbUEBmUDCwYmBBQDcCS5QVENjlIhJu/fvjqaJr\naqq7q6vrcs6p7/v1mtdMV093n1NVp/qpc546BSIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIi4pAVwKPAMRV/znT0OSdX/Dl1eBNwHfAbrE5vzvGa/YCvArdGr9lcWen8ME3z+8OaqAx7DfGa\njcBNQ/z/ePQZZwzxmrbYyHDrsohxtP7FQVs1XQBPPJrj5/cbKFdnxNePk+/ANOrnNO1PgdOB+4EP\nA6uA/xrwmq2Bc4GlwNej17y/shL6pen9ocjnl/GaNQwfrIWojO3/KDBTw+eIlGabpgvgkQ5wSp/n\nb66rICXqpH6nXQ4cANxRT3Eq8/LE71tzvmYf4OnAauCvqiiUFLag4vf/Bbbf353xnL7Ey9NrXfZb\n/yKNUcA0nHc3XYCSLUj9TvsNsKGmslRpD+zgnDdYil8D8MvyiyOOe5je+/0Cqg/Y2q7f+hdpjIbk\nyvdxrLv5j3o8/3vR82enlu8OfATLEfg/4Hbgy8AhQ3x2v27uNcwdTlgF3Bj9fQxzhxfj3Khpeues\n7Ad8FrglKu8twJnAUzP+d1X0PlPAnwDrgF8DdwJn0Q1O8toOOAm4Jnqfu4HvAct7fO409iWXrGM/\njwKz0d8nJ16TXA87YkN0P8UCy7uAbwMvSr3X30avPSfjc14MPAKsBx4/oEwA+wMfAK4AfgU8gO0v\nnwCelPH/04lyTwDfArZg62wWeG6Pz9kV+DRwGzaMeSVwdI7ypa2guz8dHn3m3cxd/8uAz2NfkPdF\nP1cAf0P/wGRr4O+An2Dr/+fYcOtv9XnNDsC/Y/vqb4Bro89JG2f+UPWjdNfBTXT3iTz5PCvoroeX\nAT/A6nkX8CWy2wwMd0wo8hmz9G4LyfcbZAfgBOAirHcoLuvXgOf0eF/o7p/p9jVO71SBouvkBVh9\n78H2wW9ivVhpuwKnYu36Pixv8SdRWfbJ+H9pEfUwlW8NsBI7uH494/ljEv8X2we4BDsYfBf4AhbY\nLMcOfq/Evuzy6DdkkHxuBvvSfzNwFZavE7tywHv+LnAhsAg7KF6HDV+9FjgSCwSuyPj847BA8mvR\n5z8HeBVwEPaF/mCfssceB3wHyxm7HvsCfAIWiH0xep93JurYwQ6ce2MBVB6nYAftY7CD7Gy0PP49\nBlyK1XkddsDeGTgKOB/4a2woD+A07GD9x9Hyj0XLd8MChfuj1z2Qo1x/DLwB+2K6BFtfzwT+EvhD\nYBLYlPG6SeBE7Et0NbYuXontaxPMPZtfHP3fPsD3o8/ZAzsRuCBHGbP8CRYw/Sfw0ejzY+/Hgsb/\nwgKZHbGg81+w/axXoHY6cBi2zbdE7/+WaNnzsS/TpO2w+u4ArI0evzL6nKcBb8z4jOR+fwoW3B0U\nffaWaPmW9Iv6+GMsJ+4r2DY8OCrDC4DnMXc7FD0mDPMZ6TpmyTMEeSDwXuBi4BtYkLE31taXYvvm\nd6L/vRJblydjQc+axPvMDvjsouvk5dhx6T+x9vcM4Ahs/zoQO3EDWIi166dg7fhrWNA+HtXlS1Sf\n8C7iveQZ0KqMn7en/v8n2BfgE1PLt8PO+H7J3N6970Tv/47U/z8XeAjLIXpCYvkK5p7xJst5UY86\nrGF+wure0bLP9HjNdPT8PySWLcAClUeAP0v9/1HR/1/P3N6BVdHyLdjBKukL0XPp3qFe3hH9/zeZ\nuw53pnvmn+45mY3KO4xp5tc99onouY+llj8Vq+MDzA0KdgL+FwuOficq94UMf6XjHsC2Gctfgg1j\nfLRHHbL2lZXR8o+klq+Olv9zavmzsQCt1zrJsiL6/4eBl/b4n6yz9gV099dDU8/Fy28Hnpx6zTnR\nc+9KvWZjtPx7zF1/TwR+Fj13WGL5ONntIv7sYZO+V9DdDkeknntTtPzC1PKix4RhPmOW3u0ifr/0\nfrORbs90bAdsH097EhYEX5fxXL9j1TjZ67/oOnkQCxiT/jF67oTEsj8ke98H61xY1KO8IpIw6Aq5\nu1L/H3+pH5da/ifR8lMTy/ak27W/dcZnfzZ6/s8Ty1ZQTsA0zvAB05Jo2SU9XvM95n8BrYqWZeWA\nxZ/xwR7vl/Y/2Bfw/hnPvT56r0+nls9SXsD0OLrDgGMZr3t39Lr/l1q+BDuoX0/3YP3ZIcvUz9XA\nDall03QDhbRtovKsSyzbFqvbFrKHts6gWMD05Zz/n3QI2cHPmmj5O9MvwIKvh5n/hb4xes2SjNfE\nw9HJNjCesSz52UUDpqweuq3oBm3x+45yTMj7GVBewNTPv0bvs2dq+bAB0yjrJKudxZ+RTI2IA6b3\n9SiXtJxymPLrYOsr6yd9dhU33nTvQdZw3MHR7++TffCKDyoTRQpdgThXoNfBLs6hyipv1jDdL6Lf\n6d64LL8F7IsNO2Ulhdaxrp4GbI/lHWUNx/Qqw6VYD+XTsPyrDRS7+u61WE/Br7CAJw7an0nvXLCs\n9f4wlqOUXO8HYHW7Crg34zUXFygvzA3K0n4by8u6GssZiesTlzkrN6tXWW7C9qe9sV6PpIewoca0\n2eh3He0rq8zJk4+4DKMcEwZ9xsEZz5dhCRZ8/BzrYY23YzzU2Ws75jXKOsl73JnFesROAs7DeuYO\nQd+TElEOUzVuwcbYX4J9Cf0E2AXLs7gS+HHif3eMfve6Giu+siurN6MJg8obL88qb1aA8XD0O+us\ncdjPrmNdjVKGrwLvwYaPPoUN0Q3jNCznbBN2QI+TlwFeR++ej155Ng8zd73Hdbutx/8Pc5VhnteN\nAT/EzvYvx04k7orK9USsrtv1eG2/Mj4Zq8s9ieV3kJ2PE7/PjhnPlW3Qet0x9bvIPjboM9KBZBle\ngQ2H3o/1cN2A9VQ+ig2FTdF7O+Y1yjrJe9y5F8urPAXLWfqDaPkd2HD3exOvkxZSwFSdM7GA6Rhs\niO41WOM8M/V/8Vwju/V4n91T/zdIr21aVhBRdnl9+exRy/B47IrADnYAPxm7KCDv5dO7YGe812DJ\nu79OPf+anO/TT1zmXXs836vOg/RKHP5LLFhaxfzh2ufSfzb2XbHh2bS4jOn1vxgLVNNl6fX/VRi0\nXu9O/S6yn+f9DOherbZV4u/YMMeL92C9SpPY1WVJT8ICplHV1fZvwfZLsITwFwLHY8PQW5F/OFoC\npK7G6nwFO2N5DXagPgYbFlib+r//jn4/n+xelhek/q+fzcxNhI1tjXVVp78sHkk8n1dcjnQSJanl\neco7rHuxs9c9yb5MusrPjsWXsR9Edq9ErzJ8GEv4/kds5vGF2BVej8v5uU/B9qPzmR8s7Rk9P6rr\nsbpNkN0TMV3CZyTF2zArx2nQl+x0xrKnYPv/Rub2LoHlZ2XlMMXvk74yNEuR9pL1WUlbY22/kyjD\nKMeEvJ8BdrxYQHbP5GTGsl6eiiV2p4OlraLPzdKh2HGnjONkXtdhV+G+JHp8ZInvLR5SwFSdB7Av\nxD2x+WJ+B7usNT1r9i1YN/Y+2GXRSb8HvBobpvhqjs+8HMvfeElq+bvIPijG90bbO+O5Xi7FDozP\nxy7jTfqTaPlP6Z0UPqrPYAf5DzF3/12MJVp36J3EXoaHsOkAdsDOrJP2xXqBHgQ+l1j+Sixf6RKs\nZ+kCLMn9IGyYLY/4cubDmFvvRcAnKf4lnvQw3bqtSj03STm9WElxndLB98HMvxIq7c3M3ae3wvaJ\nBfS+1c/7mRug7oS1jU6f1yTFl58P016SXohd/p70RizQm8Hyf2C0Y0LezwA7XgAcm/r/FzH/Cth+\nbsIuwtg9sWwBtg89newexjvJPrnrpczjZC8Hkt1DF/dqDTuELoHRkFx+C7Avu16T6X0VSwROOhPr\n3v3HxOMsf4UFIh/CLr/+EXYwWY59ib2O+b0KWU7Fxt2/hgVrm7Hhm3EsoXE69f/3AZdhX8Kfx4Y4\nHolef02fzzkGO3h9Mfrfn2LJzMuwM/v0lTVlOhWb2+VIbH2fh/XWLMeCpg+Sndxb5uzMJ2Hr7I3Y\nXC6z0WcfhV3W/Ea6t8oZx/KV7sIO6vGXx7uwuaT+Gst3+8qAz7wN+A+sd+oqbP3viAXH90fLykhc\n/nvsC/MtWJB0KfZFeBQ2x02vCVmL+Cx2WffpWND0M2xC1JdhvU5/2ue1l2B1/iK2z/0BdlJyBdlX\nXP4Sy6P5MTYU+jgswN8Nm1ohT4B/IfA2LECNe5A3M39qhl6+gR0nvor1lE5geY13Mv+K2qLHhGE+\n4wxs/b8DC96vxwKfw6P6pU+IejkNm6fryuh1D2G9eU+PyvOHGa+5ENu+X49e9xCWsP79Pp9T1nGy\nl5dG7/0D7Fh4O3bCeyR2XPzQCO8t0hqPYg2m17QCj9A7SNgQPf8r+geoe2CJhRvpzmD7FWz+m7Rj\n+nzmH2KJtL+JPnMtdlA5I3pNuqdpX+ygdUf0fPJ9p+l9Gfn+2BfeJqxH5Zbo8X4Z/3ty9L6/n/Hc\nOP2nNsiyHXaQvwYLFuKZvl/V4/9nKHceJrBg5QPY9n0AC4i+g03aGdsGC0gfwYLJtL2i191JvkvV\nt8cST/8H2743A/+G9ZRk1XFQHW4i+xLxeKbv27H1+9/YPjE14P3S+u2nsadjQfdtWAD/Q2x6iF5z\nhMX78TjWcxsPI8YzfWfNlRPX87ewIZZfYNvsWrInrBzv8dlgM7dfR/dKsDyX2K+ge4n+MDN9D3NM\nKPoZB2KB8D1YAHgRdjLQa9v12meOwQKf++jOvv0Merf9nbE52G7Fgp1H6O5X4/Re/2UdJ2H+1AYH\nYHMw/TB63wewup7N/BnLRSr3ZOzAfi12pvemaPkq7CB2ZfRzeBOFExGpwAqy5zTy7TNEWq3uIbmH\nsDO0q7AzwR9hQwsd7OzwwzWXR0RERGSgugOmW+nOl3Ef1p0eT2imO4CLiIiIk5q8Sm4cuxrmsujx\n32BJvJ/GnUkaRURG1SHfTWxd/wwRacAi7GqWOBF2F6yHaQGW1Jq+F5iIiIhIY5oYBtsWu9P8edjl\nxGnj2KWoz0ou3GOPPTqbNm2qvHAiIiIOuYHeVzlKjeoekluA9R5dx9xgKTnh2SvImANo06ZNdDqd\nYH9OPvnkxsug+ql+baxfyHVT/fz/waZ+EQfUnfS9BLvb+tV0p+j/e2xW2fjWHTcBb6i5XI3buHFj\n00WolOrnt5DrF3LdQPUTKUvdAdMlZPdqnVdzOURERERy073kHLFixYqmi1Ap1c9vIdcv5LqB6idS\nFp/mPupE47kiIiKtsGDBAvDruzpY6mFyxOzsbNNFqJTq57eQ6xdy3UD1EymLAiYRERGRAXzq5tOQ\nnIiItIqG5NyhHiYRERGRARQwOSL0cXjVz28h1y/kuoHqJ1IWBUwiIiLStBXA9/s8Pwv8RY/n9gLu\npeKhS5/GRZXDJCIireJhDtNGYBfgEeDXwAXA8cA9A163AguIDuvx/AzwOeAzOcowG/3vp3P8b27q\nYRIREZGydICXA78FHAQ8C3hXA2UonQImR4Q+Dq/6+S3k+oVcN1D9pFG3AecDz4genwT8DOttuhZY\nlvr/BcC/AVuA64EXpp5/KnA5cDdwLvDEaPk48CiwNfA+rJfq37Fhun+N/ue0qDx3Y/ezjcuUmwIm\nERERKVM8hLgncDgW5IAFS88HdgBOAT4P7Jp43e9F//PbwMnAV4CxxHseDbwO2B14mG4wFOsA78Ry\noY7HerneBPwBFkTtB+wILAfuLFopHyiHSUREWqVIDlMHVgP7A/cDr15gPTZDGeE9NmIBTwdYBHwN\neCXWA5R2JRYYfR3LYXof8KTE85djPU6fx3KY/gv4++i5pwNXAY8H9gZuBLaJPmcmek2cw/QC4ONY\nwPXDHmUZSD1MIiIiYdkfmAKWAp+o+T06wJFYL9I0Nqw2GT13NBYkbY5+nokFV7FbUu91M9abFPt5\n4u//BbYFFvcpR2wGG6L7CDYs9wms92koCpgcEfo4vOrnt5DrF3LdQPVrqfuj3z8E3tDge3wP6yH6\nJ+zS/09iQ2U7YflHP2Zu79mTUq/fG9iUeLxX6u+HgDsyPjdrOOrfsMDtQCwYPCFvJWIKmERERMLy\nauBs4KVFhuNKfA+A04FDsXymR7EAZyssF+mZqf/dBcs52hbLMzoA+M/ouQXAa7GhuIXAu4EvkR0c\n3Qbsm3g8ieVHbYsFgg9g0x4MRTlMIiIijvJwHqabsPmULkos+yg2tHYt8NdY4PRZ4BC6cysdA/wl\nlpf058CtwBuBC6P3mAF+ALwYC6RmsaDrLuwquRuwgOhR4DnAmcDO0ed8HbtK7ilYsPRtrNcs7kXL\nxaeNoIBJRERaxcOAKVgaknNE6OPwqp/fQq5fyHUD1U+kLAqYRERERAbwqZtPQ3IiItIqGpJzh3qY\nRERERAZQwOSI0MfhVT+/hVy/kOsGqp9IWRQwiYiIiAzg07iocphERKRVlMPkDvUwiYiIiAyggMkR\noY/Dq35+C7l+IdcNVD+RsihgEhERkbJsxG45cm/0cw+wW5MFKotP46LKYRIRkVbxMIcp615yQVAP\nk4iIiFRpO+B04Jbo5zTgcdHPldhNdgG2Bi4F3hU93gP4MnA7cCPwN4n3PBS4Argbu1HvP1daAxQw\nOSP0cXjVz28h1y/kuoHqJ41I94i9EwtwDop+DsWCogeB1wLvBg4ATope+z4sPvkGFlDtAbwIeAvw\n0ug9/wULvHYEngKcXVltIttU/QEiIiJSp85qYH8sl+jVsGBLje+xADgXeDh6PAs8C+tFuiNadgrw\nCeAfgGuB9wJfAxZjwVQn+r04eg5sqO9TwJ8C52PB1n7R/9wBXD58HYfj07iocphERKRViuUwdWaB\nqejB2bDgVcN/cuH3yMphuh94NnB99PgAYD02VAcW9PwcOAf482jZUcAXgPsS77M18D3g5cBTsZ6p\nl0SfeQrwrZxlLEQ9TCIiImG5P/r9Q+ANDb5HbBMwTjdg2itaFvso8E3gcGAJlsf0cywQ2r/He/4M\neHX09yuxYGsn4DcjlrUn5TA5IvRxeNXPbyHXL+S6gerXUq/GcnpeWmw4rrT3iJ2F5Swtjn7+Afhc\n9NyfAwcDxwBvAs4EngCsw6YlOBHYHutdeiYwGb3utcDO0d93Y8N4j45Yzr4UMImIiARlwRYbQhsl\n0CnjPR7zXuyKtqujnyuiZXthidtHYz1aZ0XPfRh4BBt6m8CukPsVsBrYIXrPPwB+jAVVp2G5Tf9X\nQll7Ug6TSJutXAkbNsDChbB2LYyNNV0iP2i9SU08nIcpWOphcsHKlTA9DUccAVvKCOZbSOuwmA0b\n4OKL4bzzbB1KPlpvo1ObFc8oYHLBhg3MxgffQw4J8iBSSZ5B8oB73XWNfoF5m0excKH9npyE1at7\n/pu39cuhUN1yrjcXOLft4nZ7zjmltFnn6ifB0lVyLkgefLfbzg4iYAeRsyufi8tf8Vk+wG7RrYo8\n+AJzytq1tp+tXq1hpWEk19uJJ2p4bhjJdgtqs+INn8ZFw81h2rKle/B99avtjGtyEi64QAfffo44\noruuzjkHTjhBX/x5KP+mXNPT3QBg+XKd5AwSt9uJCRgfhzPO0D7Yh3KY3OHTRgg3YEpKBk86iPSn\ndVVMry94BVLFJAN3neQMpnY7FAVM7lAOkyMeG4cfG7MvsMAOJJXkGTi0rrzKo+iVf9Mnkdmr+g1p\n5LqtXWuBp6PBknPbruR261z9JFgKmJqiK0SkKb2+4D1KZG5MVrt1KHAXker41M0X1pCc8h7ENRoq\nGUztVmqmITl36Cq5puhsvjrKxSkm7imR3tRuq6E2Kx7QkFxTUsMioY/Dl1q/QcOZDUwqqO3nr6Hq\n5ni+UhYntl2FbdaJ+kkrqIepKTqbLy45j0vWXFXqBZCqqN0WozYrAfBpXDSsHCYpbtBl3MrFEXGL\n2mxhymFyh08bQQGTGB1cRfyiNluYAiZ3KIfJEZnj8AFNPVBqnoGDl3F7kUcxwv7kRf0KqjW/rgFO\nbLsK26wT9ZNWUMDkMt0RXcqk/al6WsciwfKpm699Q3K65YKUSftT9bSOpWQaknOHTxuhfQGTxv2l\nTNqfqqd1LCVTwOQODck5InMc3sFcnaJCzzPwon4j7E9e1K8g5df5LfT6iTsUMNXNwaRQEelDbVZE\n8KubL4whOd2LSnygW1V0qc1KgzQk5w71MNVNM9qKD3S1V5farIhQf8D0ZGAGuBb4MfCmaPlOwAXA\nBuB8INzT2R73ogp9HF7180wqSAiufgkD6+bh/eOSQt52EH79xB11B0wPAX8LPAN4DnA88HTgJCxg\n2h/4bvQ4TA4mhYrM43mQUCq12WKU+yWBaXpc9Fzg36OfKeA2YDdgFjgg9b9h5DBJMcqpEfGLcr9K\noRwmdzSZwzQOHAxcDuyKBUtEv3dtqEziKuXUiPhFuV8SmKYCpkXAl4E3A/emnutEP60S+jj8yPUr\nevCtaVhA289fIdcNGqxfTcO6oW8/ccc2DXzmtliw9DlsSA66Q3G3ArsDt2e9cMWKFYyPjwMwNjbG\nxMQE09PTQLfR+Pr4qquucqo8ztXvuOPg/vuZPvdcGBvL//qoZ2oWYNkypqPlztXP8ceh10+PK3oc\nDcMN9fqVK5ldtw62247p73xnuPYewOPZ2VnWrFkD8Nj3nbih7nHRBcCZwJ1Y8nfsg9Gyf8ISvseY\nn/itHCYZnu7tJeIX5T7NoRwmd9S9EZ4PfA+4mu6w2zuAdcDZwF7ARuAoID1+ooBJhtf2e3spWV58\no5OcORQwuaPuHKZLos+cwBK+Dwa+DdwFvBibVuClzA+Wghd3yYaqsfrVdEm4s9uvpGR5Z+tXgpDr\nBh7Wb8jcJ+/qJ95qIodJROqiK5XEN/FJjohjfOrm05CcyLDaPiQp4jkNybnDp42ggElERFpFAZM7\ndPNdRwwch/f8NgOh5xmofv7KrFsZ7c2RNhvytoPw6yfuUMBUhzIOnJrpWqQ+ZbQ3tVmRoPjUzefv\nkFwZ84roUluR+pTR3tRmpQQaknOHepjqUMaVSrp7vEh9ymhvarMiQVHAVIccB86B4/A1zSdUldDz\nDFQ/f2XWrYz25kibDXnbQfj1E3doHqY6aF4RERERr/k0LupvDpMUo9t6iPhFbbZ0ymFyh4bkxF26\nykjEL2qzEjAFTI4IfRy+UP08uq2Htp+/Qq4b1Fy/Btps6NtP3KGASdylq4zcsHIlvOUtjU/AKB5Q\nm5WA+TQuqhwmkSaUMY+YiBSiHCZ3qIdJRPrzaGhURKQqCpgcEfo4vOpXo7LvYbZ2LbNTU8EOszi1\n7Sqg+omUQwGTSGjKvlJpbAxWrQoyWBIRycuncVHlMInkoXuYiQRDOUzu8GkjKGASyWPLFutZWr1a\nwZKI5xQwuUNDco4IfRxe9atRBfcwc6p+JQu5bqD6iZRFAZO0R9nJ0CIi0ho+dfP5NSSneyq5R/MJ\nST9qs+7RNtGQnEPUw1QV3VPJPZpPSPpRm3WPtok4RAFTVYb8cg59HN6J+lV42wYn6lehkOv3WN0C\nDai93nY5tonX9ROvKGCqiu6p5J4KkqElIGqz7tE2EYf4NC7qVw6TiIjIiJTD5A71MImIiIgMoIDJ\nEaGPw+eun6eX/mv7+SvkukEN9Wu4zYa+/cQdCpjELboqRsQvarPSEj6NiyqHCcKfl0T3QRPxi9ps\npZTD5A6fNoICJgh/8kXdB01CFPKJjtpspRQwuUNDco7IPQ7v6Vwxuevn6aX/oedRhFy/WurW4LBV\n5fVruM2GvG+KWxQw+Ubzkoj4x9MTHRHp8qmbT0NyIr2EPOQTAg1bSUEaknOHTxtBAZNIL6Hntom0\nlAImd2hIzhGhj8OrfhWreMin8fpVKOS6geonUhYFTCIhUG6biEilfOrm05CciIi0iobk3KEeJhER\nEZEBFDA5IvRxeNXPb7Ozs43fM6wSK1cyOzERVp1SWrFvitRAAVOZQvxCEYmFeM+wDRtg/fqw6iQi\nlfBpXNT9HCZd2i0hC/GeYSHWSYKiHCZ3qIepTJrNV0IW4pV4IdZJRCqhgKlMIxx8Qx+HV/38Njs7\n2/g9wyoxNsbscceFVaeUVuybIjXYpukCBCX+QhEREZGg+DQu6n4OkxSj+6CJ+EftthbKYXKHhuSk\neSFefSUSOrVbaRkFTI4IfRy+b/0CSJZv9fbzXMh1gwrr50i7DX37iTsUMEnz6r5SSfNliYxOVxhK\ny/g0LqocJimH5ssS8UuL86WUw+QO9TBJ+zgylCAiOSlfShyggMkRoY/DO1W/CoYSGqtfTcOLTm2/\nkoVcNwikfn1OcoKon3hBAZO0T0gTMOrMW9pA+VLiAJ/GRZXDJJKme6GJBE05TO7waSMoYBJJ27LF\nepZWr1awJBIgBUzu0JCcI0Ifh1f9KlLT8GLI2y/kuoHqJ1IWBUwiIiIiA/jUzefukFyL5wgR8ZLa\nrHhCQ3LuaKKH6TPAbcA1iWWrgF8AV0Y/h9dfrBE0daWSZqwWKUZtVkSGVCRg2hpYmPGT1xnMD4g6\nwIeBg6OfbxcoV3NKmAix0Di8R5eUh55noPp5JtFmZ48+ur7PbaDNBrftUkKvn7gjb8C0I/AR4JfA\ng8B9qZ97h/jM7wObM5b72+XY1BwhmrFapJhkm120qL7PVZsV8VbeIOUs4OXAp4DrsaApbc0QnzsO\nfAN4VvT4ZOB1wN3AFcBbgXR/tbs5TE3RJeUiflGblSEph8kdeTfCXcDbgU+W9LnjzA2YdgF+Ff39\nHmB34C9Sr1HAJCLSJCXL104Bkzu2yfl/9wM/r7Actyf+/hQWTM2zYsUKxsfHARgbG2NiYoLp6Wmg\nO47t6+PTTz89qPrkqt+ppzJ9332wcCGzxx0HixY5U15tv/bUL5kD40J5nK5flIM1C7BsGdPR8mDq\n58Dj2dkqg84BAAAgAElEQVRZ1qxZA/DY95345W+Br1PeVXXjzL1KbvfUZ63NeE0nZDMzM00XoVKZ\n9Zua6nTAfpYvr7tIpWrl9gtEyHXrdEqu39Kl1l4nJzudzZvLe98RhL79sIuixAF5u/k+BByF5S7N\nMD+/CODEnO91FjAFLMamFzgZmAYmsB3jJuAN0XNJ0b4jwdB90ET8ohys2mlIzh15N8JGLJhZwPxo\nN162T3nFyqSAKTQ6+IqI9KWAyR15h9jGsYAo/p38iZfJCJLj8CHKrF9N90GrQ+u2X0ATMLZu2wUm\n9PqJO3QvORHfuBCseDRpqohIGYbp5tsXOAF4PrATcCdwCZbfdGP5RZtHQ3IiYMHSxRfb38uXWy9d\n3ZR/JlILDcm5I28P07Oxe7z9MbAO+Cw2weQro+XPrqR0IjKfC7NFNzW7vYhIQ/IGTKdigdE48Hrg\nJGxm7vFo+akVlK1VQh+HV/1K1ECwMq9+yj/zhuonUo68E1ceCrwKm8Ay6X4sWGpgTECkpeJgRURE\napN3XPQO7P5uZ2Y8dzRwOpbXVCXlMImISKsoh8kdeYfkvgW8Hzgstfww4AP0uJVJ0Fy4UklE8lOb\nFZER5A2Y3opdCXcx8EvgauDW6PGN0fPtUvJl1aGPw6t+fguifj3abBB160P1EylH3hymO7DpBA7H\n8pl2xwKny4Dzqyma41y4UklGp7uvt4farIiMwKdxUbdymHRbjzC4MKeR1ENtNgwtO8lRDpM7+m2E\nhcBvsPvELczxXukr6MrmVsAkYdAEjCJ+adlJjgImd/TLYboP+N3E3/1+7q2wjK0Q+jj8Y/VzLfG2\npDmNWrP9AhRy3aCE+rnWZlNDq6FvP3FHvxym19O95cnrayiLtEGceAt2IG767FBzGon051qbXbtW\nQ6vSCJ+6+TQkFwINgYn4RW22URqSc0feaQVuBA7q8dyzqOfmuxIC3YNMxC9qsyJA/oBpHNiux3ML\ngSeXUpoWC30c/rH6BXQPsqTWbL8AhVw3KKF+jrfZ0LefuKNfDtOO0U/cFbg7sFfqfx6P3WPulvKL\nJkNp2aW2raPtKyLSqH7joquAf8j5Pm8DPjxyafpTDlM/LbvUtnW0fcOjIFhyUA6TO/r1MK0Froj+\n/joWFG1I/c+DwE+Bm8svmgxFsxiHTds3PK5dfSYiffXLYdoAfDP6eSHwycTj+Od8FCyVYuRxeMcT\nM0PPM6i8fg1v35C3X2N1qykIDnnbQfj1E3fkvZfcbOLvrbDcpbSqZ/qWfjSfUNi0fcOj+YREvJJ3\nXHQB8HbgWOyKufh1nejvDrB12YVLUQ6TiAxHeULiOeUwuSPvtAJvAk4CPo1tuPcCp2DDdjcBb6ik\ndK5x7RYBItJfnCd03nnWfkVECsobMB0LnAx8MHp8LhYwPRNL+n5q+UVzUIUH39DH4VU/v3lbvxx5\nQt7WLSfVT6QceQOmfYArgUeAh4C4X/sR4CPAitJL5iJdqSTiF8cvhhARf+QdF/1f4HjgG8DPgI8D\np0bPvRYLmnYsvXRzNZ/DtGWLkjRF0pQnJFIZ5TC5I+9Vcj8AJrGA6QvYpJY7YfMwHQ98t4rCOUdX\nKhWjL9SwaT6h8KjNisyTd0huFRAdEXk/lvy9AksGvwj4q7IL1jZBj8Nv2MBs4Im3QW8/BtTP86Hq\nVm+7XjxKlg99+4k78gZMP8ECI4AHgDcDe2C9TK8Cbi+/aBIMz79QZQDlCYVHbVZkHp/GRZvPYZJi\nlPsl4he1WWcoh8kd/TbCl7AJKfO8Rwc4qpQS9aaASUREWkUBkzv6DcntHP3s0udn58SPjCD0cXjV\nrwCHJkoNefuFXDdQ/UTK0u8quem6CiHiBNeuDNLVZyIizvCpm09DclKt6elugLJ8efMByhFH2FVK\nk5NKqBbJ4tpJTgU0JOeOvPMwfYje+UxxDtOJpZRIpCmuXRmku9mL9KdeWKlR3mkFlmf8rATeht1n\nbnklpXNBTXkkoY/De1G/ES6Pr6R+8USpDgRLXmy/2JBt1qu6FRB0/RYuZBbcOcmRoOUNmMax+8kl\nf8aA5wI3A6+ponBO8GgCNxmRQwGKjEBttj3WroWpKQ1ZSy3KGBd9LfC3wLNLeK9+mslhUh6JiF/U\nZiUgymFyR94epn7uBA4o4X3cpFmMRfyiNisiFcgbMC3M+BkDnge8B7i2ktK5oKZhmlLzDByavycW\ndB4Fqp9ThmyzTtStwjabu34OHjfycGL7SSvkvUruvj7P3QK8ooSySFlcuHIkfbmviPTmQpt1oQwi\nDss7LroiY9kDwC+Ay4GHyipQH5qHKS8Xcjhcm9NIxGUutFkXyiDzKIfJHT5tBAVMeblw40wdfEXy\nc6HNulAGmUcBkzuGTfp+GnZV3AnR73CTvWtW6ji8C5fHpxJvQ88zUP385UTdKmyzuevnwnGjACe2\nn7RC3hymHYBPAa/EIt37gEXYDN9fAf4CuKeKAoqn4oOvDKcFt3oQEfFR3m6+zwMvA44HzgXux66U\newXwEeBbVD95pYbkJHzK/RKRBA3JuSNvD9ORwN8Bycud7ge+gAVOp5VcLpF2cu1+dsNSD5mIBCpv\nDtOvgU09nttE/2kHJIfQx+FVv5wcnXQxd/2aui3JCHMIad/0W+j1E3fkDZg+gt1od2Fq+ROwBPCP\nlVmoxnk6gZsEwNPE28c01UOm+8eJSMXyjot+CPgz4PHABcDtwK7AS4DfAGdhCeCxE0ssY6y+HCbl\nkYgU09Sl6ZrGQgKlHCZ35N0IG7GAKP7/5N/x4/j9OsA+ZRQupb6ASQdfEb9oDiEJlAImd+QdkhvH\ngqDxjL/jx/sk/vZbA3kkQYzD9xnK9K5+Qw7Lele/ITlfvxGGMp2v24gG1s/zFITQt5+4Y9iJK9vB\n9zySpoSURxJSXUT6CWVf9zzwE/cN0823L5bg/XxgJ+BO4BIsv+nG8os2j+Zhcl1IQ5kh1UWkn1D2\n9UBzTzUk5468G+HZwAx2w91v0k36fhmwHfBC4EdVFDBBAZPrQsojCakuIv2Esq/XHfjVNOeYAiZ3\n5B2SOxW4EstRej1wEvC66PGV0fMygiDG4fsMZXpXvyGHZUeun+PDCd5tvyGEXDfIUT/PUxAeq1/d\nuaehDGVKbnln+j4UeBU2u3fS/ViwFEbfZ4g087If4oMv2DYLZDhBpDZ137/S91n5ZWh5u/nuAN4K\nnJnx3NHA6VheUx6fwYbybgeeFS3bCfgisDc2hcFRQPo0W0NyRQQ6rh+cUPJIZHQ6yfFDTUOZGpJz\nR94huW8B7wcOSy0/DPgA8I0hPvMM4PDUspOwCTH3B74bPa6f48MihegsyA+O3hLFeSG2WQ31+MHz\noUwZXt6A6a3YlXAXA78ErgZujR7fGD2f1/eBzallf0S39+pMYNkQ71eeBg9UleVROPJF3Po8kUEc\nP/g6u/1KaLPO1a3kkxzn6ley0Osn7hiUw7QQWIold38cu6fcfsDuWOB0GXB+CeXYFbgt+vu26HH9\nQuyNqXtcX6ROIbbZtWvDuGpNJDD9xkWfgg2P7Z1Ydg+W/P2dET93HBvGi3OYNgNPTDx/F/Nzojqd\npUurHdMP5fLauinnQrLUsV+ozRajNusN5TC5o18P0weBR7CJKuMpBT6G9TSVffuT24DdsGG+3bGE\n8HlWnHce40uWwPLljI2NMTExwfT0NNDtlh35cdQbU9r7teHxhg3MRonl09EVXk6VT4+bebxuHdPr\n19vjZctg1apqPk/72/CP162D9euZBli5ktnjjnOrfC1+PDs7y5o1awAYHx9H/HAL8GepZfsDj2JB\nzSjGgWsSjz8IvD36+yQskTyt05mc7HQ2b+6EaGZmpukiFLd0aaczYPt4Xb8cVL8MOfYLF7Ry23my\nbfIIffvRvbm9NKxf0vfuwA2pZfEtUHYb4TPPAn4APA34OTYB5geAlwAbsFnDswKmxhOXpQdHEsu9\nE+IVXknaL9ylbVNM6G1W+uo3Lvoo8BxgXWLZ1sBDwCTw3xWWK0sUbIvUqMpcD82RJeKXBtqscpjc\nMegque8AD2cs/25qeQfYpaxCiTijyhm4Q7zCS8QFVZ3oqM22Wr8huXcD/4JNJZD86bXcT450scZJ\nf6Hytn45D5CF6ufRsIhT26/kNutU3SrQyvpVNaeeR21Wytevh2lVXYVolO7hJf1UOSeO5sgqRm1W\nBqmqJ0htttV8GhetJoepLffw0rwrEoq2tFkot9226RgQ0PxcymFyh08boZqAKaCG1VfZyYptOviK\nW9rSZqHcdquLDLykgMkdee8lFy5H7uFVeZ5B2V3UQ+YItDKPIiBO1a/kNutU3dJKaLeP1S/QhGWn\nt58Exb+AyZEkbe+UnawY6MG3cm3cf9tY57KU2W6VsFyM9l+J+NTNZ0Ny6lZ2Q5uGRcrUxv23jXWW\ncDS8/2pIzh2D5mFyTxk9G8q/GZ2uFimmjT1zarPisza2Wcnk35BcGd3KVc3RMYLQx+GDqF+frvnc\n9fN0WGSk7ed4mw1i3+yj1fUrYzjN0zYr5fOvh6mMng2dMRTT9rP8Mub/aWPPnNpsc1auhHXrYI89\n1GbVZmVEPo2LljetQNvzb4oGPm3PRWnT/D+uUZtVmy0igDarHCZ3+DckVwZHphJoTNHhjbaf5Rft\nmtdVNqNTm1WbLUJtVkrkd8A0zE7teAOoNc+g6EF0hLH8IPIo+nxp962fgzlzwypt+znYZr3YN0do\ns7NTU972ruTRd/sVDbQDaLNSPr8DpmF2ajWArqKBT9vP8otq+1l+ktpsMaO02VWr1GaHpTYrGXwa\nF52fwzTM+HQAY9mNaHuidy/DrJe2598kqc1WT202m6dtVjlMUkRnns2bO53ly+33IMP8b5sce2yn\nMzXV6Sxdmr1upqY6HbCf5cvrLp27Bq2XQeu1rdRmR6c2W0ye9eJguwUquImqhK7/XpW1ozu48/cy\nMzPTzAcPOogsXWrPTU6OtA4bq19VUutlXv0C+9KqZPv1ap81t1vv9s1e+1a83hYv7r9vBiZ3/fIc\nyxxstyhgcoZ/8zD1kpxv45BDYK+94OqrYfNmW1Z0Do7QJcfqt9/ekmwXLoSdd4abb4Ztt4Vly+CM\nMxrvmnbK2rXdLvsTT+zOdROvt2uvtf9TDkRvWW124UK45x649FJbrnY7X682m1xve+6pYcy0dJuN\nh+fiNrtwoR3vQO1WvNc/DE+ePSxZ0j1LKKF3JGjJYY/k2VV8lurQmZazeq23PffUftdPrza7225q\nt/30arNab/n1arNHHuncMDDqYXKG31fJJSWvItlhB1s2MWG9IzrT6i155VvyzHViovu3zrT667Xe\nrrlG+10/WW12chIuu0y3ouinV5vVesuvV5tds0ZXAksQ8ofkHiaLOpFnkFxvJa9DJ+pXlc2bOzNT\nU5WsN1dUvv0aXG9e75s51pvX9cuhUP0qPNaVDfUwOSOcHKYk3funmPR60zrMJz3Xjdbb8NRmi9F6\nK0bHOinAp7kdomBbRESkHTQPkzvCyWESERERqYgCJkd4cT+rEah+fgu5fiHXDVQ/kbIoYBIREREZ\nwKdxUeUwiYhIqyiHyR3qYRIREREZQAGTI0Ifh1f9/BZy/UKuG6h+ImVRwCQiIiIygE/josphEhGR\nVlEOkzvUwyQiIiIygAImR4Q+Dq/6+S3k+oVcN1D9RMqigElERERkAJ/GRZXDJCIiraIcJneoh0lE\nRERkAAVMjgh9HF7181vI9Qu5bqD6iZRFAZOIiIjIAD6NiyqHSUREWkU5TO5QD5OIiIjIAAqYHBH6\nOLzq57eQ6xdy3UD1EymLAiYRERGRAXwaF1UOk4iItIpymNyhHiYRERGRARQwOSL0cXjVz28h1y/k\nuoHqJ1IWBUwiIiIiA/g0LqocJhERaRXlMLlDPUwiIiIiAyhgckTo4/Cqn99Crl/IdQPVT6QsCphE\nREREBvBpXFQ5TH2sXAkbNsDChbB2LYyNNV0iP2i9FaP1Njqtw2Latt6Uw+QOnzaCAqaU5IHjnnvg\n0ktt+fLlcPbZzZbNF9PTcPHF9rfWW37J9bbPPrDXXu35AhuF2uzo2tZmFTC5Q0NyjigyDr9hgx04\nzjsPbrjBlk1OwurV5ZatDC7lGaxcaQfdI46Abbe1ZZOTsP323eVbtgz3ni7Vrwrp+i1caL8nJ2GP\nPbr74cqV9ZdtVHVuuybabAj7Zr82OzExW6jNigxLAZPHkl9al11mZ1sXXAAnnlj8i78Nkl9aT3hC\nd73dfLPfX/xVS35pfexj3fW2ww72vKvBukvUZovp12bXr1ebFUnryFybN3c6y5fb76SpqU4H7Gf5\n8kaK5rSlS23dTE7OXXe9lovptV/12g9lPrXZYtrcZgHlosjQmt5vnXDssXZwXbq09wGiDQeRUfT6\n0tIXf3959qs8+2cbDVovarP9tbnNooBJCmh6v63UzMxMrv/Lcybq4kEkb/181Yb65dmvfOwpqWPb\nDVovVbbZNuybIUMBkzO2aboAKRuBe4BHgIeAQxstjYOSORC98kXGxsK/cqRqbbt0OY88+1We/bON\nBq0Xtdlsw7RDtVmpmmuXKt4EPBu4K+O5KNhuty1b7MCwerUOCMMa5oDatkuXy6L9M5vWSzHDtMNQ\n26ymFXCHaz1MoB2jr2HPRHXW1RVfaQO2XvqtR/WUFKOekmzDrBe12a5h2qHarFTNtWkFOsCFwBXA\nsQ2XpVZVzZWSvBy3yctuXZgLZpgD6tq13UuX83xhuVC/qqxcGfZcN65tu7LbrGv1G0aedhjXb9g2\nKzIs1wKmJcDBwFLgeOCw5JOhHrCrpLOurmEOqHGPgA689gVeZK6b5LxNarf5qc12DdMO1Walai4P\nf50M3Af8c/S4A8dw4IHjLF8OY2NjTExMMD09DXTPMvR47uOJiWlWroSjj55l0aLmy6PH/j0+4gg4\n77xZ9t8fLr98mrGxfK9/y1tg/Xp7PDU1y6pVbtTH9cdbtsCyZbO87W3w8pc3Xx49rvfx7Owsa9as\nAWB8fJxTTjkF3P6ubg2XNsJCYGvgXuAJwPnAKdFvgM7kZKe13a3Ka2iG1nvxhGULtKynpI3tVvtO\nc0Ja90r6dodLQ3K7At8HrgIuB75JN1gCwj7oxmcYvbiSi1TUoPq5Ku9697V+eYyNwXHHzQ7d9nzJ\nKalq27nSZkPeNyG7fq6sewmLS1fJ3QRM9PsHlw+6VVNeQzO03otr+xVz2neao3UvVfCpm6/V8zCN\nOo9LSF3Uwxi13po/R4oqY99pY7sto84htVsNybnDp43Q6oBpVKFO6jZIW+stYWjj/tvGOvejgMkd\nLuUw5RLqpcpV5xk03UXdVB5FXfVuY55IXq63WZe3XRn7r8v1yzJsnX2rn/jLu4BJyXzF+JKAW7a2\n1ntUZQY5arPFtXH/bWOdxQ8+dfN1Op1O6y9Vlua0KZ+kzGERtVmR4jQk5w7veph09iFNaVNPSZlD\nmWqz0hTXh4PFL94FTKFOf581Dh9SYw8hz6BfEBFC/ZLSQc4o9XO9zZa57Vxss6Htm2n96temkxyp\nnncBU5tU1dhdPKj7oE09Ja4HOa5Sm3VL0xe7SFh8Ghdt3bQCVeV+6LJdkWqozbolhPmYlMPkDq97\nmEI/66qqRyP0s67Q9wufhb5t1GaLqWq/UE+ptFUnbWqq0wH7Wb583tNemZmZqe2zNm+29bV5c20f\nWWv9mtgv6qxfE8qqn4tt1odtN0qb9aF+o+wXPtRvFEC7hlYc5tK95IYW+llXVUK/x5f2C3dp2xSj\nNivSPJ/GRaNguyuE8WkpXx37RYhzMtVRJ7VZyaI225tymNzh00aYFzCJNCXEJNwQ6yQS83X/VsDk\nDq+TvkPS1FwpdSXhhjYXTHoIIYT6tWmeqSTf6jZsm/WtfsPKWz8N+8moFDC1nCZ2KybEOZlCrFMd\n6r7yT222GO3fMiqfuvn6Dsn5Oj6dVnc9dJ8vaUoobbbuoR612XbRkJw7gulhCuWsq+566KxLmhJK\nm617qEdtVqQZwQRMvo9Px+PwddejrondQs6jWLkSJiZmg52MEarZfq602VHrVncAM2ybdbXtlTWU\nWaR+oU+gKtUIJmAK5awrlHrUrckD4IYNsH69/z0ldQtlX9ds0sU02cMYSu+m1MuncVFNK1Axn3NK\nmrxkWDkl0hSf22yT7canNqscJncE08Mko/P5rKvJ4R2fe0o0NOE3n9tsk+3G5zYrzQkyYPLxS8CF\nPIMqg46q69fkAXBsDI47btbLA2/eL9yqt1+TbdaFtldUnjbrav3KGsosUj8No0oRQQZMPp91Ncnn\nsy4dAItxJfFabbYYn9usiG98GhfNncPk0/g0+J2HIHP5ti1dubeb2qw0xfVtqRwmd/i0EXIHTK58\nCeTl6z2OZD5ty2LUZqUprm9LBUzuCHJIzrfhGRsWmW18WCSp7JySKvIoXMpVa2oerbpUnQfTZJst\nUjcXt3Ov9uBaDpNrxxYXt6W4KciAKebSF2o/a9fC1JRbQxE+5JS4WEbllIzOh3br4nZ2sT1kca2c\nLm5LkVF1hjU11emA/SxfPvTLW23pUltvk5OdzubNTZcmmw9ldNGxx1rbWLrUzfWmdluML+3Bl3K6\nAtAEhI4IuodJXa3F+XDW5XIZXe4lce0MP03tthiX20OSy+V0ud2KDGPoyHzzZjtD9eEsZmZmpuki\nZCqrN8LV+pUlXT+Xe0mKnOHXuf3qbrfD1M313rksbWt7o3Cx3aIeJmcE3cPkcvK3L2cyrvdGuMrl\nXhKXz/DB7XbrQ3vw5djiIpfbrTTPp0sVo2C7GNfm2nD9UtaYi/PjuLYts/h2mbyLXNzOLraHNBeP\nLS5uyywutltNKyBFjNSt6VpXqy+Jjy4Oa7q2LQfxcRjHBS5uZxfbQ5qLxxYXt2U/LrVZNCQnBYy0\n07l2EEkfeH3IMxjlIFJm/Vzblp1O//q58mXhyvbLq67t7EPbG0by2HLssZ3OQQfNNP7FX+W2rGL7\nudJmOx0FTC4JOocpKZm3ceKJzY/xu5yn0Ysr+Ruu5+CkuZIX4cr2y8uVNutbTlDy2LJhA6xf3/w2\nV5sVqVdpEXuTZw8udfUOy8WeHR+4Mozj8/Zrss261NswLJ+3eZNcabOdjnqYpJjSdsAmDyI+H3zT\nXf11Bn4+B5pJTdbDpS+BYTXZZn0OOprc5mqz5UABkxRQ2g7Y5Bd/r4Ovb3kUwwZ+o9bP9UAzb/3q\nrkco82hV2WYH1c3nQLPT6dav7mNdXft61ftm08ceFDA5ozU5TEnpMf6q8zqSORAf+5hfY/m91D3G\nH0pOQbIe229ffW6Mb3lLvTTZZsG/fMMsde8LarMizakkeq+ju73pM5Qq1NFLl3zfjRv9PsuPJddb\nHfuFz8NJvajNFpNcb0cfrTabV91tNg31MEkBleyMdXzxh/illVTVQSTEL62kqr7AQvzSSlKbLaaO\nL3612fKhgEkKqG6PjCQb++LFozWEYb+0ms4RGUV8EFm8uNNZsiR7veWtX3K9vfjF/nxpFdl+VX2B\nVfGl5er+WUabzcrxCSnQzNp2ZX7xN91mm7rPYV3BIQqYnLFN0wVwSTxWvWgR3HFHd6w/760FktP/\n33MPXHqpLT/hBDduT1CVtWut7ps2det8yCGw117dWyHkFedZABx5pOV7uXSbgjLFeTnQ3fcWL7b1\neMQRw91CIrnvbbutLfM9dySPMtrsunWwxx7tbLOrV8OyZd02t99+8Lu/O9y+1/Y224Z2Jsan+9NE\nwXZ14vsIbd4MF15oDeHAA+Hmm61x7Lxz9+/kASX+srr6anstwG67wa23un3PqbIl77O13XbdL599\n9pkbPKXX2w03wN57ww47wEMPddd9W9YbdPe9ZNCZXG/JfS/r7+S+d+SR8LjHhfullaQ2O7q43S5a\nBPfdZ8sGtdnkur32WgtW27be6rrvnO4lJ0VU1+eZ0qvbdfHi7t/77NPthl6ypLs87o4OqUs/r+R6\nS3b5J9dPv/UGnc6RR7ZvvSX1Wm/Jfa/X374MX1ZBbba4eN0lh9PytNnkut1zz/att7qgITkpoJGd\nNfkF1uuAsttu9ntiotNZtqzYgcPVHJGi5gdPMz3X2w47+P9lX9b26xV0Jve9rL9H2ffy8Gn/HLbN\nLlky4+1+l0febZfnhCdeb+l12+T682nfLAIFTFJAIztr8iDS64BSxplpyI3ezvpneq63EM7sq9h+\nvfa9Xn9Xyaf9c9g261Pdihj1goRe682VCT1D334oYHKGT+Oi0b7jhrrGr0Oj9SZN0b5XjNZbs5TD\n5A6fNoJTAZOIiEjVFDC5o5W3RnHR7Oxs00WolOrnt5DrF3LdQPUTKYsCJhEREZEBfOrm05CciIi0\niobk3KEeJhEREZEBFDA5IvRxeNXPbyHXL+S6geonUhYFTCIiIiID+DQuqhwmERFpFeUwuUM9TCIi\nIiIDuBQwHQ78BPgf4O0Nl6V2oY/Dq35+C7l+IdcNVD+RsrgSMG0N/DsWNB0I/Bnw9EZLVLOrrrqq\n6SJUSvXzW8j1C7luoPqJlMWVgOlQ4GfARuAh4D+AI5ssUN22bNnSdBEqpfr5LeT6hVw3UP1EyuJK\nwPQk4OeJx7+IlomIiIg0zpWAqfWXv23cuLHpIlRK9fNbyPULuW6g+omUxZVLFZ8DrMJymADeATwK\n/FPif34G7FtvsURERBp1A/DUpgsh7tgG2ynGgccBV9GypG8RERGRPJYCP8V6kt7RcFlERERERERE\nRCQ0IU9q+WRgBrgW+DHwpmaLU4mtgSuBbzRdkAqMAecA1wPXYfl4IXkHtm9eA6wFtmu2OCP7DHAb\nVp/YTsAFwAbgfGyb+iqrfh/C9s/1wFeAHRsoV1my6hd7K5b7ulOtJSpPr7r9Dbb9fszcvF6RebbG\nhunGgW0JL79pN2Ai+nsRNiwZUv0A/g74AvD1pgtSgTOB10d/b4PfX0Zp48CNdIOkLwLHNFaachwG\nHEqBop4AAARdSURBVMzcL6UPAidGf78d+EDdhSpRVv1eQveK6A8QXv3ATjy/DdyEvwFTVt1egAXz\n20aPd667UOKX52INIXZS9BOqc4EXNV2IEu0JXIg1/NB6mHbEAopQ7YQF8E/EgsFvAC9utETlGGfu\nl9JPgF2jv3eLHvtsnOweGIBXAJ+vryiVGGd+/b4E/A5+B0wwv25nAy9spiiS5so8TP20aVLLcewM\n4/KGy1Gm04ATsK7y0OwD/Ao4A/hv4JPAwkZLVK67gH8G/hfYBGzBgt/Q7IoNhRD93rXP//ru9cB/\nNl2Ikh2JfS9c3XRBKrAf8PvAZcAsMNloaVrOh4CpLZNaLsJyYd4M3NdwWcrycuB2LH/JlTm/yrQN\ncAjw0ej3rwmr93Nf4C1YIL8Hto++pskC1aBDuMecdwIPYrlooVgI/D1wcmJZSMeabbAe3udgJ55n\nN1ucdvMhYLoFG5+OPRk7mwjJtsCXsa7ycxsuS5meB/wR1k1+Fta1/NlGS1SuX0Q/P4wen4MFTqGY\nBH4A3Ak8jCUMP6/RElXjNmwoDmB3LMgPzQrgCMILePfFAvr12HFmT+BHwC4NlqlMv8DaHdhx5lHg\nt5srjrgu9EktF2BBxGlNF6RiU4SXwwTwPWD/6O9VhHUVy0HYlTnbY/vpmcDxjZaoHOPMT/qOr749\nCb+TomF+/Q7HrnRc3EhpyjdO7xyt0HKY3gCcEv29PzY8LtJXyJNaPh87a7gKG7q6ku4tYkIyRZhX\nyR2EnfmFcMl2lhPpTitwJt2rdXx1FpaP9SCWG/k67Av2QsKYViBdv9dj07HcTPf48tHGSje6uH7/\nR3f7Jd2IvwFTVt22BT6Htb8fAdNNFU5ERERERERERERERERERERERERERERERERERERERERERETE\nU4/m+JkCNmITOIqISIaQ7rkjIvMdmvh7IXAR8B7gW4nl1wNPwW6BEtpth0RERESGsgjrUTq66YKI\niPjGh5vvikj1NgIfSjxeg93y5WXAdcCvsV6pJwIHALPAfdH/PCv1Xlth92T7GfAAdlsjBWkiIiLi\nhX49TDcxN4fpDOA2LCBaht3l/i7gq9h9D4/F7nl4JXavuaSPAPcCbwNeiN3M9mEs+BIRERFx2jAB\n0xrgIWCfxLJ/il7/2sSypdGyp0WPnwo8kvofsBv3ritYbhGRxmlITkR6uSn6id0Q/b4oY9mTot8v\nwgKorwHbJH4uAibQhSYi4qltmi6AiDhrS+rxgxnL42WPj34vBrYG7s54vw6wO7CprAKKiNRFAZOI\n9FKkN+guLF/peVhPU9qvRiqRiEhDFDCJSC+dAq+5COthGgMuLLc4IiLNUcAkIpDdm1Skh+mnwMeB\n/8CSyH+EDdc9A9gPu7pORMQ7CphEBOb3JnUylmX9X9ay44ENWHD0buAebOqBT49YRhERERERERER\nERERERERERERERERERERERERERERERERERERERERERERERERERER8cr/B+sEqIlFmrxOAAAAAElF\nTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 24 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2 The Lorenz equations\n", + "\n", + "The [Lorenz equations](Lorenz Equations`:http://en.wikipedia.org/wiki/Lorenz_system) are a system of three coupled, first-order, non-linear differential equations which describe the trajectory of a particle through time. The system was originally derived by as a model of atmospheric convection, but the deceptive simplicity of the equations have made them an often-used example in fields beyond atmospheric physics.\n", + "\n", + "The equations describe the evolution of the spatial variables x, y, and z, given the governing parameters $\\sigma, \\beta, \\rho$, through the specification of the time-derivatives of the spatial variables:\n", + "\n", + "\\begin{align}\n", + " \\frac{dx}{dt} =& \\sigma(y \u2212 x) \\tag{2.2.1} \\\\\n", + " \\frac{dy}{dt} =& x(\\rho \u2212 z) \u2212 y \\tag{2.2.2} \\\\\n", + " \\frac{dz}{dt} =& xy \u2212 \\beta z \\tag{2.2.3}\n", + "\\end{align}\n", + "\n", + "The resulting dynamics are entirely deterministic giving a starting point $(x_0,y_0,z_0)$. Though it looks straightforward, for certain choices of the parameters, the trajectories become chaotic, and the\n", + "resulting trajectories display some surprising properties.\n", + "\n", + "### Incorporating SymPy\n", + "While deriving the Jacobian matrix by hand is trivial for most simple 2D or 3D systems, it can quickly become tedious and error prone for larger systems (or even some highly non-linear 2D systems!). In addition to being an important input to most ODE integrators/solvers, Jacobians are also useful for assessing the stability properties of equilibria.\n", + "\n", + "An alternative approach for solving IVPs using the `ivp` module, which leverages the [SymPy](http://sympy.org/en/index.html) Python library to do the tedious computations involved in deriving the Jacobian, is as follows.\n", + "\n", + "1. Define the IVP using SymPy.\n", + "2. Use SymPy routines for computing the Jacobian.\n", + "3. Wrap the symbolic expressions as callable NumPy functions. \n", + "4. Use these functions to create an instance of the `ivp.IVP` class.\n", + "\n", + "The remainder of this notebook implements each of these steps to solve and analyze the Lorenz equations defined above." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 1: Defining the Lorenz equations using SymPy\n", + "We begin by defining a `sp.Matrix` instance containing the three Lorenz equations..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# enables sympy LaTex printing...\n", + "sp.init_printing()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# declare endogenous variables\n", + "t, x, y, z = sp.var('t, x, y, z')\n", + "\n", + "# declare model parameters\n", + "beta, rho, sigma = sp.var('beta, rho, sigma')\n", + "\n", + "# define symbolic model equations\n", + "_x_dot = sigma * (y - x)\n", + "_y_dot = x * (rho - z) - y\n", + "_z_dot = x * y - beta * z\n", + "\n", + "# define symbolic system and compute the jacobian\n", + "_lorenz_system = sp.Matrix([[_x_dot], [_y_dot], [_z_dot]])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's take a check out our newly defined `_lorenz_system` and make sure it looks as expected..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "_lorenz_system" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "latex": [ + "$$\\left[\\begin{matrix}\\sigma \\left(- x + y\\right)\\\\x \\left(\\rho - z\\right) - y\\\\- \\beta z + x y\\end{matrix}\\right]$$" + ], + "metadata": {}, + "output_type": "pyout", + "png": "iVBORw0KGgoAAAANSUhEUgAAAIIAAABLCAMAAACLOq+zAAAAPFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo1xBWAAAAE3RSTlMA\nMquZdlQQQOkwRO/duyJmzYlsD8NxXgAAAAlwSFlzAAAOxAAADsQBlSsOGwAABPdJREFUaAXtWtu2\nnCAMxRFpixe0/v+/FghgQjKKrtPTPgwPM1xC2IYEs4dR3R7LS317mWBlpbq9174M345AubDuaw8Q\nuobVO9cgdCHipIVcK4RlvlDfNPwSMDRDWE3TGldCKxdohaA3Pvddj1nejSgl6GmFMJ6orRccdN1z\ntM141FOtEYKd2Mz3HWcQ1MoC7w0E048xZPu00JYr1cLGx9Ri9Uaeu4Jgtj4ML2P0Jq5JhtBNvR2m\neSnWn+WINN5D3KTVRLysgrCpIVhf+9jzxRHR2CMFpRmDtQK6XCZmvjiy+QfbdqOGgjV0UwjLoPqw\n7AxRPbAtFa0Qpyjrdecy2lgz61TK6kM8CKzswKAQvMwYNmKHzerQg4F2EcIezZ4sF+USBJhDP5Pq\n2LmtoUxj/CruE58lH8FtEBY4sFf03nqzEX5dUH3Yy3dRKyjYB52ikceWZAUTd6ADD4ZHfuOOgwEv\n06cQ5vAs8cN/N7rj7J1vmWD7AcKGLAI94dPug5r93i40XpgVvLdY2FxvkrI/WY9kBWX8yzs4+1G4\n+cKYeWlt9OYoArYR5rXpfk9Bs+IniwuIEI6lS20iYVe6xUpthSAEQRYOKDalFYJj9mOqSoelVnn5\nU8Hs6eHpORqntEJQ8w0zFDCx4k9PNcOhoAw7G+EIzCFLZ1at5ymL1brPmYr0IM1WqN2+QtjWdJIp\n2yG0LfJA6gMhGO1jhRYrPCAwIl85cdOLjXh0Gkh85TmEZwRGOAIfQxCIx4muMnRv2vlG3CEwBYB/\nKfHXIRqtq6cQ5CyhViG0OV8RhHIXgVATE0Q7bK8vvMxOPsdNAYQm5oXQN+U25GhixOTIGINOe2pe\nM/sXYp/yO54gIgSKchsCgRGTkje7wD+WnHZgdaUe8rwlZ5icrxQ5L0W5DYEQtBBiUtjDGPKgkKyG\nUvOZ2Bk+uozAZ/apU5L1y2BuEyH8+PmrqMHERGUIwKt0zkCLMK3YI7crEKhEbhFuo37/zGwkjlNi\nkjeijzxwZWwwq4zfw4FAXYRSzGUztyEbwYhJdscpaL9I7wBBkzsCrcncBkPgxCQRGLN7LmImmhcT\nC3iAk9ucziSB8xUi3mNugyFwYpLsOewLykCJstLwdnJjRqBKpYyTCuE2GAKRggYQmExDBAG5S+Ar\nTPBQSk5HJgcEJoYQGzvpEPgKlibc5jJxC3l/4vpYyXld4it4BuY2vv/cCiqkLBcRhpVDXeIrWApz\nm2sITwiMyFcwhKp+YYVK+q80PxCCWT9WeGKFxd11+EsXvrkR/gLLzPn3ikvlbQL3IESuZv1x9ZXl\nFgT4ffFtYnh2G3OC+RYE+M3qVVLESq/0Y18lIjXvQ7BvKdY3QLDd0ut1Am/EzCU9Ww0BMaOKvRBj\n3LGCVmbb+jFCIMxFhoCZUcVeHkOAe0IdqTthLjIExIxq9tIIgbMQ8EabacrBXGQIiBnV7KURAhEL\nDQtO4PLdBuIN8m2Mn1OYEWUvRPcNX0j3tSkmMXNJGmt3zNwjmIOyl6cQ4OebBWKSMBcZAmFG5GaG\nILjzso7cqoPLGspcRAiUGVH2QjC0b4Tt3Ka3dFlDmYsIgTIjyl4eQri+uue+QJYqNzO098ZGXEOo\nbmPwShV7wUPtEEy6VyGzmxsVeyHzmn0hnQpkcnujYi9kYjMEMutLG/8NhH/+1yr/Xg+FXaN+qblF\nZfGvVVqrP3IQNGlzv3QnAAAAAElFTkSuQmCC\n", + "prompt_number": 27, + "text": [ + "\u23a1 \u03c3\u22c5(-x + y) \u23a4\n", + "\u23a2 \u23a5\n", + "\u23a2x\u22c5(\u03c1 - z) - y\u23a5\n", + "\u23a2 \u23a5\n", + "\u23a3 -\u03b2\u22c5z + x\u22c5y \u23a6" + ] + } + ], + "prompt_number": 27 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2: Computing the Jacobian using SymPy\n", + "Once we have defined our model as a SymPy matrix, computing the Jacobian is trivial..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "_lorenz_jacobian = _lorenz_system.jacobian([x, y, z])\n", + "_lorenz_jacobian" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "latex": [ + "$$\\left[\\begin{matrix}- \\sigma & \\sigma & 0\\\\\\rho - z & -1 & - x\\\\y & x & - \\beta\\end{matrix}\\right]$$" + ], + "metadata": {}, + "output_type": "pyout", + "png": "iVBORw0KGgoAAAANSUhEUgAAAKAAAABLCAMAAADAknxeAAAAPFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo1xBWAAAAE3RSTlMA\nMquZdlQQQOkwRM3d77siZolsPsJmHgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAA+9JREFUaAXtmmG7\npRAQxxXZu1JY3/+77iAdUYb73Htu+2y9OEc1+PUnmYEM1h8judkhAxchg6UMjulmfEQ7qtE6wOFu\nbC8efRtATg2jpVL3AZyhi3GpXtqF1G0A9eKAzHxbwNUPIpPlGeFtFLQeUNh8LGkF5HTxoxLNHvDy\ntDMDt75kYVlWYiPgIKmY5KqKPpwVt5/2ZlDWuLxD+NuLIaQNkC9OeWfbeHRn6ATks9yPGcYm6l8u\nUfTgS9zuDDxI99kmttqhsHYFuzOQ0Aenz70kKnwL5+bpRHcGQuTqNNBFIzX1Qe6zDUs+RrkiT4/u\nDNA8fqAOXSMtswmQrPCOKCnSjPV0dwaQ0H3qluJj3AbIYT5mmvUD9u4MkMXA3Krgaxxm6nJ96902\nBb8VoV74A1jXB7/7KIhrVLd4FKzrg999FMQ1qls8CoI+c89XPNfz+xVUazHHyyFq598NyFc63hoQ\nxGH/GaCgZ9PGtJcIuQgyeDcqvXyZ7lOQw7RVCWaiA5/3QQMOvvDuwVWFfGWM0mb/qbOJOfjvWjIi\nYxQpA9QSuJSteR9uzFAdfH190DkWBjrtFGMYGeDiWi5GcHL3fdd0uOY7yVNt4tzePf7sPdCtNgf4\n6+P3dhZiB8xG/B3pkBDNESSfrQp4KHg7OQSQ/nykMWrqWpjM/vcsq7829fH1NTHUEELm8etzbGLp\n6kZi6oHvupGLB+tScOIhwsJOAbmF1ueyOoIMUhvN5tprlCH2ALruv0KvUzvDQcHJKhhCSuc5rRE0\n1ksHHx0XK8e9vrSokzQfGePM6Jf9AbCMjJyU8eZLB8AlDt9vhqhVlwJuQbOa+fvvpYCiPry8H87V\nmAL+DAFS6wOICITefhREJUIMHgURgc5vK63jjO+WCsL2Cb5uU4I7AmrHJrZp9Q0Bw1Rr2j5rNwQM\nM5ZxmxLfFVAs21uCAHJD3QOp9mW6+FrmDni8jv6LQVE2yzhtRgANmZwX37EQuwEUDjgKFg0YLIoZ\nui/a1QHVFNay19RTjSVV/wsHvGqd3vRbAwi7iCyklpAG18rPsg+eamZzflo44OdmJHfcobW8pYiL\n53UFXZQBqkIc0Yu6Sf9jQUkidL6wzwfOMUDvR4XF5iuOq+tHB/zKKr8eWpjEUQYF9BuCwq6gvKjq\neeGAV62Tm6HvqTjKoIAUXg8RtkgkpaDJ0gFHs2wGq3OJh9fqPtbEfIRNc0gw6aTu0gE/MTq7JAZt\nmElW9zFAV8g7/fmtC77YEcARugSvxjNfRX1JqhcQgrFkDSPTl9SPFcKLuhAFBRpMwqrsu7+Ngkkm\nBDCx/KHkPwJ4843eMHVzR0fQ9D3N7Td6M0b+Au7oKvDlPw9PAAAAAElFTkSuQmCC\n", + "prompt_number": 28, + "text": [ + "\u23a1 -\u03c3 \u03c3 0 \u23a4\n", + "\u23a2 \u23a5\n", + "\u23a2\u03c1 - z -1 -x\u23a5\n", + "\u23a2 \u23a5\n", + "\u23a3 y x -\u03b2\u23a6" + ] + } + ], + "prompt_number": 28 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3: Wrap the SymPy expression to create vectorized NumPy functions\n", + "Now we wrap the SymPy matrices defining the model and the Jacobian to create vectorized NumPy functions. It is crucial that the interface for our wrapped functions matches the interface required by the `f` and `jac` parameters which we will pass to the `ivp.IVP` constructor to create an instance of the `ivp.IVP` class representing the Lorenz equations.\n", + "\n", + "Recall from the `ivp.IVP` docstring that... \n", + "\n", + " f : callable `f(t, y, *f_args)`\n", + " Right hand side of the system of equations defining the ODE. The\n", + " independent variable, `t`, is a `scalar`; `y` is an `ndarray`\n", + " of dependent variables with `y.shape == (n,)`. The function `f`\n", + " should return a `scalar`, `ndarray` or `list` (but not a\n", + " `tuple`).\n", + " jac : callable `jac(t, y, *jac_args)`, optional(default=None)\n", + " Jacobian of the right hand side of the system of equations defining\n", + " the ODE.\n", + "\n", + " .. :math:\n", + "\n", + " \\mathcal{J}_{i,j} = \\bigg[\\frac{\\partial f_i}{\\partial y_j}\\bigg]\n", + " \n", + "Thus our wrapped functions need to take a float `t` as the first argument, and array `y` as a second argument, followed by some arbitrary number of model parameters. We can handle all of this as follows..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# in order to pass an array as an argument, we need to apply a change of variables\n", + "X = sp.DeferredVector('X')\n", + "change_of_vars = {'x': X[0], 'y': X[1], 'z': X[2]}\n", + "_transformed_lorenz_system = _lorenz_system.subs(change_of_vars)\n", + "_transformed_lorenz_jacobian = _transformed_lorenz_system.jacobian([X[0], X[1], X[2]])\n", + "\n", + "# wrap the symbolic expressions as callable numpy funcs\n", + "_args = (t, X, beta, rho, sigma)\n", + "_f = sp.lambdify(_args, _transformed_lorenz_system,\n", + " modules=[{'ImmutableMatrix': np.array}, \"numpy\"])\n", + "_jac = sp.lambdify(_args, _transformed_lorenz_jacobian,\n", + " modules=[{'ImmutableMatrix': np.array}, \"numpy\"])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 29 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 4: Use these functions to create an instance of the `IVP` class\n", + "First we define functions describing the right-hand side of the ODE and the Jacobian which we need to initialize the `ivp.IVP` class..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lorenz_system(t, X, beta, rho, sigma):\n", + " \"\"\"\n", + " Return the Lorenz system.\n", + "\n", + " Parameters\n", + " ----------\n", + " t : float\n", + " Time\n", + " X : ndarray (float, shape=(3,))\n", + " Endogenous variables of the Lorenz system.\n", + " beta : float\n", + " Model parameter. Should satisfy :math:`0 < \\beta`.\n", + " rho : float\n", + " Model parameter. Should satisfy :math:`0 < \\rho`.\n", + " sigma : float\n", + " Model parameter. Should satisfy :math:`0 < \\sigma`.\n", + "\n", + "\n", + " Returns\n", + " -------\n", + " rhs_ode : ndarray (float, shape=(3,))\n", + " Right hand side of the Lorenz system of ODEs.\n", + "\n", + " \"\"\"\n", + " rhs_ode = _f(t, X, beta, rho, sigma).ravel()\n", + " return rhs_ode\n", + "\n", + "\n", + "def lorenz_jacobian(t, X, beta, rho, sigma):\n", + " \"\"\"\n", + " Return the Jacobian of the Lorenz system.\n", + "\n", + " Parameters\n", + " ----------\n", + " t : float\n", + " Time\n", + " X : ndarray (float, shape=(3,))\n", + " Endogenous variables of the Lorenz system.\n", + " beta : float\n", + " Model parameter. Should satisfy :math:`0 < \\beta`.\n", + " rho : float\n", + " Model parameter. Should satisfy :math:`0 < \\rho`.\n", + " sigma : float\n", + " Model parameter. Should satisfy :math:`0 < \\sigma`.\n", + "\n", + " Returns\n", + " -------\n", + " jac : ndarray (float, shape=(3,3))\n", + " Jacobian of the Lorenz system of ODEs.\n", + "\n", + " \"\"\"\n", + " jac = _jac(t, X, beta, rho, sigma)\n", + " return jac" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 30 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "... next we define a tuple of model parameters..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# parameters with ordering (beta, rho, sigma)\n", + "lorenz_params = (2.66, 28.0, 10.0)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 31 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "... finally, we are ready to create the instance of the `ivp.IVP` class representing the Lorenz equations." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "lorenz_ivp = ivp.IVP(f=lorenz_system,\n", + " jac=lorenz_jacobian,\n", + " f_args=lorenz_params,\n", + " jac_args=lorenz_params)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 32 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solving the Lorenz equations\n", + "At this point I proceed in exactly the same fashion as in the previous Lotka-Volterra equations example: \n", + "\n", + "1. Solve the model using a discretized, finite-difference approximation.\n", + "2. Use the discretized approximation in conjunction with parametric B-spline interpolation to construct a continuous approximation of the true solution.\n", + "3. Compute and analyze the residual of the approximate solution.\n", + "\n", + "#### Step 1. Solve the model using a discretized, finite-difference approximation\n", + "Using `dop853`, an embedded Runge-Kutta method of order 7(8) with adaptive step size control due to [Dormand and Prince](http://en.wikipedia.org/wiki/Dormand%E2%80%93Prince_method), integrate the Lorenz equations forward from an initial condition of $X_0 = (1.0, 1.0, 1.0)$ from $t=0$, to $T=100$." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# declare and initial condition\n", + "t0, X0 = 0.0, np.array([1.0, 1.0, 1.0])\n", + "\n", + "# solve!\n", + "solution = lorenz_ivp.solve(t0, X0, h=1e-2, T=100, integrator='dop853',\n", + " atol=1e-12, rtol=1e-9)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 33 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plotting the solution time paths\n", + "We can use IPython widgets to construct a \"poor man's\" animation of the evolution of the Lorenz equations. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "@interact(T=IntSliderWidget(min=0, value=0, max=solution.shape[0], step=5))\n", + "def plot_lorenz(T):\n", + " \"\"\"Plots the first T points in the solution trajectory of the Lorenz equations.\"\"\" \n", + " # extract the components of the solution trajectory\n", + " t = solution[:T, 0]\n", + " x_vals = solution[:T, 1]\n", + " y_vals = solution[:T, 2]\n", + " z_vals = solution[:T, 3]\n", + "\n", + " # create the plot\n", + " fig = plt.figure(figsize=(8, 6))\n", + " plt.plot(t, x_vals, 'r.', label='$x_t$', alpha=0.5)\n", + " plt.plot(t, y_vals , 'b.', label='$y_t$', alpha=0.5)\n", + " plt.plot(t, z_vals , 'g.', label='$z_t$', alpha=0.5)\n", + "\n", + " plt.grid()\n", + " plt.xlabel('Time', fontsize=20)\n", + " plt.ylabel('$x_t, y_t, z_t$', fontsize=20, rotation='horizontal')\n", + " plt.title('Time paths of the $x,y,z$ coordinates', fontsize=25)\n", + " plt.legend(frameon=False, bbox_to_anchor=(1.15,1))\n", + " \n", + " plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nrkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 48 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 2: Construct a continuous approximation to the solution.\n", + "\n", + "Let's construct a continuous approximation to the solution of the Lorenz equations at 10000 evenly spaced points using a 5th order B-spline interpolation." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# define the desired interpolation points...\n", + "ti = np.linspace(t0, solution[-1, 0], 1e4)\n", + "\n", + "# ...and interpolate!\n", + "interp_solution = lorenz_ivp.interpolate(solution, ti, k=5, ext=2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 50 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plotting 2D projections of the solution in phase space\n", + "The underlying structure of the Lorenz system becomes more apparent when I plot the interpolated solution trajectories in phase space. We can plot 2D projections of the time paths of the solution in phase space..." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# extract the components of the solution trajectory\n", + "t = solution[:, 0]\n", + "x_vals = interp_solution[:, 1]\n", + "y_vals = interp_solution[:, 2]\n", + "z_vals = interp_solution[:, 3]\n", + "\n", + "# xy phase space projection\n", + "fig, axes = plt.subplots(1, 3, figsize=(12, 6), sharex=True, sharey=True, squeeze=False)\n", + "axes[0,0].plot(x_vals, y_vals, 'r', alpha=0.5)\n", + "axes[0,0].set_xlabel('$x$', fontsize=20, rotation='horizontal')\n", + "axes[0,0].set_ylabel('$y$', fontsize=20, rotation='horizontal')\n", + "axes[0,0].set_title('$x,y$-plane', fontsize=20)\n", + "axes[0,0].grid()\n", + "\n", + "# xz phase space projection\n", + "axes[0,1].plot(x_vals, z_vals , 'b', alpha=0.5)\n", + "axes[0,1].set_xlabel('$x$', fontsize=20, rotation='horizontal')\n", + "axes[0,1].set_ylabel('$z$', fontsize=20, rotation='horizontal')\n", + "axes[0,1].set_title('$x,z$-plane', fontsize=20)\n", + "axes[0,1].grid()\n", + "\n", + "# yz phase space projection\n", + "axes[0,2].plot(y_vals, z_vals , 'g', alpha=0.5)\n", + "axes[0,2].set_xlabel('$y$', fontsize=20, rotation='horizontal')\n", + "axes[0,2].set_ylabel('$z$', fontsize=20, rotation='horizontal')\n", + "axes[0,2].set_title('$y,z$-plane', fontsize=20)\n", + "axes[0,2].grid()\n", + "\n", + "plt.suptitle('Phase space projections', x=0.5, y=1.05, fontsize=25)\n", + "plt.tight_layout()\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ng8hq2TkTLG0XwP43OR+RFes4AJ+AMW4B8I3my7s6RhPGE8CMMUXjSeeZMKaYMJ4AGlNaY8J4AmhM\n6SwTxhPAjDElXOOJiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI\niIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjIuSYXwOMAXgewxO+6+wC8G+qARERERERE\nTPUbALEAvgJgs9916wE8G/KIJKLFhjsAES/nA7gZgAv8tugOAHcByATQF8BDAPaHKzgRMYrGExFx\nwgwAqwE0AZgPYJfXdSkAzgPw5zDEJSJyRoMB/Nrr/F/BQewCABeCH5K+GvqwRMRAGk9ExCnZAOLB\nL2aaAFztdd1cAG4Ao8IQl4jIGf0G/CbI8iKAdc2/9wPwCIBuoQ5KRIyk8UREnPZVAGUA4rwu+wGA\nkvCEIyJyZrl+5w8B+GEY4hAR8+X6ndd4IiKd9TaAl/0uywfwz9CHIiLSfiPAkvsl4Q5ERIyn8URE\nnLAdwE+9zicAqAHwQHjCkUgWHe4ARIK4BEADgLVelw0OUywiYjaNJyLihAMAenid/xmARAAfhCcc\nEZHWJYFrIsY2n38ZbHtqiQbwu1AHJSJG0ngiIl1hBNhN8FcAft78e2lYIxIRacUicArPDQBGAtgC\nYJXX9f8NYFoY4hIR82g8EZGuFgWgGOxQKhIgKtwBiIAl90cBnAA/GP0AwG8B1IFTe14F8F7YohMR\nk2g8ERGnPQdgNIAJzeevBfA8gPHw3RdLREREREREzuAYgP9r/r0PgH0AloQvHIl0qmCJiIiIiLRs\nIYApAGIB5AB4HMCGsEYkIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiwf1/uDcGZJ8Axm8AAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 52 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Step 3: Compute the residuals to assese the accuracy of our solution\n", + "\n", + "Finally, to assess the accuracy of our solution we need to compute and plot the solution residuals at 10000 evenly spaced points using a 5th order B-spline interpolation." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# compute the residual\n", + "ti = np.linspace(0, solution[-1,0], 10000)\n", + "residual = lorenz_ivp.compute_residual(solution, ti, k=5)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 53 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, we want to confirm that the residuals are \"small\" everywhere. Patterns, if they exists, are not cause for concern." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# extract the raw residuals\n", + "x_residuals = residual[:, 1]\n", + "y_residuals = residual[:, 2]\n", + "z_residuals = residual[:, 3]\n", + "\n", + "# typically, normalize residual by the level of the variable\n", + "norm_x_residuals = np.abs(x_residuals) / x_vals\n", + "norm_y_residuals = np.abs(y_residuals) / y_vals\n", + "norm_z_residuals = np.abs(z_residuals) / z_vals\n", + "\n", + "# create the plot\n", + "fig = plt.figure(figsize=(8, 6))\n", + "plt.plot(ti, norm_x_residuals, 'r-', label='$x(t)$', alpha=0.5)\n", + "plt.plot(ti, norm_y_residuals, 'b-', label='$y(t)$', alpha=0.5)\n", + "plt.plot(ti, norm_z_residuals, 'g-', label='$z(t)$', alpha=0.5)\n", + "plt.axhline(np.finfo('float').eps, linestyle='dashed', color='k', label='Machine eps')\n", + "plt.xlabel('Time', fontsize=15)\n", + "plt.ylim(1e-16, 1)\n", + "plt.ylabel('Residuals', fontsize=15)\n", + "plt.yscale('log')\n", + "plt.title('Lorenz equations residuals', fontsize=20)\n", + "plt.grid()\n", + "plt.legend(loc='best', frameon=False)\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nEREREREREREREREREREREREREREREZGg8/980tf0JIsVMgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 55 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/quantecon/ivp.py b/quantecon/ivp.py new file mode 100644 index 000000000..5fb941c00 --- /dev/null +++ b/quantecon/ivp.py @@ -0,0 +1,295 @@ +r""" +Base class for solving initial value problems (IVPs) of the form: + +.. math:: + + \frac{dy}{dt} = f(t,y),\ y(t_0) = y_0 + +using finite difference methods. The `quantecon.ivp` class uses various +integrators from the `scipy.integrate.ode` module to perform the integration +(i.e., solve the ODE) and parametric B-spline interpolation from +`scipy.interpolate` to approximate the value of the solution between grid +points. The `quantecon.ivp` module also provides a method for computing the +residual of the solution which can be used for assessing the overall accuracy +of the approximated solution. + +@author : David R. Pugh +@date : 2014-08-18 + +""" +from __future__ import division + +import numpy as np +from scipy import integrate, interpolate + + +class IVP(integrate.ode): + + def __init__(self, f, jac=None, f_args=None, jac_args=None): + r""" + Creates an instance of the IVP class. + + Parameters + ---------- + f : callable ``f(t, y, *f_args)`` + Right hand side of the system of equations defining the ODE. The + independent variable, `t`, is a ``scalar``; `y` is an ``ndarray`` + of dependent variables with ``y.shape == (n,)``. The function `f` + should return a ``scalar``, ``ndarray`` or ``list`` (but not a + ``tuple``). + jac : callable ``jac(t, y, *jac_args)``, optional(default=None) + Jacobian of the right hand side of the system of equations defining + the ODE. + + .. :math: + + \mathcal{J}_{i,j} = \bigg[\frac{\partial f_i}{\partial y_j}\bigg] + + f_args : tuple, optional(default=None) + Additional arguments that should be passed to the function `f`. + jac_args : tuple, optional(default=None) + Additional arguments that should be passed to the function `jac`. + + """ + super(IVP, self).__init__(f, jac) + self.f_args = f_args + self.jac_args = jac_args + + @property + def f_args(self): + """ + Additional arguments passed to the user-supplied function `f`. + + :getter: Return the current arguments. + :setter: Set new values for the arguments. + :type: tuple + + """ + return self._f_args + + @property + def jac_args(self): + """ + Additional arguments passed to the user-supplied function `jac`. + + :getter: Return the current arguments. + :setter: Set new values for the arguments. + :type: tuple + + """ + return self._jac_args + + @f_args.setter + def f_args(self, new_f_args): + """Set new values for the parameters.""" + if not isinstance(new_f_args, (tuple, type(None))): + mesg = "IVP.args must be a tuple, not a {}." + raise AttributeError(mesg.format(new_f_args.__class__)) + elif new_f_args is not None: + self.set_f_params(*new_f_args) + self._f_args = new_f_args + else: + pass + + @jac_args.setter + def jac_args(self, new_jac_args): + """Set new values for the parameters.""" + if not isinstance(new_jac_args, (tuple, type(None))): + mesg = "IVP.args must be a tuple, not a {}." + raise AttributeError(mesg.format(new_jac_args.__class__)) + elif new_jac_args is not None: + self.set_jac_params(*new_jac_args) + self._jac_args = new_jac_args + else: + pass + + def _integrate_fixed_trajectory(self, h, T, step, relax): + """Generates a solution trajectory of fixed length.""" + # initialize the solution using initial condition + solution = np.hstack((self.t, self.y)) + + while self.successful(): + + self.integrate(self.t + h, step, relax) + current_step = np.hstack((self.t, self.y)) + solution = np.vstack((solution, current_step)) + + if (h > 0) and (self.t >= T): + break + elif (h < 0) and (self.t <= T): + break + else: + continue + + return solution + + def _integrate_variable_trajectory(self, h, g, tol, step, relax): + """Generates a solution trajectory of variable length.""" + # initialize the solution using initial condition + solution = np.hstack((self.t, self.y)) + + while self.successful(): + + self.integrate(self.t + h, step, relax) + current_step = np.hstack((self.t, self.y)) + solution = np.vstack((solution, current_step)) + + if g(self.t, self.y, *self.f_args) < tol: + break + else: + continue + + return solution + + def _initialize_integrator(self, t0, y0, integrator, **kwargs): + """Initializes the integrator prior to integration.""" + # set the initial condition + self.set_initial_value(y0, t0) + + # select the integrator + self.set_integrator(integrator, **kwargs) + + def compute_residual(self, traj, ti, k=3, ext=2): + r""" + The residual is the difference between the derivative of the B-spline + approximation of the solution trajectory and the right-hand side of the + original ODE evaluated along the approximated solution trajectory. + + Parameters + ---------- + traj : array_like (float) + Solution trajectory providing the data points for constructing the + B-spline representation. + ti : array_like (float) + Array of values for the independent variable at which to + interpolate the value of the B-spline. + k : int, optional(default=3) + Degree of the desired B-spline. Degree must satisfy + :math:`1 \le k \le 5`. + ext : int, optional(default=2) + Controls the value of returned elements for outside the + original knot sequence provided by traj. For extrapolation, set + `ext=0`; `ext=1` returns zero; `ext=2` raises a `ValueError`. + + Returns + ------- + residual : array (float) + Difference between the derivative of the B-spline approximation + of the solution trajectory and the right-hand side of the ODE + evaluated along the approximated solution trajectory. + + """ + # B-spline approximations of the solution and its derivative + soln = self.interpolate(traj, ti, k, 0, ext) + deriv = self.interpolate(traj, ti, k, 1, ext) + + # rhs of ode evaluated along approximate solution + T = ti.size + rhs_ode = np.vstack(self.f(ti[i], soln[i, 1:], *self.f_args) for i in range(T)) + rhs_ode = np.hstack((ti[:, np.newaxis], rhs_ode)) + + # should be roughly zero everywhere (if approximation is any good!) + residual = deriv - rhs_ode + + return residual + + def solve(self, t0, y0, h=1.0, T=None, g=None, tol=None, + integrator='dopri5', step=False, relax=False, **kwargs): + r""" + Solve the IVP by integrating the ODE given some initial condition. + + Parameters + ---------- + t0 : float + Initial condition for the independent variable. + y0 : array_like (float, shape=(n,)) + Initial condition for the dependent variables. + h : float, optional(default=1.0) + Step-size for computing the solution. Can be positive or negative + depending on the desired direction of integration. + T : int, optional(default=None) + Terminal value for the independent variable. One of either `T` + or `g` must be specified. + g : callable ``g(t, y, f_args)``, optional(default=None) + Provides a stopping condition for the integration. If specified + user must also specify a stopping tolerance, `tol`. + tol : float, optional (default=None) + Stopping tolerance for the integration. Only required if `g` is + also specifed. + integrator : str, optional(default='dopri5') + Must be one of 'vode', 'lsoda', 'dopri5', or 'dop853' + step : bool, optional(default=False) + Allows access to internal steps for those solvers that use adaptive + step size routines. Currently only 'vode', 'zvode', and 'lsoda' + support `step=True`. + relax : bool, optional(default=False) + Currently only 'vode', 'zvode', and 'lsoda' support `relax=True`. + **kwargs : dict, optional(default=None) + Dictionary of integrator specific keyword arguments. See the + Notes section of the docstring for `scipy.integrate.ode` for a + complete description of solver specific keyword arguments. + + Returns + ------- + solution: ndarray (float) + Simulated solution trajectory. + + """ + self._initialize_integrator(t0, y0, integrator, **kwargs) + + if (g is not None) and (tol is not None): + soln = self._integrate_variable_trajectory(h, g, tol, step, relax) + elif T is not None: + soln = self._integrate_fixed_trajectory(h, T, step, relax) + else: + mesg = "Either both 'g' and 'tol', or 'T' must be specified." + raise ValueError(mesg) + + return soln + + def interpolate(self, traj, ti, k=3, der=0, ext=2): + r""" + Parametric B-spline interpolation in N-dimensions. + + Parameters + ---------- + traj : array_like (float) + Solution trajectory providing the data points for constructing the + B-spline representation. + ti : array_like (float) + Array of values for the independent variable at which to + interpolate the value of the B-spline. + k : int, optional(default=3) + Degree of the desired B-spline. Degree must satisfy + :math:`1 \le k \le 5`. + der : int, optional(default=0) + The order of derivative of the spline to compute (must be less + than or equal to `k`). + ext : int, optional(default=2) Controls the value of returned elements + for outside the original knot sequence provided by traj. For + extrapolation, set `ext=0`; `ext=1` returns zero; `ext=2` raises a + `ValueError`. + + Returns + ------- + interp_traj: ndarray (float) + The interpolated trajectory. + + """ + # array of parameter values + u = traj[:, 0] + + # build list of input arrays + n = traj.shape[1] + x = [traj[:, i] for i in range(1, n)] + + # construct the B-spline representation (s=0 forces interpolation!) + tck, t = interpolate.splprep(x, u=u, k=k, s=0) + + # evaluate the B-spline (returns a list) + out = interpolate.splev(ti, tck, der, ext) + + # convert to a 2D array + interp_traj = np.hstack((ti[:, np.newaxis], np.array(out).T)) + + return interp_traj diff --git a/quantecon/tests/test_ivp.py b/quantecon/tests/test_ivp.py new file mode 100644 index 000000000..2a093e067 --- /dev/null +++ b/quantecon/tests/test_ivp.py @@ -0,0 +1,306 @@ +""" +Tests for ivp.py + +@author : David R. Pugh +@date : 2014-08-26 + +""" +import nose + +import numpy as np + +from .. import ivp + +# use the Solow Model with Cobb-Douglas production as test case +valid_params = (0.02, 0.02, 0.15, 0.33, 0.05) +invalid_params = {'g': 0.02, 'n': 0.02, 's': 0.15, 'alpha': 0.33, 'delta': 0.05} + + +def solow_model(t, k, g, n, s, alpha, delta): + """ + Equation of motion for capital stock (per unit effective labor). + + Parameters + ---------- + t : float + Time + k : ndarray (float, shape=(1,)) + Capital stock (per unit of effective labor) + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy `0 < s < 1`. + alpha : float + Elasticity of output with respect to capital stock. Must satisfy + :math:`0 < alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy :math:`0 < \delta`. + + Returns + ------- + k_dot : ndarray (float, shape(1,)) + Time derivative of capital stock (per unit effective labor). + + """ + k_dot = s * k**alpha - (g + n + delta) * k + return k_dot + + +def solow_jacobian(t, k, g, n, s, alpha, delta): + """ + Jacobian matrix for the Solow model. + + Parameters + ---------- + t : float + Time + k : ndarray (float, shape=(1,)) + Capital stock (per unit of effective labor) + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy `0 < s < 1`. + alpha : float + Elasticity of output with respect to capital stock. Must satisfy + :math:`0 < alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy :math:`0 < \delta`. + + Returns + ------- + jac : ndarray (float, shape(1,)) + Time derivative of capital stock (per unit effective labor). + + """ + jac = s * alpha * k**(alpha - 1) - (g + n + delta) + return jac + + +def solow_steady_state(g, n, s, alpha, delta): + """ + Steady-state level of capital stock (per unit effective labor). + + Parameters + ---------- + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy `0 < s < 1`. + alpha : float + Elasticity of output with respect to capital stock. Must satisfy + :math:`0 < alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy :math:`0 < \delta`. + + Returns + ------- + kstar : float + Steady state value of capital stock (per unit effective labor). + + """ + k_star = (s / (n + g + delta))**(1 / (1 - alpha)) + return k_star + + +def solow_analytic_solution(t, k0, g, n, s, alpha, delta): + """ + Analytic solution for the path of capital stock (per unit effective labor). + + Parameters + ---------- + t : ndarray(float, shape=(1,)) + Time + k : ndarray (float, shape=(1,)) + Capital stock (per unit of effective labor) + g : float + Growth rate of technology. + n : float + Growth rate of the labor force. + s : float + Savings rate. Must satisfy `0 < s < 1`. + alpha : float + Elasticity of output with respect to capital stock. Must satisfy + :math:`0 < alpha < 1`. + delta : float + Depreciation rate of physical capital. Must satisfy :math:`0 < \delta`. + + Returns + ------- + soln : ndarray (float, shape(t.size, 2)) + Trajectory describing the analytic solution of the model. + + """ + # lambda governs the speed of convergence + lmbda = (n + g + delta) * (1 - alpha) + + # analytic solution for Solow model at time t + k_t = (((s / (n + g + delta)) * (1 - np.exp(-lmbda * t)) + + k0**(1 - alpha) * np.exp(-lmbda * t))**(1 / (1 - alpha))) + + # combine into a (t.size, 2) array + analytic_traj = np.hstack((t[:, np.newaxis], k_t[:, np.newaxis])) + + return analytic_traj + + +# helper functions for conducting tests +def _compute_fixed_length_solns(model, t0, k0): + """Returns a dictionary of fixed length solution trajectories.""" + + # storage containter for integration results + results = {} + + for integrator in ['dopri5', 'dop853', 'vode', 'lsoda']: + + # tighten tolerances so tests don't fail due to numerical issues + discrete_soln = model.solve(t0, k0, h=1e0, T=1e3, + integrator=integrator, + atol=1e-14, rtol=1e-11) + + # store the result + results[integrator] = discrete_soln + + return results + + +def _termination_condition(t, k, g, n, s, alpha, delta): + """Terminate solver when we get close to steady state.""" + diff = k - solow_steady_state(g, n, s, alpha, delta) + return diff + + +def _compute_variable_length_solns(model, t0, k0, g, tol): + """Returns a dictionary of variable length solution trajectories.""" + + # storage containter for integration results + results = {} + + for integrator in ['dopri5', 'dop853', 'vode', 'lsoda']: + + # tighten tolerances so tests don't fail due to numerical issues + discrete_soln = model.solve(t0, k0, h=1e0, g=g, tol=tol, + integrator=integrator, + atol=1e-14, rtol=1e-11) + + # store the result + results[integrator] = discrete_soln + + return results + + +# testing functions +def test_validate_f_args(): + """Testing validation of f_args attribute.""" + with nose.tools.assert_raises(AttributeError): + model = ivp.IVP(f=solow_model, + f_args=invalid_params) + + +def test_validate_jac_args(): + """Testing validation of jac_args attribute.""" + with nose.tools.assert_raises(AttributeError): + model = ivp.IVP(f=solow_model, + jac=solow_jacobian, + jac_args=invalid_params) + + +def test_solve_fixed_trajectory(): + """Testing computation of fixed length solution trajectory.""" + model = ivp.IVP(f=solow_model, + jac=solow_jacobian, + f_args=valid_params, + jac_args=valid_params) + + # compute some fixed length trajectories + t0, k0 = 0, np.array([5.0]) + results = _compute_fixed_length_solns(model, t0, k0) + + # conduct the tests + for integrator, numeric_solution in results.items(): + ti = numeric_solution[:, 0] + analytic_solution = solow_analytic_solution(ti, k0, *valid_params) + np.testing.assert_allclose(numeric_solution, analytic_solution) + + +def test_solve_variable_trajectory(): + """Testing computation of variable length solution trajectory.""" + model = ivp.IVP(f=solow_model, + jac=solow_jacobian, + f_args=valid_params, + jac_args=valid_params) + + # compute some variable length trajectories + t0, k0, tol = 0, np.array([5.0]), 1e-3 + results = _compute_variable_length_solns(model, t0, k0, + g=_termination_condition, tol=tol) + + # conduct the tests + for integrator, numeric_solution in results.items(): + ti = numeric_solution[:, 0] + analytic_solution = solow_analytic_solution(ti, k0, *valid_params) + + # test accuracy of solution + np.testing.assert_allclose(numeric_solution, analytic_solution) + + # test termination condition + diff = numeric_solution[-1, 1] - solow_steady_state(*valid_params) + nose.tools.assert_less_equal(diff, tol) + + +def test_interpolation(): + """Testing parameteric B-spline interpolation methods.""" + model = ivp.IVP(f=solow_model, + jac=solow_jacobian, + f_args=valid_params, + jac_args=valid_params) + + # compute some fixed length trajectories + t0, k0 = 0, np.array([5.0]) + results = _compute_fixed_length_solns(model, t0, k0) + + # conduct the tests + for integrator, numeric_solution in results.items(): + + # define an array of interpolation points + N, T = 1000, numeric_solution[:, 0][-1] + ti = np.linspace(t0, T, N) + + # used highest order B-spline interpolation available + interp_solution = model.interpolate(numeric_solution, ti, k=3, ext=2) + + analytic_solution = solow_analytic_solution(ti, k0, *valid_params) + np.testing.assert_allclose(interp_solution, analytic_solution) + + +def test_compute_residual(): + """Testing computation of solution residual.""" + model = ivp.IVP(f=solow_model, + jac=solow_jacobian, + f_args=valid_params, + jac_args=valid_params) + + # compute some fixed length trajectories + t0, k0 = 0, np.array([5.0]) + results = _compute_fixed_length_solns(model, t0, k0) + + # conduct the tests + for integrator, numeric_solution in results.items(): + + # define an array of interpolation points + N, T = 1000, numeric_solution[:, 0][-1] + tmp_grid_pts = np.linspace(t0, T, N) + + # used highest order B-spline interpolation available + tmp_residual = model.compute_residual(numeric_solution, + tmp_grid_pts, + k=5) + + expected_residual = np.zeros((N, 2)) + actual_residual = tmp_residual + np.testing.assert_almost_equal(expected_residual, actual_residual)