一个棘手的功能的数值积分(numerical integration of a tricky fun

2019-07-31 14:46发布

prob包数值计算特性函数为基础R分布。 对于几乎所有的分布存在现有的公式。 在少数情况下,虽然没有封闭形式的解决方案是已知的。 案例分析:威布尔分布(见下文)。

对于韦伯的特色功能基本上我计算两个积分,并把它们放在一起:

fr <- function(x) cos(t * x) * dweibull(x, shape, scale)
fi <- function(x) sin(t * x) * dweibull(x, shape, scale)
Rp <- integrate(fr, lower = 0, upper = Inf)$value
Ip <- integrate(fi, lower = 0, upper = Inf)$value
Rp + (0+1i) * Ip

是的,它的笨拙,但它的作品出奇地好! ...... 啊哈 ,大部分的时间。 用户近日报道,以下游:

cfweibull(56, shape = 0.5, scale = 1)

Error in integrate(fr, lower = 0, upper = Inf) : 
  the integral is probably divergent

现在,我们知道,积分不发散,所以它必须是一个数字问题。 随着一些摆弄我能得到以下工作:

fr <- function(x) cos(56 * x) * dweibull(x, 0.5, 1)

integrate(fr, lower = 0.00001, upper = Inf, subdivisions=1e7)$value
[1] 0.08024055

这是确定的,但它是不完全正确,再加上它需要摆弄它不能很好地扩展公平一点。 我一直在调查这为更好的解决方案。 我发现了一个最近出版的“封闭形式”与特征函数scale > 1 ( 见这里 ),但它涉及到赖特的广义超几何函数未在R(还)来实现。 我看着档案的integrate方案,并有一吨的东西在那里它似乎并没有很好地组织。

作为其中的一部分搜索它发生,我通过反正切, 整合的区域转化为有限区间! 看看这个:

cfweibull3 <- function (t, shape, scale = 1){
  if (shape <= 0 || scale <= 0) 
    stop("shape and scale must be positive")
  fr <- function(x) cos(t * tan(x)) * dweibull(tan(x), shape, scale)/(cos(x))^2
  fi <- function(x) sin(t * tan(x)) * dweibull(tan(x), shape, scale)/(cos(x))^2
  Rp <- integrate(fr, lower = 0, upper = pi/2, stop.on.error = FALSE)$value
  Ip <- integrate(fi, lower = 0, upper = pi/2, stop.on.error = FALSE)$value
  Rp + (0+1i) * Ip
}

> cfweibull3(56, shape=0.5, scale = 1)
[1] 0.08297194+0.07528834i

问题:

  1. 你可以做的比这更好的?
  2. 是否有一些关于数值积分例程人谁是专家对这种事情会揭示这里发生了什么一些轻? 我有一个鬼鬼祟祟的怀疑对于大t余弦快速波动导致的问题......?
  3. 是否有现有研发程序/包,其更适合这种类型的问题,并可能有人点我到一个精心布置的位置(山)开始攀登?

评论:

  1. 是的,这是不好的做法,使用t作为函数参数。
  2. 我计算了确切的答案shape > 1使用公布的结果与枫叶,和brute-force-integrate-by-the-definition-with-R踢枫的屁股。 也就是说,我得到相同的答案(最多计算精度)在第二的一小部分,价格甚至更小部分。

编辑:

我要写下我在寻找确切的积分,但似乎这个特定的网站不支持MathJAX所以我给链接,而不是。 我期待数值评价特征函数中的Weibull分布合理的投入t (意义)。 该值是一个复杂的数字,但我们可以把它分成了实部和虚部,而这正是我打电话RpIp以上。

最后一个评论:维基百科具有用于威布尔CF中列出的式(无穷级数)和式相匹配的在我上面引用的纸证明了, 但是 ,该系列只被证明保持shape > 1 。 的情况下0 < shape < 1仍然是一个未解决的问题; 详见纸。

Answer 1:

您可能有兴趣看看这个文件,该文件讨论了高振荡积分不同的整合方式-这就是你基本上是试图计算: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1。 1.8.6944

此外,另一种可能的建议,是不是无限的限制,你可能要指定一个较小的一个,因为如果你指定你想要的精确度,然后根据韦伯的CDF您可以轻松地估计有多少尾,你可以的截短。 如果你有一个固定的限制,那么你就可以准确地(或几乎)(为了有每期几(4-8)点如)指定的细分数目。



Answer 2:

我有比周杰伦同样的问题-不能与Weibull分布,但与集成功能。 我发现我的回答周杰伦的问题3中对这个问题评论:

中的R发散积分是在钨可解

将R包pracma包含数值求解积分若干功能。 在封装中,人们发现有些R里面的函数用于集成某些数学函数。 而且还有一个更通用的函数积分 。 这有助于在我的情况。 示例代码如下。

问题2:第一个答案的链接的问题(上述)指出,不是C源文件的完整错误消息是由R(功能可以只是收敛太慢)打印出来。 因此,我将与周杰伦同意,余弦的快速波动可能是一个问题。 在我的情况,并在它下面的例子是问题。

示例代码

# load Practical Numerical Math Functions package
library(pracma)

# define function
testfun <- function(r) cos(r*10^6)*exp(-r)

# Integrate it numerically with the basic 'integrate'.
out1 = integarte(testfun, 0, 100)
# "Error in integrate(testfun, 0, 100) : the integral is probably divergent"

# Integrate it numerically with 'integral' from 'pracma' package
# using 'Gauss-Kronrod' method and 10^-8 as relative tolerance. I
# did not try the other ones.
out2 = integral(testfun, 0, 100, method = 'Kronrod', reltol = 1e-8)

两个讲话

  1. 积分功能不破的集成功能做,但它可能需要相当长的时间来运行。 我不知道(我没有尝试)用户是否可以限制迭代次数(?)。
  2. 即使积分功能最终确定没有错误我不知道结果如何正确的是。 数值积分,这是快速波动围绕零的功能似乎是相当棘手,因为一个不知道哪里的计算上的波动函数究竟值(两倍,比负值很多积极;靠近当地的最大值和负值正值遥远) 。 我不是对数字集成专家,但我也是刚刚才知道在我的讲课NUMERICS一些基本的固定步长的整合方法。 因此,也许在整体交易中使用以某种方式这个问题的自适应方法。


Answer 3:

我试图回答问题1和3,话虽这么说,我没有任何贡献原代码。 我做了谷歌搜索,希望这是有帮助的。 祝好运!

出处:http://cran.r-project.org/doc/contrib/Ricci-distributions-en.pdf(第6页)

#Script

library(ggplot2)

## sampling from a Weibull distribution with parameters shape=2.1 and scale=1.1
x.wei<-rweibull(n=200,shape=2.1,scale=1.1) 

#Weibull population with known paramters shape=2 e scale=1
x.teo<-rweibull(n=200,shape=2, scale=1) ## theorical quantiles from a

#Figure
qqplot(x.teo,x.wei,main="QQ-plot distr. Weibull") ## QQ-plot
abline(0,1) ## a 45-degree reference line is plotted


Answer 4:

这是什么用途?

http://www.sciencedirect.com/science/article/pii/S0378383907000452

Muraleedharana等人(2007)改进的威布尔分布为最大和显著波高模拟和预测, 海岸工程 ,54卷,第8期,2007年8月,630-638页

从抽象:“威布尔分布的特性函数导出”。



文章来源: numerical integration of a tricky function
标签: r integration