得到一組數據時:
比如
產量 13.2 15.1 16.4 17.1 17.9 18.7 19.6 21.2 22.5 24.3
溫度 ? 20 ? ?25 ? 30 ? 35 ? ?40 ?45 ? ?50 ? ?55 ? ?60 ? ?65
要進行擬合,可以用matlab的regress函數
clear all;
x=[13.2 15.1 16.4 17.1 17.9 18.7 19.6 21.2 22.5 24.3]';
X=[ones(10,1) x];
Y=[20 25 30 35 40 45 50 55 60 65]';
[b,bint,r,rint,stats]=regress(Y,X)
rcoplot(r,rint)
z=b(1)+b(2)*x
plot(x,Y,'k+',x,z,'r')
最終得到:
產量=-39.4070+4.4036*溫度
其實regress函數用到的是最小二乘算法
即假設在一個 2維坐標上,有很多個點,我們劃一條線,直線滿足:坐標上所有的點到直線上的距離和最小。
需要先計算擬合優度r:
代碼實現:
p=0;
for i=1:10
p=p+x(i)*Y(i);
end
a=sum(p);
b=10*mean(x)*mean(Y);
fenzi=a-b;
c=0;
for i=1:10
c=c+x(i)*x(i)-mean(x)^2;
end
d=0;
for i=1:10
d=d+Y(i)*Y(i)-mean(Y)^2;
end
fenmu=sqrt(c*d);
r=fenzi/fenmu
得到r=0.9910,說明擬合效果非常好,通常大于0.7就可以用來預測。
設方程為y=a+bx
接下來就可以計算系數了
http://blog.csdn.net/marsjohn/article/details/54911788這里有詳細的推導過程
也得到產量=-39.4070+4.4036*溫度
與用regress函數所得結果相同