代码之家  ›  专栏  ›  技术社区  ›  Manuel

matlab积分函数句柄嵌套

  •  0
  • Manuel  · 技术社区  · 9 年前

    我在Matlab中集成嵌套函数句柄时遇到了一个问题:

        fun = @(x,y) 2*x*y;
        y = @(x,a) 5*a*x;
        int = integral(@(x)fun(x,y(x,5)),0,2)
    

    实际的嵌套更深入,实际的函数更复杂,但这个例子很好地描述了我的问题,它抛出了“错误使用”* 内部矩阵维度必须一致。'

    1 回复  |  直到 9 年前
        1
  •  1
  •   Robert Seifert    9 年前

    这个问题的原因是MATLAB试图传递一个向量,期望函数返回一个值向量。试试这个(注意点积的使用):

    fun = @(x,y) 2*x.*y;
    y = @(x,a) 5*a.*x;
    int = integral(@(x)fun(x,y(x,5)),0,2)
    

    这是相关MATLAB文档的摘录:

    对于标量值问题,函数 y = fun(x) 必须接受向量参数, x ,并返回矢量结果, y 。这通常意味着fun必须使用数组运算符而不是矩阵运算符。例如,使用.*(times)而不是*(mtimes)。如果将“ArrayValued”选项设置为true,那么fun必须接受标量并返回固定大小的数组。