MATLAB 多组数据分别进行 一次线性拟合

现有i01~i15 十五组1024×1280的矩阵
x为1×15的矩阵;
i01到i15每一个对应的点组成新的矩阵然后与x一次线性拟合(这里如果说的不太清楚不好理解的话 请参考下我后面写的程序)如此该得到1024×1280个线性拟合结果,我想把它先保存起来,后面插值的时候要用的拟合的函数
i16同样为1024×1280的矩阵,它每个点的值对应之前的每个拟合过的函数(也就是calibration curve )可求得每个点的x值;(这一步还不知道怎么编程)
我尝试编了如下的程序:
p=cell{1024,1280};
for i=1:1280
for j=1:1024
x=[0.2,8,17.8,25.1,32.3,46.5,50.2,54.5,58.1,62.2,66.3,70.2,75.2,80.3,82.7];
y(i,j)=[i01(i,j),i02(i,j),i03(i,j),i04(i,j),i05(i,j),i06(i,j),i07(i,j),i08(i,j),i09(i,j),i10(i,j),i11(i,j),i12(i,j),i13(i,j),i14(i,j),i15(i,j)];
p{i,j}=polyfit(x,y(i,j),1);
end
end

程序出错,希望高手指点下
拟合的结果里面是y=ax+b里的a和b吗?
不知道拟合的结果该如何保存 是不是不该用cell
??? The result of calling the static method or constructor "cell" cannot be indexed with
cell array indexing.

x=[0.2,8,17.8,25.1,32.3,46.5,50.2,54.5,58.1,62.2,66.3,70.2,75.2,80.3,82.7];
p=cell(1280,1024);
for i=1:1280
for j=1:1024
y=[i01(i,j),i02(i,j),i03(i,j),i04(i,j),i05(i,j),i06(i,j),i07(i,j),i08(i,j),i09(i,j),i10(i,j),i11(i,j),i12(i,j),i13(i,j),i14(i,j),i15(i,j)];
p{i,j}=polyfit(x,y,1); %这样每一个p的细胞元中,都存有k和b
end
end追问

~~非常感谢您的帮助~~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-10
figure;
t=[1999 2000 2001 2002 2003 2004 2005 2006 2007 2008];
c=[399.72 506.97 754.98 989.4 1202.48 1473.29 1525 1717.87 1911.45 2004.25];
a=polyfit(t,c,2);
ti=1999:1:2008;
ci=polyval(a,ti);
plot(t,c,'go','MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',6);
xlabel('年份');
ylabel('相关数据');
axis([1999 2008 350 2100])
hold on
plot(ti,ci,'linewidth',2,'markersize',16)
legend('原始数据点','拟合曲线')
plot(t,c,'-r.')
sprintf('曲线方程:C=%0.5g*T^2+(%0.5g)*T+(%0.5g)',a(1),a(2),a(3))

曲线方程:C=-5.5245*T^2+(22324)*T+(-2.255e+007)
这是2次线性相关
figure;
t=[1999 2000 2001 2002 2003 2004 2005 2006 2007 2008];
c=[399.72 506.97 754.98 989.4 1202.48 1473.29 1525 1717.87 1911.45 2004.25];
a=polyfit(t,c,1);
ti=1999:1:2008;
ci=polyval(a,ti);
plot(t,c,'go','MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',6);
xlabel('年份');
ylabel('相关数据');
axis([1999 2008 350 2100])
hold on
plot(ti,ci,'linewidth',2,'markersize',16)
legend('原始数据点','拟合曲线')
plot(t,c,'-r.')
sprintf('曲线方程:C=+(%0.5g)*T+(%0.5g)',a(1),a(2),)

曲线方程:C=+(187.66)*T+(-3.7473e+005)
这是一次的线性相关
第2个回答  2011-10-10
cell是个函数,后面的大括号改成圆括号即可消除这个问题,其他地方应该没有问题追问

好像也不行,出现Subscripted assignment dimension mismatch.
或者可不可以不保存拟合结果,直接用它来求i16的插值,不知道可不可行呢?该如何写呢,请指导下

追答

这个问题是由于y的赋值不正确引起的
p=cell(1280,1024);
for i=1:1280
for j=1:1024

x=[0.2,8,17.8,25.1];
y=[i01(i,j),i02(i,j),i03(i,j),i04(i,j)]; % y是一维数组,不要用下标(i,j)
p{i,j}=polyfit(x,y,1);
end
end
祝好运

相似回答