2014-10-01 325 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

得到在(X,Z)=(0,0)的结果我输入错误:A和B是2维数组 – user2969317 2014-10-01 17:29:52

+0

我建议在其上的工作点点自己,问一个更具体的问题。除非在这里有人已经解决了你所问的确切问题,否则stackoverflow社区不可能提供帮助。 trapz可能会为你工作,所以玩弄它,看看你可以自己想出什么 – Trogdor 2014-10-01 18:05:11

回答

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将包含所有的积分时,存储在单元的一维数组。

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

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

谢谢。我在做这个工作! – user2969317 2014-10-02 07:43:03