将polyfit的结果存储在for循环中?

时间:2014-09-25 02:19:22

标签: matlab for-loop

考虑以下代码,它构成一个随机数据集,并根据数据拟合1到5阶的多项式:

x=1:100;
data=exp(-rand(1).*x);

for ii = 1:1:5;
polyfit(x,data,ii);
end

我想知道在每个循环中存储polyfit系数的最优雅方法是什么?我想

fitCoef(ii,:) = polyfit(x,data,ii)

会有效,但我在Subscripted assignment dimension mismatch.次迭代时遇到ii = 2错误。我理解为什么,因为它试图将3个值的向量放入一个长度仅为2的向量中......但我不确定如何正确解决这个问题。

我的理想输出是一个矩阵,显示每行的系数,例如。

p(1) p(2)

p(1) p(2) p(3)

p(1) p(2) p(3) p(4)

但我不知道如何处理黑色空间?

由于

2 个答案:

答案 0 :(得分:3)

你也可以完全跳过for循环:

A = cellfun(@(degree) polyfit(x, data, degree), num2cell(1:5), 'UniformOutput', false);

答案 1 :(得分:1)

您可以在开始循环之前使用fitCoeffs=zeros(5,6)初始化零矩阵。这不会影响polyval

您也可以将结果保存到单元格数组fitCoeffs{ii}=polyfit(x,data,ii)中,然后使用每组系数,例如polyval(fitCoeffs{3},X)

我已经在下面说明了两个选项:

x=1:100;
data=exp(-rand(1).*x);
N=5;
P=zeros(N,N+1);
P2=cell(1,N);
for ii = 1:N;
    P(ii,1:ii+1)=polyfit(x,data,ii);
    P2{ii}=polyfit(x,data,ii);
end

P
P2

polyval(P(3,:),1)
polyval(P(3,1:4),1) % Note it doesn't matter if you leave the zeros in

polyval(P2{3},1)