数字集成在Matlab中,无需矢量输入

时间:2013-11-19 00:41:36

标签: matlab integration

以下是我的问题的概括

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可以是任何标量到矩阵变换。

1 个答案:

答案 0 :(得分: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