一直以来过冷水都有给大家分享图像拟合的知识、从泰勒级数说傅里叶级数、Matlab多项式拟合初探,本期过冷水给大家讲讲统计回归做拟合。
对平面上n个点:(x1,y1)、(x2,y2)、......(xn,yn),在平面上寻找一条直线y=a0 b0,使得散点到与散点相对应的在直线上的点之间的纵坐标的误差的平方和最小,用微积分可得;
参考的程序案例:
代码语言:javascript复制x=[0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.2 0.21 0.23];
y=[42 43.5 45 45.5 45 47.5 49 53 50 55 55 60];
n=length(x);
xb=mean(x);yb=mean(y);
x2b=sum(x.^2)/n;
xyb=x*y'/n;
b=(xb*yb-xyb)/(xb^2-x2b);
a=yb-b*xb;
y1=a b.*x;
plot(x,y,'*',x,y1);
legend('y=a bx','(x,y)')
figure1 = figure;
axes1 = axes('Parent',figure1);
hold(axes1,'on');
plot1 = plot([x' x'],[y',y1']);
set(plot1(1),'DisplayName','$y=a bx$','MarkerFaceColor',[0 0.447058826684952 0.74117648601532],'MarkerSize',8,'Marker','*','LineWidth',25,'LineStyle','none');
set(plot1(2),'DisplayName','$(x,y)$','LineWidth',2);
ylabel('$y$','FontSize',16,'Interpreter','latex');
xlabel('$x$','FontSize',16,'Interpreter','latex');
title('统计回归');
box(axes1,'on');
hold(axes1,'off');
legend1 = legend(axes1,'show');
set(legend1,'Position',[0.165946844693115 0.810000000000001 0.151583475042277 0.085555555555558],'Interpreter','latex','FontSize',14);
本期想要和大家分享的就这么多,既然可以得到线性回归的参数,自然非线性的回归参数自然可以得到,在下次的非线性回归的推文中我们不见不散。