2016-11-06 87 views
-2


讓我們考慮一個二維fonction F(X,Y)
和樹分A,B,C與ABC三角形
,我想給函數˚F在三角形ABC,
整合 有沒有辦法在matlab中做到這一點?
謝謝。如何在MATLAB中對三角形進行集成?

+1

我想要的答案是函數f(x,y)的 在三角形ABC的體積,用A =(A_X,A_y ),B =(B_x,B_y)和C =(C_x,C_y)。 – user3870075

+0

並且函數f(x,y)並不總是等於1 – user3870075

+1

請顯示您的代碼。 – thewaywewalk

回答

2

您可以創建一個新函數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(或兩者)都是函數句柄時,會出現最佳性能和精度。避免 將被積函數值設置爲零,以整合非矩形區域。如果您必須這樣做,請指定「迭代」方法。

所以如果不是使用上述解決方案,你寫的給定的x協調兩個功能,讓你的多邊形(三角形)的最小和最大y座標它會更好。

+0

謝謝你的建議+ Itay, 我正在使用三角形上的積分來計算矢量的元素。 當我用您的代碼的結果是緩慢 – user3870075

+0

以及A = [0.7265 1.9468],B = [0.6930 2.0000]和C = [0.6617 1.9468] 它給我這樣的警告: 警告:最小步長大小 x附近達到= 1.94678。 可能有一個 奇點,或者對於這個問題公差可能太 。 警告:集成 不成功。 – user3870075

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