如何在没有循环的情况下评估单元格数组中的matlab拟合对象?

时间:2013-02-14 12:01:38

标签: matlab loops vectorization curve-fitting cell-array

我有一组拟合对象,我需要用几个值来评估每个对象。因为有超过数千个这些合适的对象,我发现循环它们并用值来评估它们非常慢。那么有没有办法使用某种矢量化解决方案?

例如,我可以通过

评估单个适合对象
fitArray{1,1}(400)

但我想做的是一次评估多个拟合对象,如下所示:

fitArray{1:1000}(400)

Matlab中的循环总是非常慢,在这种情况下它很慢,因为我需要用多个值来评估每个拟合。

那么有没有办法在没有循环的情况下做到这一点?

2 个答案:

答案 0 :(得分:0)

循环不是这里最大的问题,例如在装配速度上看......内存分配很糟糕,所以尝试在循环本身之前做所有操作(fitoptions,fittype等......)。如果你使用多项式拟合而你不需要cfit结构,那么尝试使用polyfit - 应该相当快。

答案 1 :(得分:0)

我自己找到了答案。毕竟这很简单。我通过这样做达到了我想要的结果:

vals = repmat({values}, size(fitArray));
evals = cellfun(@feval, fitArray, vals);

这将使用vals数组中相应行中的值来计算单元数组中的每个拟合对象。因此,结果是evals数组只包含每个拟合对象的结果。