我在R
中定义了以下函数
(其中a
是一个给定的常量,是一个已知的函数)但是当我尝试计算它的值时,我会得到一些非常奇怪的数字。
我应该指出,为了计算f(s)
的值,我实际上已经在分析前解决了积分,因此,实际上,我在R中的用户定义函数不必计算那个积分。我想看看我的R代码是否犯了错误(因为我非常确定我正确地解决了积分),将我的值与我得到的值进行比较如果我要用数字求解积分。我已经阅读了integrate
的文档,但它似乎没有做我需要的:我是否正确?任何人都能指出我正确的方向吗?
答案 0 :(得分:4)
这应该有效:
# Function
f=function(s,a,lambda){
1-exp(-integrate(lambda,lower=a,upper=s,rel.tol=1e-5)$value)
}
# Check
f(s=1,a=0,lambda=function(t) t)
1-exp(-1/2)
一些重要警告:
1)integrate
需要使用矢量化函数,您需要调整lambda
函数以满足此约束(例如使用lambda.vect=function(t) sapply(t,function(tt) lambda(tt))
)。回想一下这里发生的事情:
f(s=1:2,a=0,lambda=function(t) 1) # Use rep(1,length(t)) instead
2)如果函数$ \ lambda $过于摇晃,那么您可能需要适当地调整参数subdivisions
和abs.tol
,请参阅文档。
3)f
不是矢量化函数,因此无论是否将向量传递给s
,它都将返回单个值。要对其进行矢量化,请在1)上调整解决方案。