1、插值与拟合

插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。尽管我们可以选择分段的方法避免这种现象,但是更多时候我们倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但是只要保证误差足够小即可。
拟合算法:与插值算法不同,在拟合问题中不需要曲线一定经过给定的点,拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。

即插值算法得到的曲线过样本的所有已知点,拟合算法得到的曲线不需要过所有的数据点。

插值问题和拟合问题如何选择? 样本量多优先选拟合
当样本已知数据点小于30时,用插值算法,大于30个点时(大样本)使用拟合算法(曲线及置信区间)。

2、举例:找出x和y之间的拟合曲线


步骤一:根据表格数据做散点图
代码如下:

clear;clc
load  data1
plot(x,y,'o')
% 给x和y轴加上标签
xlabel('x的值')
ylabel('y的值')


步骤二:由散点图分布可知,可用直线拟合数据点
设拟合曲线y=kx+b,但是当k和b取何值时,样本点和拟合曲线最为接近。

但是我们如何去定义这个接近呢?
即所求数据点到直线的距离之和应该最小,距离有两种方式表示,绝对值和平方和表示。
两种定义方法如下:
数学中 arg min的意思:argmin 就是使后面这个式子达到最小值时的k,b的取值。

第一种带绝对值求解不方便,不容易求导,因此计算比较复杂。所以我们往往使用第二种定义,这也正是最小二乘的思想,也就是真实值和拟合值的所有的差值之和最小。
最小二乘法证明过程:

我们即可解出k,b的值,并在图中画出拟合直线,完整代码如下:

clear;clc
load  data1
plot(x,y,'o')
% 给x和y轴加上标签
xlabel('x的值')
ylabel('y的值')
n = size(x,1);
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))
hold on % 继续在之前的图形上来画图形
grid on % 显示网格线% % 画出y=kx+b的函数图像 plot(x,y)
% % 传统的画法:模拟生成x和y的序列,比如要画出[0,5]上的图形
% x = 0: 0.1 :5  % 间隔设置的越小画出来的图形越准确
% y = k * x + b  % k和b都是已知值
% plot(x,y,'-')f=@(x) k*x+b;
fplot(f,[min(x)-1,max(x)+1]);
legend('样本数据','拟合函数','location','SouthEast')

matlab匿名函数用法:

% 匿名函数的基本用法。
% handle = @(arglist) anonymous_function
% 其中handle为调用匿名函数时使用的名字。
% arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。
% anonymous_function为匿名函数的表达式。
% 举个小例子
% % >> z=@(x,y) x^2+y^2;
% % >> z(1,2)
% % ans =  5
% fplot函数可用于画出匿名函数的图形。
% fplot(f,xinterval) 将在指定区间绘图。将区间指定为 [xmin xmax] 形式的二元素向量。


步骤三:评价拟合好坏

证明SST=SSE+SSR(可以忽略)

mean是求均值的函数

y_hat = k*x+b; % y的拟合值
SSR = sum((y_hat-mean(y)).^2)  % 回归平方和
% mean()用于求均值
SSE = sum((y_hat-y).^2) % 误差平方和
SST = sum((y-mean(y)).^2) % 总体平方和
SST-SSE-SSR
R_2 = SSR / SST

R的平方越接近1,说明误差平方和越接近0,误差越小,说明拟合越好。
注意:R的平方只能用于拟合函数是线性函数时,拟合结果的评价。线性函数和其他函数(指数函数)比较拟合的好坏,直接看SSE即可。R的平方可能是负数。

3、通过cftool matlab自带的拟合工具箱来进行数据拟合

在窗口中输入cftool,打开拟合工具箱。
评价拟合模型的好坏:
主要
1.看指数平方和:SSE的值越小越好。
2.拟合的简洁性原则。就是尽量保证拟合的函数简洁更好。

具体过程如图:

界面说明

例题2:已知30个数据点,横坐标x由(0,10)之间的随机数,纵坐标服从,
代码

clear;clc
x = rand(30,1) * 10;
y = 3 * exp(0.5*x) -5 + normrnd(0,1,30,1);
cftool


图上所示:设置x data(横坐标数据源)为x ,Y data(纵坐标数据源)为Y,设置拟合函数为指数形式,且为1次函数。此时误差平方和SSE:243.7 对应的函数形式为f(x)=2.434exp(0.521X)
通过调节函数形式得到不同的函数
当设置函数为指数,一元二次函数形式

SSE为:27.28,相比一元一次函数,一元二次函数的误差更小,且原函数也为指数函数。则选择此函数形式

f(x)=3.232exp(0.4933x)-4.851*exp(0.0628x)

总结:
函数选择原则:
当散点图走势是直线,优先选线性拟合,评价指标为SSE和R平方,SSE越小越好,R平方越大越好。
其他的函数选择条件是SSE越小越好,且不是线性拟合时不能用R平方来评价。
其他:函数形式应当越简单越好。

数学建模4 拟合算法相关推荐

  1. 数学建模-4.拟合算法

    拟合算法 区别于插值算法 拟合问题中不需要曲线一定经过给定点 拟合问题的目标是求出一个函数曲线,其在某种准则下与所有数据点最接近,即曲线拟合的最好(最小化损失函数) 引例 最小二乘法求解 下一步,求出 ...

  2. 【数学建模】拟合算法+Matlab实现

    学习内容: 提示:这里可以添加要学的内容 例如: 1. 了解拟合算法基本内容 2. 使用Matlab实现拟合算法 学习时间: 2020.12.09 学习产出: 1.matlab实现拟合算法的几个小例子 ...

  3. 【4.0】 数学建模中拟合算法详解|内附清晰图片和详细代码实现

    一.前言 与插值问题不同,在拟合问题中不需要曲线一定经过给定的点.拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小损失函数) 插值和拟合的区别 ...

  4. 数学建模_数学模型的分类数学建模十大算法

    数学模型的分类 数学建模十大算法 1.蒙特卡罗算法 (该算法又称随机性模拟算法, 是通过计算机仿真来解决问题的算法, 同时可以 通过模拟可以来检验自己模型的正确性,比较好用的算法) 2.数据拟合.参数 ...

  5. 数学建模十大算法02—插值与拟合(拉格朗日插值、三次样条插值、线性最小二乘法……)

    文章目录 引入 一.插值 1.1 分段线性插值 1.2 牛顿插值法 1.3 拉格朗日插值多项式 1.4 样条插值 1.4.1 三次样条插值 1.5 二维插值 1.5.1 插值节点为网格节点 1.5.2 ...

  6. 数学建模竞赛常用算法介绍及对应国赛获奖论文分类整理分享

    数学建模竞赛中应当掌握的算法: 数学建模国赛每年的题型都类似,除非是个人专业性很强,否则作者不太建议选择华为出的题,剩余的题型每年都类似,是有迹可循的,毕竟站在巨人的肩膀上看的更远.下面就介绍一些数模 ...

  7. 数学建模—编程手算法学习路线(自用)

    算法目录 1.评价算法 适用情景 常用算法: 层次分析法 TOPSIS法 数据包络法 2.预测算法 适用情景 常用算法: 灰色预测模型 微分方程预测 回归分析预测 马尔科夫预测 时间序列预测(必须掌握 ...

  8. 【数学建模】模拟退火算法(最优化)

    文章目录 一.算法介绍 1. 退火 2.物理退火 3.模拟退火算法思想 二.适用问题 三.算法总结 1. 步骤 四.应用场景举例 五.MATLAB代码 六.实际案例 七.论文案例片段(待完善) 模拟退 ...

  9. 【数学建模】聚类算法+Spss实现+Matlab代码实现

    文章目录 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 图片来源于清风老师视频 b站地址:数学建模学习交流 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 1.创 ...

最新文章

  1. 开源库jemalloc简介
  2. 错误处理:Syntax error: Bad for loop variable
  3. SAP 移动类型详解
  4. 【mysql】Innodb三大特性之double write
  5. RPA机器人来了, 你的饭碗还好吗?
  6. Python学习笔记(四十)— 内置模块(9)HTMLParser
  7. Unity实现爆炸的伤害值计算
  8. java 获取本机信息,使用Java获取系统信息的常用代码整理总结
  9. wordpress api ajax,Woocommerce rest api - 在wordpress中通过ajax创建产品
  10. HDU2024 C语言合法标识符【入门】
  11. bp神经网络算法的优缺点,bp神经网络算法的优点
  12. 【AIOT】手表调研
  13. 智慧工厂之化工厂人员定位中的智能访客管理系统-新导智能
  14. 对于自学Java的人来说,如何系统的,全方面的学习Java?
  15. Sicily 1484. 守望者的逃离
  16. Scala自定义MEID效验工具类
  17. busblaster-v3c调试hg255d的脚本代码
  18. Lichee(三) Android4.0的目标产品目录与Lichee的纽带---extract-bsp
  19. 素描学习入门零基础学习静物素描的几种方法
  20. t6文件服务器怎么设置,t6文件服务器设置

热门文章

  1. 使用HTML5 canvas做地图(1)基础知识
  2. Mongo db 与mysql 语法比较
  3. javascript模态窗口Demo
  4. VC++6.0安装步骤
  5. java_opts 参数与JVM内存调优
  6. Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
  7. Ng第一课:引言(Introduction)
  8. web页面导出到Excel乱码解决
  9. 我的conky 配置(拆分版)
  10. 常见 Java 异常解释(恶搞版)