【问题标题】:How to integrate over a triangle in MATLAB?如何在 MATLAB 中对三角形进行积分?
【发布时间】:2016-11-06 10:33:30
【问题描述】:


让我们考虑一个二维函数 f(x,y)
和树点 A、B、C 与 ABC 一个三角形
我想在三角形 ABC 上集成函数 f
有没有办法在matlab中做到这一点?
谢谢。

【问题讨论】:

  • 我想要的答案是三角形 ABC 中函数 f(x,y) 的体积,其中 A=(A_x, A_y), B=(B_x, B_y) 和 C=(C_x , C_y)。
  • 而且函数 f(x,y) 并不总是等于 1
  • 请出示您的密码。
  • +thewaywewalk 这是我的代码:pastebin.com/NuXzeLSs

标签: matlab numerical-methods integral


【解决方案1】:

您可以创建一个新函数h(x,y),如果(x,y) 在多边形内,则返回f(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 坐标。

【讨论】:

  • 感谢您的建议 +Itay,我正在使用三角形积分来计算向量的元素。当我使用你的代码时,结果很慢
  • 对于 A=[0.7265 1.9468]、B=[0.6930 2.0000] 和 C=[0.6617 1.9468],它给了我这个警告:警告:最小步长达到 x = 1.94678 附近。可能存在奇点,或者对于这个问题,公差可能太紧了。警告:集成不成功。
【解决方案2】:

我找到了正确的答案, 感谢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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 2014-11-03
    • 2016-09-28
    • 2011-02-21
    • 2020-05-23
    • 2018-10-11
    • 2014-06-29
    • 2011-07-15
    相关资源
    最近更新 更多