2015-10-11 4 views
0

Я знаю, как выполнить одиночный интеграл, используя trapezoidal rule for non-uniform grid. Если моя функция f(x,y), а затем один раз интеграл по dx в MATLAB будет выглядетьДвойной интеграл в матрице с неравномерной сеткой

m1=(sum(diff(x,1,2).*(f(:,1:end-1)+f(:,2:end)),2))/2

Теперь, если у меня есть функция f(x,y,z) как выполнить двойной интеграл по dydz с использованием правила трапеции неравномерной сетки в MATLAB?

Обратите внимание, что это неравномерная сетка.

+1

Подумайте о Фубини: вы сначала интегрируете на y (и получаете функцию (x, z)), а затем на z. –

+0

Что такое неравномерная сетка? –

+0

Его случай, когда расстояние между двумя точками не равномерно. –

ответ

2

Используя встроенную функцию trapz в MATLAB, вы можете выполнить именно это. Вот пример:

>> x = -3:.1:3; 
y = -5:.1:5; 
z = -10:0.1:10; 
[X,Y,Z] = meshgrid(x,y,z); 
F = X.^2 + Y.^2 + Z.^2; 
I = trapz(y,trapz(x,F,2)); 
I = squeeze(I); 

Что я делаю это создание сетки сетки из моих точек данных, представленной в нижнем регистре x,y,z и оценку функции, в данном случае X^2+y^2+Z^2. Для этого у вас уже есть альтернативные данные. Имейте в виду, что вы всегда можете использовать griddata для равномерного распределения данных.

Затем я использую trapz дважды, чтобы интегрировать размеры x и y. trapz специально определенно интегрируется только по размеру первой матрицы, который не равен 1, что позволяет мне это сделать (см. Здесь: http://www.mathworks.com/help/matlab/ref/trapz.html).

Наконец, я использую сжатие данных для удаления всех размеров синглтона и возврата вектора. Если я сюжет данные по оставшейся размерности я получаю:

>> plot(z,I); 

По сравнению с моей первоначальной функцией, если интегрированной аналитический между -3 <= x <= 3 и -5 <= y <= 5 я получаю: 680 + 60 z^2. Оба согласны. plot

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