R/Black-Scholes-Merton模型中非线性方程组的求解

R/Black-Scholes-Merton模型中非线性方程组的求解,r,nonlinear-optimization,R,Nonlinear Optimization,我正在写硕士论文,我在R代码中遇到了这个问题。从数学上讲,我想用R包“nleqslv”来解这个非线性方程组: fnewton <- function(x){ y <- numeric(2) d1 = (log(x[1]/D1)+(R+x[2]^2/2)*T)/x[2]*sqrt(T) d2 = d1-x[2]*sqrt(T) y1 <- SO1 - (x[1]*pnorm(d1) - exp(-R*T)*D1*pnorm(d2)) y2 <- sigmaS*SO

我正在写硕士论文,我在R代码中遇到了这个问题。从数学上讲,我想用R包“nleqslv”来解这个非线性方程组:

fnewton <- function(x){

y <- numeric(2)

d1 = (log(x[1]/D1)+(R+x[2]^2/2)*T)/x[2]*sqrt(T)

d2 = d1-x[2]*sqrt(T)

y1 <- SO1 - (x[1]*pnorm(d1) - exp(-R*T)*D1*pnorm(d2))

y2 <- sigmaS*SO1 - pnorm(d1)*x[2]*x[1]

y}

xstart <- c(21623379, 0.526177094846878)

nleqslv(xstart, fnewton, control=list(btol=.01), method="Newton")
fnewton无风险利率

T->设置为1(时间)

sigmaS->估计(历史)股票波动率

已经谢谢了!!!我很高兴,任何人都能帮助我。
卡罗

我是nleqslv的作者,我对你如何使用它感到非常惊讶。 正如其他人所提到的,你没有归还任何合理的东西

y1应该是y[1],y2应该是y[2]。如果你想让我们说一些合理的话,你必须提供D1、R、T、sigmaS和SO1的数值。我试过这个:

T <- 1; D1 <- 1000; R <- 0.01; sigmaS <- .1; SO1 <- 1000  

T不要调用变量
T
。这是R中
TRUE
的别名,覆盖可能会产生不可预见的后果。但是,您需要检查用于计算
d1
d2
的所有变量是否都是数字。d1、R、T或SO1都没有在代码中定义。@Roland:谢谢,我会试试这个。太好了。。。。但这并不能帮助那些试图帮助你的人。你似乎没有给
y
赋值:你的函数每次都返回
c(0,0)
library(nleqslv)

T <- 1
D1 <- 1000
R <- 0.01

sigmaS <- .1
SO1 <- 1000

fnewton <- function(x){
    y <- numeric(2)
    d1 <- (log(x[1]/D1)+(R+x[2]^2/2)*T)/x[2]*sqrt(T)
    d2 <- d1-x[2]*sqrt(T)
    y[1] <- SO1 - (x[1]*pnorm(d1) - exp(-R*T)*D1*pnorm(d2))
    y[2] <- sigmaS*SO1 - pnorm(d1)*x[2]*x[1]
    y
}

xstart <- c(21623379, 0.526177094846878)