我必须在Matlab中用数值方式评估两个函数A(x,y)和B(x,y)的积的积分。这两个函数是二维数组形式。积分应如下所示
据我所知,像“trapz”这样的函数用于数据数组的数值积分,但我不明白为了适应我的情况。
谢谢
朱塞佩
答案 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)}