2016-11-06 5 views
-2


давайте рассмотрим два мерных fonction Р (х, у)
и дерево точек A, B, C с ABC треугольник
и я хочу, чтобы интегрировать функцию е над треугольником ABC,
Есть ли способ сделать это в Matlab?
спасибо.Как интегрировать по треугольнику в MATLAB?

+1

ответ я хочу объем функции Р (х, у) в треугольнике ABC, где А = (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), которая возвращает 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 координаты многоугольника (треугольник).

+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 

 Смежные вопросы

  • Нет связанных вопросов^_^