Resource ownership: document for each matrix function returning a reference if the user has to deallocate the resource (if you are reading this: the answer is most likely YES, meanwhile check the source code if the resource is allocated in the function on the heap).
LmmLattice
Option::isExercisable(Real t)
uses continuous time t, the lattice pricing code in Pricing.h relies
on the comparison of floats when instantiated for Bermudan swaptions.
This is fragile and works only if the exercise times are exact integral multiples of the
lattice time step. Reflect upon alternatives.Control variates: seem to have an adverse effect despite extremely high correlation. Investigate this by computing the mean and variance of the caplet price over say 20 runs for caplets in a PC LMM (where we have exact analytics) with and without control variates.
LiborMarketModel and derived classes: the use of the cache XLvec is the only reason that the member function XLvec(t,p) is not constant and that propagates through basically all the Libor quantity member functions. Reflect upon wether it's worth it or wether we should return from the stack.
Doxygen-docs
Matrix: UTRMatrix<Real>
is not the same as
UTRRealMatrix
.
This is due to the fact that there are no templated typdefs.
Affects: RandomObject. The covariation matrix has type UTRMatrix<S>
.
Thus the functionality of UTRRealMatrix
is not available for RandomObjects
with Real scalars (factor analysis, matrix functions). Possible solutions:
Move the functionality of UTRRealMatrix
to the more general type
UTRMatrix<S>
or limit RandomObjects to Real scalars.
Headers: clear up the problem with the typedef in forward declarations and remove "#include Matrix.h" from headers if it is not really needed.
Random::MersenneTwister::u01()
kk+MT_D
should be
kk-MT_D
. This writes off the end of the array mt
.
Fixed: 9-22-03.