Ваша основная функция ничего не возвращает.Он просто создает вспомогательные функции, а затем ничего не делает.Вот почему вы не получаете вывод.
Попробуйте вместо этого вернуть метод деления пополам с соответствующими параметрами в вашей основной функции.Я также отредактировал, чтобы вы получили 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