首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二重积分的自适应Simpson求积算法?

二重积分的自适应Simpson求积算法?
EN

Stack Overflow用户
提问于 2019-12-22 02:23:50
回答 1查看 474关注 0票数 0

我目前使用Richard L Burden的Numerical Analysis第10版作为近似积分技术的参考。在这里,它描述了自适应辛普森求积规则,该规则只输入边界和误差公差,并在误差公差的精度内输出近似积分。这种方法比标准的辛普森规则更有效,在标准辛普森规则中,您必须输入迭代次数,而不知道它与实际解的距离有多近。然而,这本书继续描述了一种使用辛普森规则的二重积分方法,但没有描述二重积分的算法自适应辛普森求积规则。有人知道二重积分的自适应辛普森规则的伪算法吗?

作为参考,这是用于单积分的复合辛普森规则的伪算法:输入边界(a,b)和n次迭代

代码语言:javascript
复制
 `NAME: compositeSimpsons(a, b, n):
h=(b-a)/n
first = f(a)
last = f(b)
sum=0
x = a+h
for(i=2:n-1)
   if(i%2==0) // even
      sum+=4*(x)
   else // odd
      sum+=2*f(x) 
x+=h
end for
return (h/3) * (first+sum+last)`

这里是单积分的自适应辛普森求积的伪算法:(输入界a,b)和容差(tol)

代码语言:javascript
复制
`NAME: adaptiveQuadratureSimspons(a, b, tol):
myStack.push(a)
myStack.push(b)
I=0
while(myStack is not empty)
    bb = myStack.pop()
    aa = myStack.pop()
    I1 = compositeSimpsons(aa, bb, 2)
    m = (aa+bb)/2
    I2 = compositeSimpsons(aa, mm, 2) + compositeSimspons(mm, bb, 2)
    if(|I2-I1|/15 < (bb-aa)*tol)
        I += I2
    else
        myStack.push(m)
        myStack.push(bb)
        myStack.push(aa)
    myStackl.push(m)
end while
return I`

两个积分的辛普森规则的算法变得非常复杂,因为你用不同的细分来替换每次迭代的x变量,所以除非必要,否则我不会在这里详细介绍。然而,我知道问题不是那个算法,因为我已经尝试过很多次了,对于许多不同的双重积分问题都很好用。我尝试使用与自适应辛普森规则相同的逻辑,将compositeSimpsons()替换为我的compositeSimpsonsDouble(),这与自适应辛普森规则中的双积分自适应辛普森规则相同,但它进入了无限循环,因为I2和I1之间的差值总是小于容差。有什么帮助吗?用Java编写代码

EN

回答 1

Stack Overflow用户

发布于 2019-12-24 18:38:21

在数值求积的行话中,“双重积分”的作用并不像你想要积分函数的域那么大。在一维中它总是一个区间,在二维中它可以是一个圆盘,一个矩形,一个三角形,一个带有权函数exp(-r**2)的平面,等等,也许你的二重积分就是其中之一。对于所有这些不同的领域,您都有不同的集成技术。有关示例,请参阅https://github.com/nschloe/quadpy

对于2D中的自适应求积,我的第一个冲动是检查域是否可以由许多三角形很好地近似。就像1D中的间隔一样,如果误差估计器建议的话,这些间隔可以很容易地分割成更小的三角形。

请查看https://github.com/nschloe/quadpy/wiki/Adaptive-quadrature,了解如何使用quadpy完成此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59438763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档