Pricing_Library / Derivatives / Convolution Method / charfunction.m
charfunction.m
Raw
function F = charfunction(u, parameters, flag)

% flag = 0 => characteristic function for the backward problem
% flag = 1 => characteristic function for the forward problem

if nargin == 2
    flag = 0; % characteristic function for the backward problem by default
end

% risk-neutral characteristic exponent
meancorrection = (parameters.rf - parameters.q) * parameters.dt - log( charfunction0( -1i, parameters) );
         
% compute characteristic function
F = exp(1i * meancorrection * u) .* charfunction0(u, parameters);

if flag == 0
    F = conj(F);
end


end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function F = charfunction0(u, parameters)

dt = parameters.dt;

switch parameters.distr

    case 1 % Normal
        
        % parameters
        m = parameters.m;
        s = parameters.s;
	
	    % rearrange parameters (time rescaling)
        m = m * dt;
        s = s * sqrt(dt);

        % compute characteristic function
        F = exp(1i * u * m - 0.5 * (s * u).^2);

    case 2 % Normal inverse Gaussian (NIG)
        
        % parameters
        alpha = parameters.alpha;
        beta = parameters.beta;
        delta = parameters.delta;

        % rearrange parameters (time rescaling)
        alpha = alpha;
        beta = beta;
        delta = delta * dt;
        
        % compute characteristic function
        F = exp( - delta * ( sqrt( alpha^2 - ( beta + 1i * u).^2 ) - sqrt( alpha^2 - beta^2 ) ) );
   
end


end