CompEcon Toolbox - Changes, Bugs, etc.
The CompEcon Toolbox was extensively revised during the fall of 2002 to make it conform with the final published version of Applied Computational Economics and Finance. We are not able to document all the changes before the release of the text. All changes after October, 2002 will be documented here (dates refer to when the fix was made - not when it was posted to the web site). To be advised of changes by e-mail, please fill out the download form.
3/2/06
DDPSOLVE
Corrected program so the model definition allows either
model.horizon or model.T to specify the time horizon.
2/17/05
A new ZIP file was put on the web site that correctly updated the toolbox.
2/07/05
QNEWTON
One of the options (eps0) was used to do two things - it was used in the convergence criteria and was used to determine if the step direction is
sufficiently uphill. These two functions are at odds with each other and the same values should not have been used. This can cause convergence problems
or excessive resetting of the search direction or both. To change this, a new optional variable was created (eps1) to handle the uphill direction
check. The default values are eps0=1 and eps1=1e-12.
6/17/04
ICDFN
The was a bug in icdfn.c that did not handle values with x<=0 or x>=1
correctly when x is a vector. This is corrected and a new MEX file should be
created. Change directories to the cetools directory and type “mex icdfn.c” at
the command prompt or run mexall again.
DDPSIMUL
Made minor changes to speed up execution slightly and added a warning message
if N>model.horizon
4/19/04
GJACOBI
Method was incorrectly code; the line Q=diag(A); should have been
Q=diag(diag(A)); or, better yet, Q = sparse(1:n,1:n,diag(A),n,n);
DPROD
Fixed the c-code to correctly handle sparse matrices.
Somehow the changes of
DPCHECK
Adjusted to ensure that sizes of analytic and numerical derivatives are
consistent.
RUNDEMOS
Added a clear all command to ensure that default
setting are restored.
All demos run now without errors.
LINDOP
The constant of integration was incorrectly computed for the piece-wise linear
(“LIN”) family of functions. It is now correctly so the integral is 0 at the
left endpoint of the function.
DEMAPP09
The x- and y-axis labels were reversed (quantity
should be on the x-axis).
2/4/04
DDPSIMUL
In the finite horizon section the line
s =
n+1-sum(r(:,u)<cumsum(pstar(s,:,t),2),2);
should be changed to
if t<=N, s =
n+1-sum(r(:,u)<cumsum(pstar(s,:,t),2),2); end
!!!!THIS IS VERY
IMPORTANT!!!!
MEX FILES
A change in the behavior of MATLAB's API functions
created bugs in several MEX files. Specifically, mxIsDouble used to return
false if passed a sparse matrix, but beginning with ver 6.5 now returns true.
All the MEX files (files with extension .c) have been corrected to work with
all versions of MATLAB (ver 5 or higher). These files should be reinstalled and
MEXALL should be rerun to ensure the proper behavior of the toolbox. For Windows ver 5. users, new DLLs
for are provided with the toolbox. All other users MUST run MEXALL.
MEXALL
The utility to compile all of the toolbox MEX files apparently did not run
correctly on UNIX machines. The problem seemed to be in the use of
"/" for directory separators rather than "\". The utility
should work on both Windows and UNIX machines now. If you have trouble with
this function please contact me.
FUNBASX
Changed the handling of "direct" format when
evaluated at points defined by a cell array. This also affected the operation
of FUNDEF, which inadvertently used the "direct" format needlessly. This is a technical
fix that should speed up operations that used FUNDEF.
FUNBCONV
Added the ability to convert form "tensor"
to "expanded" form. This is a feature that is expected to be used
rarely but was added to help with the fix to FUNBASX.
DPROD
Added the ability to handle mixed format matrices
(sparse/double and double/sparse) within the C MEX file. Previously mixed
formats were handled by callbacks to the M file DPRODS. The MEX function both
speeds up direct product operations and reduces the memory load of the
operator. DPROD is a low level utility located in the CETOOLS\PRIVATE
directory. The new DPROD makes DPRODS no longer be necessary.
NOTE: DPROD currently only works for REAL matrices.
LINDEF
Corrected a problem that incorrectly set evenly spaced breakpoint indicator to
0; this would slow execution of basis computations for piecewise linear
functions. Also corrected check for even spacing; if all(abs(diff(diff((breaks))))>5e-15*mean(abs(breaks)))
returns true, the breakpoint sequence is considered to be evenly spaced.
FUNDEFN
Corrected a problem in appending piecewise linear dimensions to a basis
definition. FUNDEFN now checks if the optional extra breakpoint sequences are
evenly spaced and sets the parameters accordingly. The same test is used as in
LINDEF. Also corrected the documentation, which did not
describe this feature.
DPSOLVE
Changed line 236 from
nx = length(model.actions);
to
nx =
= size(X,1);
to allow for multiple discrete control variables.
6/29/03
FJAC1 and FDJAC1
Two new functions added that are 1 sided equivalants of FJAC and FDJAC. Note
that the input syntax of these functions differs from the associated FJAC and
FDJAC because an additional input variable for the function value f(x) can be
passed. This is often already known so it saves on one function evaluation.
Thus a derivative approximation can be obtained in half the time it takes for
FJAC and FDJAC.
NELDMEAD
Actually included the new code refered to below (
QNEWTON
Improved documentation and added a fourth search method allowing the user to
return a approximation to the inverse Hessian to be
used in determining the search direction. The user defined function f must have
the following syntax
[fx,g,A] =
f(x,additional variables)
and the command
optset('qnewton','SearchMeth',4)
should be executed before qnewton is called.
Made a number of changes to RESOLVE to make it conform
to a paper on the topic. This is an alternative rational expectations
solver to the one described in the text (REMSOLVE). See demre01 and demre02 for
demos. Email me for a working paper on the solver.
LUSOLVE
Corrected the m-file version to make 4th and 5th
inputs optional. Note that this m-file shoould not be used - the whole point is
to obtain the speedup of the MEX implementation.
CTBASEMAKE
If coefficients are all 0, this now returns a scalar 0
rather than an empty matrix.
LUSOLVE
Added a new function to perform linear solves using precomputed LU factors.
Matlab code for the function is:
x(colindex)=U\(L\(b(rowindex)))
A MEX file version is also available that speeds up the operation. Some quick
speed comparisons indicated 20% speedups.
FINSOLVE
FINSOLVE now calls LUSOLVE if implicit or CN algorithms are used.
NELDMEAD
Altered convergence criteria to help avoid premature termination.
DPROD (in cetools\private)
Added sparse/sparse computation to MEX file C-code (callbacks to MATLAB are
still used for mixed full/sparse). The routine is storage and timing efficient
and should speed up evaluation of spline function and basis evaluations.
FINSOLVE
Altered explicit and CN algorithms to perform LU decomposition (with minimum
degree column permuatation) prior to iteration loop. This avoids the repeated linear solves used
in old algorithm. This leads to dramatic speed improvements and makes the
methods competitive with the explicit algorithm for multidimensional problems
(with larger time steps).
Added a new feature: setting model.american to -1 will
produce early exercise options for the asset seller such as callable bonds and
early deliver of futures. Buyer early exercise is computed as the
maximum of the value of waiting and the value of exercising. Seller early
exercise is the minumium of the two.
RSSOLVE
Corrected documentation and implementation of setable options
No change in functionality
CHANGES IN DYNAMIC GAME SOLVER AND DEMOS
Added new feature to GAMESOLVE to allow the initial coefficient matrix
to be passed as an empty matrix. GAMESOLVE will compute the initial
coefficients using a policy iteration step evaluated at the initial
values of the decision variables (x).
Also added a new function, GAMECHECK, that checks whether the
analytic
derivatives in a model function file match their finite difference
approximations. This works like DPCHECK.
Altered the 3 game demos to correct errors in the derivatives.
In demgame01 the fxx value were incorrect
In demgame02 the gx and gxx values were incorrect
In demgame03 the fx and fxx values did not compute cross terms
In demgame01 this leads to faster solution times but does not change
the solution.
In demgame02 the solution is changed (although qualitative results
are similar).
In demgame03 no changes occur because the cross terms in fx
and fxx are
never used.
Note the cross terms in fx and fxx lead not be
computed (although
gamecheck will produce a warning message).
The cross terms in gx and gxx, however, are used and must be returned
by the model function file.
Also altered demgame02 to utilize better initial values of x and to
set cinit=[] to force GAMESOLVE to compute initial
coefficient values.
DPCHECK
Simplified the code by using FJAC instead of FDJAC.
For additional information or to report any problems, please contact:
Paul Fackler or Mario Miranda