0
我必须在Matlab中对两个函数A(x,y)和B(x,y)乘积的积分进行数值计算。这两个函数是二维数组形式。积分应为以下矩阵在Matlab中的数值积分
据我所知,功能,如“trapz”是数据阵列的数值积分,但我不明白何来适应我的情况。
谢谢
朱塞佩
我必须在Matlab中对两个函数A(x,y)和B(x,y)乘积的积分进行数值计算。这两个函数是二维数组形式。积分应为以下矩阵在Matlab中的数值积分
据我所知,功能,如“trapz”是数据阵列的数值积分,但我不明白何来适应我的情况。
谢谢
朱塞佩
指导你,我会建立一些(方)矩阵功能
%// 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)}
谢谢。我在做这个工作! – user2969317 2014-10-02 07:43:03
得到在(X,Z)=(0,0)的结果我输入错误:A和B是2维数组 – user2969317 2014-10-01 17:29:52
我建议在其上的工作点点自己,问一个更具体的问题。除非在这里有人已经解决了你所问的确切问题,否则stackoverflow社区不可能提供帮助。 trapz可能会为你工作,所以玩弄它,看看你可以自己想出什么 – Trogdor 2014-10-01 18:05:11