为什么matlab做线性拟合出来曲线图?
为什么matlab做线性拟合出来曲线图?
分析了题主的代码,用regress函数来拟合线性函数是对的,按在出图时,出现了概念性的错误,即 plot(X,Y,'k+',X,z,'r')。
题主这里表示的X和Y实际上是线性拟合中计算时的线性方程组系数,而不是原试验数据。
所以,正确的表述格式是
plot(x1,y,'k+',x,z,'r')
同理,下列语句也有问题
t=1:38
y_fitting=X(t,:)*b;
y_fitting=b(1)+b(2)*x;
plot(t,y_fitting,'r-',t,Y(t,:),'b-');
正确的写法为:
Y=y';
X=[ones(length(y),1),x'];
[b,bint,r,rint,stats]=regress(Y,X);
z=b(1)+b(2)*x;
str = ['y=b1+b2*x']; %显示拟合方程
fprintf('%s\n',str);
str = ['b1=',num2str(b(1)),',b2=',num2str(b(2))];
fprintf('%s\n',str); %显示拟合系数
stats % 检验统计量
plot(x,y,'k+',x,z,'r') %绘制原数据与拟合数据的对比图
legend('Rot-Schätzung','Blau-Ist-wert');
运行结果如下所示。
2024-08-07 广告