2013-02-04 46 views
1

我给出了一个函数@f(x,y),我想在MATLAB中通过一个特定的凸多边形评估这个函数的积分。多边形不一定是矩形,这就是为什么我不能使用MATLAB的函数“dblquad”。我有的多边形是由向量X和Y表示的一组顶点给出的,即顶点是(X(1),Y(1)),...,(X(n),Y(n) )。有什么功能或方法可以使用吗?Matlab中多边形的双重集成

回答

2

诀窍是使用工具集成在感兴趣的区域内。我已经写了一些用于在三角域中进行集成的工具。

% Define a function to integrate. 
% This function takes an nx2 array, where each row 
% contains a single point to evaluate the kernel at. 
% This computes x^2 + y^2 at each point. 
fun = @(xy) sum(xy.^2,2); 

% define the domain as a triangulated polygon 
% this tool uses ear clipping to do so. 
sc = poly2tri([1 4 3 1],[1 3 5 4]); 

% Gauss-Legendre integration over the 2-d domain 
[integ,fev]= quadgsc(fun,sc,2) 
integ = 
     113.166666666667 
fev = 
    8 

% the triangulated polygon... 
plotsc(sc,'facecolor','none','markerfacecolor','r') 
axis equal 
grid on 

enter image description here

我们可以可视化的功能本身,作为映射Z(X,Y)在该多边形的结构域。当提供范围字段时,单纯形复合体变成2-d(x,y)域的2-1映射。

sc2 = refinesc(sc,'max',.5); 
sc2.range = fun(sc2.domain); 
plotsc(sc2,'markerfacecolor','r') 
grid on 
view(17,12) 

enter image description here

这是在感兴趣的领域简单的多项式函数,所以默认低位高斯积分是适当的。所使用的方案是Gauss-Legendre方法,其形式为三角形上的张量积形式,并非真正的最优,而是可行的。高斯积分的问题是不适应的。它基于有限点集上的多项式的隐式近似来计算估计。

上述估计使用了8个函数验证来计算该估计。由于内核是一个低阶多项式,它应该完美。问题是,你需要知道这是否是一个正确的解决方案。这是高斯积分的问题,除了用更高阶的方案解决问题直到看起来收敛之外,没有简单的方法来知道答案是否正确。

在重心处看到每个三角形有1个点,我们得到了错误的答案,但更高阶的估计都是一致的。

[integ,fev]= quadgsc(fun,sc,1) 
integ = 
     107.777777777778 
fev = 
    2 

[integ,fev]= quadgsc(fun,sc,3) 
integ = 
     113.166666666667 

fev = 
    18 

[integ,fev]= quadgsc(fun,sc,4) 
integ = 
     113.166666666667 
fev = 
    32 

写quadgsc后,我不得不尝试的自适应解算器,在以同样的方式与其他四工具MATLAB做的工作。这会对三角测量进行自适应细化,寻找解决方案不稳定的三角形。问题是,我从来没有写完这些工具让我满意。对于三角域中的立方体问题,可以采用许多不同的方法。 quadrsc做一个低阶解决方案,然后细化它,使用Richardson外推法,然后比较结果。对于差别太大的任何三角形,它会进一步细化直到它收敛。

例如,

[integ,fev]= quadrsc(fun,sc) 
integ = 
      113.166666666667 

fev = 
    16 

所以此工程。这个问题出现在更复杂的内核上,问题变成知道何时停止细化,并且在使用过多的函数评估之前这样做。我从未完全满意地工作,所以我从未发布过这些工具。我可以将工具箱发送给那些直接寄给我的人。该zip文件约为2.4 MB。有一天,我会绕过去完成这些工具,我希望...

+0

+1是我可以给你这个美好的答案。 – bla

+0

@natan这真的很棒,非常有帮助!是否有可能以某种方式获得这个工具箱?我是新来的Stackoverflow,所以我实际上不知道如何向您发送直接邮件。 – Ali

+0

@HananhasanHasan - [email protected] – 2013-02-05 18:21:44