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?
Répondre
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).
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
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
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
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
et aussi la fonction f (x, y) n'est pas toujours égale à 1 – user3870075
S'il vous plaît montrer le code que vous avez. – thewaywewalk