为函数编写表面包装器[MATLAB]

时间:2017-01-20 23:40:08

标签: matlab

我在Matlab中有一个函数:

function [runs,balls]=batting(form,team_flag,weather_flag)

form1x13双打数组。标志只是布尔值。 runs,balls只是标量。上面的函数进行了一些复杂的数学模拟以得出其输出值。现在我写一个包装器:

function [runs,balls]=wrapper1(form)
[runs,balls]=batting(form,false,false);

然后我写了另一个包装器:

function runs_vector=wrapper2(form_vector)
for i=1:size(form_vector,1)
    form_cell{i}=form_vector(i,:);
end
runs_vector=cellfun(@wrapper1, form_cell)';

我必须明白我想要实现的目标。我正在尝试将cellfun的行为用于我的自定义函数batting。这里的标志参数需要设置为false,但一般来说,它们在项目中是不同的。所以我不能在没有编写中间包装的情况下消除batting函数的标志输入,即。 wrapper1。我的问题是,如果有一个不那么丑陋或更聪明的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以通过创建一个将wrapper1减少为两个参数的匿名函数来消除batting

runs_vector = cellfun(@(form) batting(form, false, false), form_cell)';

此外,循环可以替换为num2cell,如下所示:

form_cell = num2cell(form_vector, 2);

将这两者结合起来给我们

function runs_vector = wrapper2(form_vector)
form_cell = num2cell(form_vector, 2);
runs_vector = cellfun(@(form) batting(form, false, false), form_cell)';