拟合算法+Matlab实现

369 阅读2分钟

学习内容:

提示:这里可以添加要学的内容
例如:
1、 了解拟合算法基本内容
2、 使用Matlab实现拟合算法


学习时间:

2020.12.09


学习产出:

1.matlab实现拟合算法的几个小例子

clear;clc;
load data1.mat;
plot(x,y,"o");
% 给x和y轴加上标签
xlabel("x的值");
ylabel("y的值");
n = size(x,1);
k = (n*sum(x.*y)-sum(y).*sum(x))/(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));
hold on;% 继续在之前的图形上来画图形
grid on;% 显示网格线

% % 画出y=kx+b的函数图像 plot(x,y)
% % 传统的画法:模拟生成x和y的序列,比如要画出[0,5]上的图形
% xx = 2.5: 0.1 :7  % 间隔设置的越小画出来的图形越准确
% yy = k * xx + b  % k和b都是已知值
% plot(xx,yy,'-')


% 匿名函数的基本用法。
% handle = @(arglist) anonymous_function
% 其中handle为调用匿名函数时使用的名字。
% arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。
% anonymous_function为匿名函数的表达式。

%匿名函数画回归曲线
% fplot函数可用于画出匿名一元函数的图形。
% fplot(f,xinterval) 将匿名函数f在指定区间xinterval绘图。xinterval =  [xmin xmax] 表示定义域的范围
f = @(x) k*x+b;
fplot(f,[2.5,7],"r-");  
legend("样本数据","拟合函数曲线","Location","SouthEast");

%如何评价拟合的好坏?
y_hat = k*x+b; % y的拟合值
SSR = sum((y_hat-mean(y)).^2)  % 回归平方和   mean(y)求y每列的平均值(这里y只有一列)
SSE = sum((y_hat-y).^2) % 误差平方和
SST = sum((y-mean(y)).^2) % 总体平方和
SST-SSE-SSR   % 5.6843e-14  =   5.6843*10^-14   matlab浮点数计算的一个误差
R_2 = SSR / SST  %拟合优度

%调用Matlab-CurveFitting自动生成的代码
createFit(x,y);

在这里插入图片描述
拟合后:
在这里插入图片描述

注意:

拟合算法和插值算法的不同之处在于,拟合算法不要求曲线一定要经过给定的点,拟合算法是尽可能的寻找一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。