请教一个数值积分问题,怎样用matlab的quadgk函数来计算
这个积分属于高震荡积分,用经典的高斯积分公式难以奏效,而 MATLAB 核心数值积分函数 quadgk、integral 都是采用传统的高斯积分方法(Gauss-Kronrod quadrature),所以,计算结果不可靠。此处应该以符号积分的结果为准,好在这个积分有解析表达式,你从文献中看到的那个表达式是正确的。实际上,这个解析表达式实际上还有另外一种更简洁的表达式形式:
而你在文献中看到的解析解可以从上述结果中利用下列关系式导出:
【请教一个数值积分问题,怎样用matlab的quadgk函数来计算】
所以,你也可以按下列方式直接计算:-pi/2*bessely(0,k*R)
如果要用数值方法的话,需要采用专门适用于高震荡积分的方法,比如 Levin 算法,可惜MATLAB中没有现成的函数使用,需要自己实现算法。
■网友
现在新版本的matlab,比如R2016,都已经用integral函数来替代之前的积分函数吧。它所用的算法是可以计算振荡积分的,文献可以用matlab的help查看。我经常用integral,很强大,速度慢了但精度还可以,建议楼主试一下~
■网友
楼主不妨这样试一下,可以得到正确答案的k0=10; R=6; p_f=@(s)(s).*besselj(0,s*R)./(s.^2-k0^2);eps=1e-8;p1=quadgk(p_f,0,k0-eps);p2=quadgk(p_f,k0+eps,inf);p_incN=p1+p2
将奇异点附近的部分,在略微截断下
推荐阅读
- 同比■同比增长7.1%!2021年的第一个节你花了多少钱?
- “他是我第一个会说普通话的老师”:一对师生折射青海山村蝶变
- 有必要重新开个C店吗
- 大学再有三个月就结束了,没学到知识,参加一个软件测试培训机构好吗
- 汽车|长安UNI-K又将开创一个新的"引力"纪元?
- 神话|武汉传奇父亲:一个平行班孩子创造的高考神话(感动上万家长)
- 王者荣耀李白能不能出肉
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- 怎样成为一名合格的Python程序员?
- 知乎有没有必要增加一个特别关注功能