
与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。
我们首先使用最小二乘法来计算并拟合
上图为最最小二乘法基本公式,在此不进行深入解释。
利用已知数据,计算k,bhat,来对所给数据进行拟合。
下面我们在matlab中实际操作一下
plot(x,y,'o')%做出散点图,先最已知数据进行观察
xlabel('x的值')
ylabel('y的值')%给x,y轴加标签。
n=size(x,1);%测量x长度
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x))
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x))%分别算出k和b的值,根据最小二乘法
hold on %在之前的散点图上继续画图形
grid on %在生成的图形上显示网格线,更容易看出大小比较和区分
f=@(x) k*x+b;
%匿名函数的基本用法
%函数名称=@(arglist函数变量)anonymous function
%anonymous function匿名函数的表达式
fplot(f,[2.5,7]);
legend('样本数据','拟合函数')
%计算拟合优度
y_hat=k*x+b;
SSR=sum((y_hat-mean(y)).^2)%回归平方和
SSE=sum((y_hat-y).^2)%误差平方和
SST=sum((y-mean(y)).^2)%误差总体平方和
SST-SSE-SSR%5.6843e-14误差很小
R_2=SSR/SST
拟合完毕之后,我们对其进行拟合优度测定,以确定拟合的好坏
拟合优度只有对线性函数才有实际作用,线性可以对参数的线性
结合上部分代码,可以计算出拟合优度。
%计算拟合优度
y_hat=k*x+b;
SSR=sum((y_hat-mean(y)).^2)%回归平方和
SSE=sum((y_hat-y).^2)%误差平方和
SST=sum((y-mean(y)).^2)%误差总体平方和
SST-SSE-SSR%5.6843e-14误差很小
R_2=SSR/SST
在matlab中还有拟合工具箱的用法,在我们拟合时更为便捷。
其中一般选用多项式,和自定义拟合方法
点击文件还可以创造获取代码,可以放在论文附录中,进行翻译。
在命令行窗口中可以直接运行该生成函数
在使用自定义函数拟合时候,可能会遇到没有收敛解的情况此时