R中具有无穷总和的修正贝塞尔函数

时间:2019-03-19 17:19:11

标签: r sum bessel-functions

我正在尝试在R中实现以下公式,其中r0,t,theta0和alpha是常数。另外,我是第一类的修改贝塞尔函数。我想,我的问题是从“总和”一词到公式的结尾。考虑到函数快速收敛到零,因此我将n设置为150,因此没有必要超过150。我使用的是“ Bessel”包。

Formula1

Formula2

Results to reproduce第一行= t,第二行= Defaultcorr,以%

这是我到目前为止所拥有的。我似乎找不到我的错误。当t = 1时,Defaultcorr应该为0.04%(根据图像“再现结果”)。 要获得此结果,“ m”应等于6.234611709。

V1 = 5
V2 = 5
K1 = 1
K2 = 1
sigma1 = 0.3
sigma2 = 0.3
Z1 = log((V1/K1)/sigma1)
Z2 = log((V2/K2)/sigma2)
t = 1
rho = 0.4

#One firm default -> Firm #1 when lambda = mu
PD_asset1 = 2 * pnorm(-(Z1/sqrt(t)))
PD_asset1
PD_asset2 = 2 * pnorm(-(Z2/sqrt(t)))
PD_asset2

#Results assuming that lambda = mu

#Conditions for alpha, theta0, r0


if (rho < 0) {                        #alpha
  alpha = atan(-(sqrt(1-rho^2)) / rho)
} else {
  alpha = pi + atan(-(sqrt(1-rho^2)) / rho)
}

if (rho > 0) {                        #theta0
  theta0 = atan((Z2 * sqrt(1 - rho^2)) / (Z1 - (rho * Z2)))
} else {
  theta0 = pi + atan((Z2 * sqrt(1 - rho^2)) / (Z1 - (rho * Z2)))
}

r0 = (Z2 / sin(theta0))                 #r0



#Simplified function

h = function(n) {
  (sin((n * pi * theta0)/alpha)/n)
}

n = seq(1, 150, 2)

Bessel1 = (besselI(((r0^2)/(4*t)), (0.5*(((n*pi)/alpha) + 1)), FALSE))
Bessel2 = (besselI(((r0^2)/(4*t)), (0.5*(((n*pi)/alpha) - 1)), FALSE))


l = matrix(data = n, ncol = n)
m = apply((h(l)*(Bessel1 + Bessel2)), 2, FUN = sum) 


PD_asset1_or_asset2 = 1 - (((2 * r0)/(sqrt(2*pi*t))) * (exp(-(r0^2)/(4*t))) * m)
PD_asset1_or_asset2


Var_asset1 = PD_asset1 * (1 - PD_asset1)
Var_asset1

Var_asset2 = PD_asset2 * (1 - PD_asset2)
Var_asset2

PD_asset1_and_asset2 = PD_asset1 + PD_asset2 - PD_asset1_or_asset2
PD_asset1_and_asset2

Defaultcorr = (PD_asset1_and_asset2 - (PD_asset1 * PD_asset2)) / (sqrt(Var_asset1 * Var_asset2))
Defaultcorr

任何帮助将不胜感激。谢谢

0 个答案:

没有答案