【问题标题】:Numerically integrate in Matlab without requiring vector input无需向量输入即可在 Matlab 中进行数值积分
【发布时间】:2013-12-02 09:08:09
【问题描述】:

以下是我的问题的概括

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 来接受向量输入,这就是问题所在,但在这种情况下,我看不到一种适应的方法,因为我必须将这个向量传递给函数@987654327 @ 返回一个矩阵。有没有办法解决这个问题?

注意S 的示例可能是:

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

显然,在这种情况下,积分很容易解析,但函数 S 可以是任何标量到矩阵的变换。

【问题讨论】:

  • 您是否尝试执行矩阵积分?或者您是否尝试按元素应用integral?如果定义了S(或至少给出了一个简单的版本),它将使您的代码可运行且更清晰。
  • 我不想执行矩阵积分。矩阵由det() 转换为标量。我为S 提供了一个示例函数。

标签: matlab integration


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

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 2014-09-06
    • 1970-01-01
    • 2016-01-09
    • 2015-08-19
    • 2019-07-20
    • 2018-05-09
    • 1970-01-01
    • 2015-02-19
    相关资源
    最近更新 更多