如何在MATLAB中集成三角形?

时间:2016-11-06 10:33:30

标签: matlab numerical-methods integral


让我们考虑二维函数 f(x,y)
和树点A,B,C,ABC为三角形 我想将功能 f 整合到三角形ABC,
上 有没有办法在matlab中做到这一点?
谢谢。

2 个答案:

答案 0 :(得分:2)

您可以创建一个新功能h(x,y),如果f(x,y)在多边形内,则返回(x,y),否则返回0

例如:

A = [0, 0];
B = [0, 5];
C = [5, 0];

triangleX = [A(1) B(1) C(1)];
triangleY = [A(2) B(2) C(2)];

f = @(x,y) (1);
h = @(x,y) (inpolygon(x, y, triangleX, triangleY) .* f(x,y));

q = integral2(h, min(triangleX), max(triangleX), min(triangleY), max(triangleY)
              'Method', 'iterated')

输出(可能足够接近你):

q =

  12.500070877352647

另一个功能:

f = @(x,y) (x .* y);
q = integral2(@foo, min(triangleX), max(triangleX), min(triangleY), max(triangleY), 
              'Method', 'iterated')

q =

  26.042038561947592

请注意integral2 documentation个州:

  

当在非矩形区域上积分时,最佳性能和   当ymin,ymax,(或两者)是函数句柄时,会出现准确性。避免   将积分函数值设置为零以集成在a上   非矩形区域。如果必须这样做,请指定“迭代”方法。

因此,如果不是使用上述解决方案,而是编写两个给定x坐标的函数,则会更好,为您提供多边形(三角形)的最小和最大y坐标。

答案 1 :(得分:0)

我找到了正确答案, 感谢这个https://math.stackexchange.com/questions/954409/double-integral-over-an-arbitrary-triangle

function r = intm2(f, t)
% f: function 
% t: three points of a triangle
% r: integration of f over t
a = t(1,:);
b = t(2,:);
c = t(3,:);

jg = abs((b(1)-a(1))*(c(2)-a(2))-(c(1)-a(1))*(b(2)-a(2)));
ftilda = @(u,v) f(a(1)+u*(b(1)-a(1))+v*(c(1)-a(1)), a(2)+u*(b(2)-a(2))+v*(c(2)-    a(2)));

fy = @(x) 1-x;
r = jg * integral2(ftilda, 0,1, 0,fy);

end