2014-10-01 3 views
0

Мне нужно численно оценить в Matlab интеграл произведения двух функций A (x, y) и B (x, y). Эти две функции находятся в форме двумерного массива. Интеграл следует читать следующим образомЧисленное интегрирование матрицы в Matlab

$ C(x,z)=\int_{a}^{b} dy' A(x,y')B(y',z) $

Я понимаю, что такая функция, как «trapz» предназначена для численного интегрирования массивов данных, но я не понимаю, х, чтобы приспособиться к моему делу.

спасибо

Джузеппе

+0

Я опечатался: А и В 2-мерных массивах – user2969317

+0

Я рекомендую работать на нем в бит себя и задать более конкретный вопрос. Если кто-то здесь не решил точную проблему, о которой вы спрашиваете, маловероятно, что сообщество stackoverflow сможет помочь. trapz, вероятно, сработает для вас, поэтому поиграйте с ним и посмотрите, что вы можете придумать самостоятельно – Trogdor

ответ

1

Чтобы направить вас устрою некоторые (квадратные) матричные функции

%// Problem size. 
n = 3; 
%// Auxiliary constant matrices. 
D1 = rand(n, n); 
D2 = rand(n, n); 
D3 = rand(n, n); 
D4 = rand(n, n); 
%// Matrix functions and product. 
A = @(x,y) x^2*D1.^2 + y*D2; 
B = @(y,z) (log(y)+z)*D3.^3 - z*sin(D4); 
P = @(x,y,z) A(x,y)*B(y,z); 

Таким образом P является функцией трех переменных, теперь мы будем интегрировать его в y, когда x и z равны 0.

a = 0; 
b = 1; 
integral(@(y) P(0,y,0), a, b, 'ArrayValued', true) 

Для обобщения решения произвольных областей мы можем построить новую функцию в (х, г)

Int = @(x,z) integral(@(y) P(x,y,z), a, b, 'ArrayValued', true); 

и определяют сетку

x = linspace(-1, 1, 11); 
z = linspace(-2, 2, 21); 
[X, Z] = meshgrid(x, z); 

Теперь мы можем вычислить интеграл по всей сетке.

C = arrayfun(Int, X(:), Z(:), 'UniformOutput', false); 

Таким образом C будет содержать все интегралы, которые хранятся в массиве 1D клеток.

В качестве проверки мы можем получить результат в (х, г) = (0,0) по телефону

C{sub2ind([11 21], 6, 11)} 
+0

спасибо. Я работаю над этим! – user2969317

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