得到一组数据时:
比如
产量 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函数所得结果相同