如何解决对于R中的x <0或x> 0,使用不同的方程式计算被积数:误差非限定值
我正在使用下面的等式(random_walk_func1
和random_walk_func2
)来构建一个由random_walk_func1
在x < 0
时由random_walk_func2
描述的被积x > 0
,而在x = 0
定义其整数是没有意义的。我执行以下操作。
在上一个问题(Numerical Solution for Integral between -Inf and Inf: Error non-finite function value之后,我对random_walk_func1
进行了修改,使其对于-Inf
和Inf
之间的值更加稳定。
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 举报,一经查实,本站将立刻删除。