令D是由一系列点{x_i,y_i}(1 <= i <= N)限定的区域。(该区域不需要是凸的,并且这些点应该沿着边界曲线。)
设f是在D上定义的函数,但我们只知道它在给定点集(有限和离散)上的值,比如{x'_i,y'_i,f(x'_i,y'_i)}( 1&lt; = i&lt; = N')。(给定的数据集在D中不需要“密集”。)
如何对D进行数字积分?
以下是我的想法:
1)首先,我们应该通过这些系列点之间的段来近似D的边界
2)然后我们应该对给定的数据集进行一些插值。 但是,并非总是可以进行二维插值。然后我就卡住了。
答案 0 :(得分:0)
如果您能够对点进行三角测量,则完成了作业:在每个三角形中,您知道角点处的函数值,并通过
进行整合triangle_area * (val1 + val2 + val3) / 3.0
虽然凸三角测量是一个已解决的问题,有很多可用的工具(例如,查看qhull),非凸三角测量要困难得多。无论如何,沿着这个方向挖掘可能会让你到达某个地方。
答案 1 :(得分:-1)
我将解决方案写为轮廓积分,并在边界上的每个分段上使用高斯或对数正交1D数值积分之和。如果函数在曲线上的某个点处是奇异的,则对数正交非常有用。
您必须知道每个分段曲线的端点处的函数值。假设一个特定的插值函数(线性起始,如果你喜欢,则为高阶),并通过在终点值之间插值来进行数值积分。
如果你走得那么远,我建议通过将轮廓上的曲线数加倍并重新积分来检查收敛。如果积分值在一次或两次迭代后没有改变,你可以认为自己收敛了。
如果您说您不知道曲线上任何位置的函数值,那么您就无法进行积分。