如何在Matlab中评估多维函数数组?

时间:2014-05-06 11:03:40

标签: matlab

我在Matlab中有一个6x3函数数组dens,其中每个函数都有一个二维向量z作为输入。我需要同时在z=[2 3]评估这些函数;我试过了

ev_dens = @(z) cellfun(@(myfun) myfun(z),dens,'UniformOutput',false);
z =[2 3];
ev_dens(z)

但是我收到了这个错误

??? Index exceeds matrix dimensions.
Error in ==> @(myfun)myfun(z)
Error in ==> @(z)cellfun(@(myfun)myfun(z),dens,'UniformOutput',false)

你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

使用以下示例数据:

f{1,1} = @(z)([z(1),z(1)])
f{1,2} = @(z)([z(1),z(2)])
f{2,1} = @(z)([z(2),z(1)])
f{2,2} = @(z)([z(2),z(2)])

z = [2,3];

您的方法运行正常:

cellfun(@(F)F(z), f,'UniformOutput',false)

所以听起来好像你在dens的一个函数中有错误。尝试嵌套for循环并查看错误的位置:

for ii = 1:size(dens,1)
    for jj = 1:size(dens,2)
        dens{ii,jj}(z)
    end
end

然后在收到错误后检查iijj的值,dens{ii,jj}处的函数中包含错误。


为了纠正你在评论中提到的问题(即你的一些单元格元素是空的(即[]),首先运行此函数将空单元格转换为输出空单元格的函数: / p>

dens(cellfun(@isempty,dens)) = {@(z)([])}