R/Black-Scholes-Merton模型中非线性方程组的求解
我正在写硕士论文,我在R代码中遇到了这个问题。从数学上讲,我想用R包“nleqslv”来解这个非线性方程组: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
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)