Jim Gatheral gives a model to approximate variance = volatility^2 * time in his handout
A parsimonious arbitrage-free implied volatility parameterization
with application to the valuation of volatility derivatives (June 2004),
http://www.math.nyu.edu/fellows_fin_math/gatheral/madrid2004.pdf
It can be used to fit a smile of implied volatility for a single expiry.
For fitting one needs initial settings for parameters used.
This can be done looking at the asymptotics of the model and the data as soon as the
data show 'wings' for the volatility smile (especially if a minimum can be seen, which
is used as well). If that is not possible through the data: forget that worksheet.
An 'automatic' guess is computed in the named range 'arrParams_automatic' (1)
where the input are strikes and volatilities (green) providing forward and time to expiry.
Then there are 2 ways to refine that to a fit:
One can either use Excel's Solver: copy the automatic guess (1) to the range right to
'Solver's results' (4) and just run it (assuming it is installed it is already configured,
so just start it through the menu - it will update that range (4) to give the parameters).
Solver here will use a Newton method (but can cover a gradient method as well).
Or one can use a local optimizer like Levenberg-Marquardt, which is also coded
in the VBA project - that will take its input from the range on the right hand side
of 'initial guess' (just copy the values of the automatic guess (1) to that place (2) )
giving the results in range (3).
Within the graphic one sees the volatility and the two graphs of the approximations
resulting from Solver and the LM respectively (almost identical, scalings at the left)
and the graph given through the initial guess (grey curve).
At the left axes the errors are shown for the two solutions - in both cases the approx
errors are quite small except the boundaries.
LM is a bit slow in Excel ( ~ 2 sec), a compiled version from a DLL should speed it
up by a factor of 10. I would prefer LM against a Newton method as it seems to stay
closer to the initial and automatic guess while Newton seems to be a bit faster here
(ok, both are local optimizers and it is a model anyway ...).
Some more technical info can be taken from the comments in the source code.
Avt, Oct 2005