【问题标题】:Problems with Gaussian Quadrature in RR中的高斯求积问题
【发布时间】:2016-01-06 19:53:05
【问题描述】:

我正在使用 gaussquad 包对一些积分进行数值计算。

我认为 ghermite.h.quadrature 命令通过在点 x1、...、xn处评估函数 f(x) 来工作> 然后构造总和 w1*f(x1) + ... + wn*f(xn),其中 x1, .. ., xnw1, ..., wn 是用户提供的节点和权重。

所以我想到了命令

ghermite.h.quadrature(f,rule)
sum(sapply(rule$x,f)*rule$w)

对于任何函数f都会产生相同的输出,其中''rule''是一个数据框,它将节点存储在标记为''x''的列中,权重存储在标记为"的列中w”。对于许多函数,输出确实是相同的,但对于某些函数,我得到的结果却大不相同。有人可以帮我理解这种差异吗?

谢谢!

代码:

n.quad = 50 
rule = hermite.h.quadrature.rules(n.quad)[[n.quad]]

f <- function(z){ 

 f1 <- function(x,y) pnorm(x+y)

 f2 <- function(y) ghermite.h.quadrature(f1,rule,y = y)

 g <- function(x,y) x/(1+y) / f2(y)*pnorm(x+y)

 h <- function(y) ghermite.h.quadrature(g,rule,y=y)

 h(z)

}

ghermite.h.quadrature(f,rule)
sum(sapply(rule$x,f)*rule$w)

【问题讨论】:

  • @SeverinPappadeux 好的,我添加了它
  • 可以确认值确实不同,0.34 vs 0.203
  • 标准化问题?结果的比率接近 \sqrt(\pi)

标签: r math statistics


【解决方案1】:

好的,这个问题引起了我的兴趣。

我查看了gaussquad 来源,显然作者没有在内部运行sapply,因为所有被积函数/函数都应在向量参数上返回向量。

文档中有明确说明:

functn 一个 R 函数,它应该接受一个数字参数 x 和可能的一些参数。 该函数返回给定参数x的数值向量值

如果您使用一些内部函数,它们就是这样编写的,所以一切正常。

你必须重写你的函数以使用向量参数并返回一个向量

更新

Vectorize() 可以帮助我纠正问题,以及使用 sapply 的简单包装器

vf <- function(z) {
    sapply(z, f)
}

在其中任何一个更改之后,结果都是相同的:0.2029512

【讨论】:

  • 我可以使用 Vectorize() 来执行此操作吗?
猜你喜欢
  • 2015-01-22
  • 2021-07-20
  • 2018-10-03
  • 2012-02-20
  • 2016-02-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多