2016-11-06 20 views
-2


considérons deux fonction dimensions f (x, y)
et les points arbre A, B, C avec ABC un triangle
et je veux intégrer la fonction f sur le triangle ABC,
y a-t-il un moyen de le faire dans matlab?
merci.Comment intégrer sur un triangle dans MATLAB?

+1

la réponse je veux est le volume de la fonction f (x, y) dans le triangle ABC, avec A = (A_X, à_ÿ), B = (B_x, B_y) et C = (C_x, C_y). – user3870075

+0

et aussi la fonction f (x, y) n'est pas toujours égale à 1 – user3870075

+1

S'il vous plaît montrer le code que vous avez. – thewaywewalk

Répondre

2

Vous pouvez créer une nouvelle fonction h(x,y), qui renvoie f(x,y) si (x,y) est à l'intérieur du polygone et 0 sinon.

Par exemple:

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

sorties (qui peut être assez proche pour vous):

q = 

    12.500070877352647 

Et une autre fonction:

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

q = 

    26.042038561947592 

Notez que le integral2 documentation états:

Lors de l'intégration sur les régions, les meilleurs non rectangulaires performances et la précision se produit lorsque ymin, ymax, (ou les deux) sont des poignées fonction. Évitez de définir les valeurs de la fonction d'intégration à zéro pour les intégrer sur une région non rectangulaire . Si vous devez le faire, spécifiez la méthode 'itérée'. Il sera mieux

si au lieu d'utiliser la solution ci-dessus, vous écrivez deux fonctions qui x Étant donnée une coordonnée, vous donnez les y minimales et maximales coordonnées du polygone (triangle).

+0

je vous remercie pour votre suggestion + Itay, J'utilise l'intégration sur un triangle pour calculer les éléments d'un vecteur. quand je votre code le résultat est lent – user3870075

+0

et A = [0,7265 1,9468], B = [0,6930 2,0000] et C = [0,6617 1,9468] il me donne cet avertissement: Attention: pas de progression minimum atteint près de x = 1,94678. Il peut y avoir une singularité , ou les tolérances peuvent être trop serrés pour ce problème. Avertissement: L'intégration a échoué. – user3870075

0

I trouvé la bonne réponse, grâce à cette 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