IS <- function(N,K,sigma,t,r,S_0,a,b,tol){
funct_1 <- function(x){
return((S_0*(exp(-0.5*(sigma^2)*t+sigma*sqrt(t)*x))*(sigma*sqrt(t)-x))+
(exp(-r*t))*K*x)
}
bisection_method <- function(a, b, tol, f = funct_1){
if (f(a)*f(b) > 0){
print("No root found.")
} else
while ((b - a)/2.0 > tol){
midpt= (a + b)/2.0
if (f(midpt) == 0){
return(midpt)
} else if (f(a)*f(midpt) < 0){
b = midpt
} else
a = midpt
}
return(midpt)
}
}
以上功能不会为您带来任何好处。我的目标是输入&#34; N,K,sigma,t,r,S_0,a,b&#34;并以某种方式返回&#34; midpt&#34;为了我。我搜索了很多,但无法想出任何有意义的东西。我有很多问题,假设我输入了所有内容,然后是函数&#34; funct_1&#34;将输出表达式,此表达式需要被调用到下一个函数&#34; bisection_method}以及a和b的值,然后最终获得&#34; midpt&#34;值。任何建议都非常感谢。如果您有什么不清楚的地方,请告诉我。
答案 0 :(得分:3)
您的主要功能不会返回任何内容。它只是创建辅助功能,然后什么都不做。这就是为什么你没有输出。
尝试在主函数中使用适当的参数返回二分法。我也进行了编辑,因此在找不到根时会得到NULL
输出。
IS <- function(N,K,sigma,t,r,S_0,a,b,tol){
funct_1 <- function(x){
return((S_0*(exp(-0.5*(sigma^2)*t+sigma*sqrt(t)*x))*(sigma*sqrt(t)-x))+
(exp(-r*t))*K*x)
}
bisection_method <- function(a, b, tol, f = funct_1){
if (f(a)*f(b) > 0){
print("No root found."); return(NULL)
} else
while ((b - a)/2.0 > tol){
midpt= (a + b)/2.0
if (f(midpt) == 0){
return(midpt)
} else if (f(a)*f(midpt) < 0){
b = midpt
} else
a = midpt
}
return(midpt)
}
return(bisection_method(a,b,tol,funct_1))
}
找出一些有意义的参数组合:
IS(1,1,1,4,5,1,.1,9,10^-4)
[1] 2.000023