在 Matlab 中进行数值积分,无需矢量输入

问题描述 投票:0回答:1

以下是我的问题的概括

function E = FunctionIntegration(S)
    I = @(f) log(det(4 * S(f))); 
    E = integral(I, -pi, pi)

S
是一个函数句柄,它接受标量输入
f
并返回一个矩阵。当我尝试运行此函数时,出现
Inner matrix dimensions must agree
错误。

我知道

integral
需要函数
I
接受向量输入,这就是问题所在,但在这种情况下,我没有找到一种方法来适应它,因为我必须将此向量传递给函数
S
返回一个矩阵。有办法解决这个问题吗?

注意

S
的示例可以是:

S = @(f) [f 0; 0 1]

显然在这种情况下积分很容易解析,但函数

S
可以是任何标量到矩阵的变换。

matlab numerical-integration
1个回答
1
投票

您的问题是

integral
将值数组传递给
I
。但你的
I
只需要一个标量。试试这个:

function E = functionIntegration(S)
    I = @(x) arrayfun(@(f) log(det(4 * S(f))), x);
    E = integral(I, -pi, pi);
end

我已将您的被积数包装到对

arrayfun
的调用中,它将循环遍历
integral
传入的数组并计算每个条目的被积数:

>> S = @(x) x * eye(3, 3);
>> functionIntegration(S)

ans =

  28.8591 + 9.8696i
© www.soinside.com 2019 - 2024. All rights reserved.