давайте рассмотрим два мерных fonction Р (х, у)
и дерево точек A, B, C с ABC треугольник
и я хочу, чтобы интегрировать функцию е над треугольником ABC,
Есть ли способ сделать это в Matlab?
спасибо.Как интегрировать по треугольнику в MATLAB?
ответ
Вы можете создать новую функцию h(x,y)
, которая возвращает f(x,y)
если (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, утах (или оба) являются функцией ручки. Избегайте установки значений интегральных функций в ноль для интеграции по непрямоугольной области . Если вы должны это сделать, укажите метод «итерации».
Так что будет лучше, если вместо того, чтобы использовать выше решение, вы напишете две функции, которые даны x
координат, дадите вам минимальную и максимальную y
координаты многоугольника (треугольник).
спасибо за предложение + Itay, Я использую интеграцию по треугольнику для вычисления элементов вектора. , когда я использовал ваш код, результат медленный – user3870075
и для A = [0.7265 1.9468], B = [0.6930 2.0000] и C = [0.6617 1.9468] это дает мне это предупреждение: Предупреждение: Минимальный размер шага достиг около x = 1,94678. Может быть особенность, или допуски могут быть слишком плотно для этой проблемы. Внимание! Интеграция не увенчалось успехом. – user3870075
я нашел правильный ответ, благодаря этому 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
ответ я хочу объем функции Р (х, у) в треугольнике ABC, где А = (A_x, A_Y), B = (B_x, B_y) и C = (C_x, C_y). – user3870075
, а также функция f (x, y) не всегда равна 1 – user3870075
Пожалуйста, покажите код, который у вас есть. – thewaywewalk