function xxx = lect03ivsurfparam clear; format compact; pts = load('c:/VolSurf0.dat'); K = pts(:,1); F = pts(:,2); C = pts(:,3); T = pts(:,4)/252; IV = pts(:,5); r = 0.03; VM = mean(IV) % fit volatility surface MN = mness(K, F, T); pars = [ VM, -5., 3., 0.]; opts = optimset('Display','iter','TolFun',0.00001); x = lsqnonlin(@iverrors,pars,[], [], opts, MN, T, IV); figure(1); plot3(MN,T,IV,'o'); hold on; [DM,TM] = meshgrid(-.2:.02:.6,0:.02:1.2); ZM = ivfitted(x, DM, TM); mesh(DM, TM, ZM); hold off; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y = ivfitted(pars, MN, T) % The parametrized fitted surface y = pars(1) + pars(4) * T + pars(3) * exp( pars(2) * T) .* MN; function y = iverrors(pars, MN, T, IV) % The parametrization errors y = ivfitted(pars, MN, T) - IV; function y = mness(K, F, T) % The moneyness function y = log(F./K) ./ sqrt(T);