对于R中的x <0或x> 0,使用不同的方程式计算被积数:误差非限定值

问题描述

我正在使用下面的等式(random_walk_func1random_walk_func2)来构建一个由random_walk_func1x < 0时由random_walk_func2描述的被积x > 0,而在x = 0定义其整数是没有意义的。我执行以下操作。

在上一个问题(Numerical Solution for Integral between -Inf and Inf: Error non-finite function value之后,我对random_walk_func1进行了修改,使其对于-InfInf之间的值更加稳定。

random_walk_func1 <- function(x,t,A,sigma,y){
  a1 = log(2 * A / sigma) + 4 * A * (y - x + (4 * A * t)) / sigma
  b1 = log(erfc((y - x + 8 * A * t) / (2 * sqrt(sigma * t))))
  exp(a1 + b1)
}

random_walk_func2的原始功能是:

random_walk_func2<-function(x,y){
  
  n1 = exp(-((y - x)^2)/(4 * sigma * t)) + exp(-((y + x)^2)/(4 * sigma * t))
  d1 = sqrt(4 * pi * sigma * t)
  a2 = 2 * A /(sigma) * exp((4 * A *(y + x +(4 * A * t)))/(sigma))
  b2 = pracma::erfc(((y + x)+(8 * A * t))/(2 * sqrt(sigma * t)))
  res = (n1/d1) - (a2 * b2)
  return(res)
}

为了避免出现random_walk_func1的结果,我正在考虑以类似于函数NaN的方式重写它:

random_walk_func2<-function(x,y){

  n1 = exp(-((y - x)^2)/(4 * sigma * t)) + exp(-((y + x)^2)/(4 * sigma * t))
  d1 = sqrt(4 * pi * sigma * t)
  a2 = log(2 * A /(sigma) * exp((4 * A *(y + x +(4 * A * t)))/(sigma)))
  b2 = log(pracma::erfc(((y + x)+(8 * A * t))/(2 * sqrt(sigma * t))))
  res = (n1/d1) - exp(a2 + b2)
  return(res)
}

但是,当我在random_walk_func2-Inf之间集成Inf时,却收到non-finite value错误。您建议如何解决这个问题?

我要提出的第二点是关于被积数的构建,它在random_walk_func1时由x < 0描述,在random_walk_func2时由x > 0描述,而对于在x = 0处定义其整数。

因此,我将其写为:

num_integral<-function(x,y){

  if(x>0){
    int.res  = random_walk_func2(x,y)
  }
  if(x<0){
    int.res  = random_walk_func1(x,y)
  }
  if(x==0){}
  return(int.res)
}

您认为这是正确的吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...