I confess: I was so satisfied with the quality of our results that I did not ask the correct question: Is this high volatility really a difficult case?
High volatility adds diffusion to the differential equation which should be then easy to be solved as long as you use implicit or semi-implicit schemes. Standard finite element or fintie difference schemes (with central differences used as approximation for the first order derivatives) might get into troubles, when convection gets dominant. In the Vasicek exmaple, this means that volatility should be low, reversion speed should be high for the test case.
Therefore, we now try
(1) a = 0.05, b = 0.5, sigma = 0.005
and
(2) a = 0.05, b = 0.5, sigma = 0.0005
and calculate the prices V of the 10 years zero coupon bond for an initial short rate r = 0.
The analytic solution gives
(1) V= 0.4489
and
(2) V = 0.4487.
We use Dirichlet conditions V=1 at r = -0.4 and at r = 0.4 and compare to numerical schemes
(a) fully implicit time-stepping, central differences for first derivatives
(b) fully implicit time-stepping, upwinding for first derivatives.
Here are the results.
Case (1)
Method (a): V = 0.4489
Method (b): V = 0.4492
Case (2)
Method (a): V = -0.0509
Method (b): V = 0.4491.
What happened here?
The bond prices for different initial spot rates calculated by Method (a) exhibit the following behavior in case(2)
whereas the upwinding method (b) shows an almost boring plot
The upwinding method shows the same smooth behavior as before.
My conclusion when convection plays a role: Use stable methods to get reliable results.
By the way, you can find such methods in the Workout