我在Matlab中集成嵌套函数句柄时遇到了一个问题:
fun = @(x,y) 2*x*y; y = @(x,a) 5*a*x; int = integral(@(x)fun(x,y(x,5)),0,2)
实际的嵌套更深入,实际的函数更复杂,但这个例子很好地描述了我的问题,它抛出了“错误使用”* 内部矩阵维度必须一致。'
这个问题的原因是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必须接受标量并返回固定大小的数组。
y = fun(x)
x
y