luleisure 发表于 2018-6-20 03:03:42

关于计算二维积分:当被积分对象为复杂的隐函数时的处理问题

现在遇到一个被积分函数为复杂隐函数关系的二维积分问题,因为被积分对象是一个由积分参数依赖的6维矩阵的本征值,本征矢组合成的复杂式子,因而没有显式,假定包含了之前所有计算的可以调用的函数为F(x,y), 只能输入(x,y)2个参数得到一个数f, 现在我要对这个F在(x,y )的二维区域进行积分,可喜的是积分区域是一个长方形,并且积分对象没有振荡行为,而且连续光滑(虽然这个之前的关系很复杂,没法看出,但是因为这是研究的是一个物理问题,这个是物理量,它的行为是可以预见的),我本来想利用matlab原有的积分,但是很快发现这个貌似是无法向量化的。所以我接着用最简单的粗粒化1000*1000网格,然后输出格点值,再求和乘以单元面积,当其他参数(非积分参数x,y)合适的时候,结果还不错(精度在10-3左右,因为是有物理意义的量,正确值一定是一个整数(数学上说其实算的是陈数),所以我可以判断精度),但是当参数不是那么合适的时候,局部的被积隐函数将很陡(相邻节点的值相差可以是几百!!),这时候那部分的精度就很低了,然后算的结果偏差就很大,我计算2000*2000的话需要8个小时才能跑完,如果无脑的提升格点那么将计算成本很大,我看了一些论坛计算二维积分的帖子,目前想尝试版主rocwoods http://forum.simwe.com/forum.php?mod=viewthread&tid=790492这个帖子提到的做法,但是不知道还有么有其他好的思路,在兼顾时间和精度的同时,得到比较好的值,误差控制在10-3基本就够了。我看了本领域内其他人提到的数值计算这个量的方式,但是你们懂的科研文章这类东西都不会明说,人家只是说选用2500*2500 Gaussian Mesh ,我不知道这个是不是类似前面的帖子的做法。 期待各位讨论提供更好的解决思路,在日常的工作,我经常遇到这类跟矩阵本征值本征矢隐函数的积分,希望能得到一个比较普遍的思路。谢谢~

luleisure 发表于 2018-6-20 03:09:13

可以看到这个第一幅图变化较缓,所以计算结果比较好,但是第二幅图就很陡了,那几个峰的图像都出现了毛糙的表面了,数值都跳变的厉害计算就不准了

山清水秀春暖花 发表于 2018-10-31 13:07:10

厉害楼主

mxlzhenzhu 发表于 2019-1-8 22:24:19

luleisure 发表于 2018-6-20 03:09
可以看到这个第一幅图变化较缓,所以计算结果比较好,但是第二幅图就很陡了,那几个峰的图像都出现了毛糙的 ...

算不准,是因为在这种情况下,你用了不合理的原始数据。

所以,建议是增加采样点数,细化x&y的步长,相当于增加空间分辨率。
页: [1]
查看完整版本: 关于计算二维积分:当被积分对象为复杂的隐函数时的处理问题