【问题标题】:numerical integration of matrix in MatlabMatlab中矩阵的数值积分
【发布时间】:2014-10-01 17:28:57
【问题描述】:

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

我知道“trapz”之类的功能是用于数据数组的数值积分,但我不明白如何适应我的情况。

谢谢

朱塞佩

【问题讨论】:

  • 我打错了:A 和 B 是二维数组
  • 我建议您自己研究一下并提出更具体的问题。除非这里有人解决了您要问的确切问题,否则 stackoverflow 社区不太可能提供帮助。 trapz 可能对您有用,所以请尝试一下,看看您自己能想出什么

标签: matlab numerical integral


【解决方案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)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2023-03-26
    • 2018-03-23
    • 2019-07-12
    • 2013-09-11
    相关资源
    最近更新 更多