2016-11-06 9 views
-2


lassen Sie uns einen zweidimensionalen fonction f betrachten (x, y)
und Baum Punkte A, B, C mit ABC ein Dreieck
und ich möchte die Funktion f über das Dreieck ABC integrieren,
gibt es eine Möglichkeit, das in Matlab zu tun?
danke.Wie integriert man ein Dreieck in MATLAB?

+1

die Antwort, die ich möchte, dass die Lautstärke der Funktion f (x, y) im Dreieck ABC, mit A = (a_x, a_y), B = (B_x, B_y) und C = (C_x, C_y). – user3870075

+0

und auch die Funktion f (x, y) ist nicht immer gleich 1 – user3870075

+1

Bitte zeigen Sie den Code, den Sie haben. – thewaywewalk

Antwort

2

Sie können eine neue Funktion h(x,y) erstellen, die f(x,y) zurückgibt, wenn sich (x,y) innerhalb des Polygons befindet und andernfalls 0.

Zum Beispiel:

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') 

Ausgänge (die für Sie nah genug sein kann):

q = 

    12.500070877352647 

Und eine weitere Funktion:

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

q = 

    26.042038561947592 

Beachten Sie, dass die integral2 documentation Zustände:

Wenn nonrectangular Regionen Integration über, die beste Leistung und Genauigkeit tritt auf, wenn ymin, ymax, (oder beides) sind Funktion behandelt. Vermeiden Sie , um Integrandfunktionswerte auf Null zu setzen, um sie über eine nicht-rechteckige Region zu integrieren. Wenn Sie dies tun müssen, geben Sie die Methode 'iterated' an.

So wird es besser sein, wenn stattdessen die obige Lösung verwenden, können Sie zwei Funktionen schreiben, die eine x Koordinate gegeben, geben Sie die minimalen und maximalen y Koordinaten des Polygons (Dreieck).

+0

Vielen Dank für Sie Vorschlag + Itay, Ich bin die Integration über ein Dreieck, um die Elemente eines Vektors zu berechnen. Wenn ich Ihren Code verwendet, ist das Ergebnis langsam – user3870075

+0

und für A = [0,7265 1,9468], B = [0,6930 2,0000] und C = [0,6617 1,9468] gibt es mir diese Warnung: Warnung: Minimale Schrittweite erreicht in der Nähe von x = 1,94678. Es kann eine Singularität geben, oder die Toleranzen können zu eng für dieses Problem sein. Warnung: Die Integration war nicht erfolgreich. – user3870075

0

fand ich die richtige Antwort, dank dieser 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