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