Matlab中矩阵的数值积分

时间:2014-10-01 17:28:58

标签: matlab numerical integral

我必须在Matlab中用数值方式评估两个函数A(x,y)和B(x,y)的积的积分。这两个函数是二维数组形式。积分应如下所示

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

据我所知,像“trapz”这样的函数用于数据数组的数值积分,但我不明白为了适应我的情况。

谢谢

朱塞佩

1 个答案:

答案 0 :(得分: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)

为了将解决方案推广到任意域,我们可以在(x,z)

中构建一个新函数
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将包含存储在一维单元格数组中的所有积分。

作为检查,我们可以通过调用

获得(x,z)=(0,0)的结果
C{sub2ind([11 21], 6, 11)}