Три функции в R - PullRequest
       5

Три функции в R

0 голосов
/ 28 мая 2018
 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)
}

}

Вышеуказанная функция ничего не даст для вас.Моя цель - ввести значения «N, K, sigma, t, r, S_0, a, b» и каким-то образом вернуть «midpt» для меня.Я много искал, но не смог придумать ничего, что имеет смысл.У меня много проблем, предположим, что я все ввожу, тогда как функция «funct_1» будет выводить выражение, это выражение нужно вызвать в следующую функцию «bisection_method} вместе со значениями a и b, а затем, наконец, получить« midpt »«Ценность. Любые предложения действительно приветствуются. Пожалуйста, дайте мне знать, если вам что-то непонятно.

1 Ответ

0 голосов
/ 28 мая 2018

Ваша основная функция ничего не возвращает.Он просто создает вспомогательные функции, а затем ничего не делает.Вот почему вы не получаете вывод.

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