文章目录

  • 前言
  • 一、一维插值问题的描述
  • 二、常用插值方法
    • 1.Lagrange插值法
    • 2.Newton插值法
  • 三、高次插值的Runge现象
  • 四、Matlab插值
    • 1、一维插值
    • 2、二维插值
    • 3、散乱点插值
  • 总结
  • 参考资料

前言

本文主要内容是分享博主在学习MATLAB插值与拟合过程中的一些笔记与见解,并记录使用代码实现的过程


一、一维插值问题的描述

一维插值问题可描述为:已知函数在 x 0 , x 1 , … , x n x_0,x_1,…,x_n x0​,x1​,…,xn​处的值 y 0 , y 1 , … , y n y_0,y_1,…,y_n y0​,y1​,…,yn​,求简单函数 p ( x ) p(x) p(x),使 p ( x i ) = y i . p(x_i)=y_i. p(xi​)=yi​.
通俗来说,即已知函数在某区间内若干点处的值,求函数在该区间内其他点处的值。
PS:这里可以用范德蒙行列式和克莱姆法则证明,在 x 0 , x 1 , … , x n x_0,x_1,…,x_n x0​,x1​,…,xn​处取值为 y 0 , y 1 , … , y n y_0,y_1,…,y_n y0​,y1​,…,yn​的多项式存在且唯一,即插值问题的解唯一存在。(相关内容见线性代数)


二、常用插值方法

1.Lagrange插值法

Lagrange(拉格朗日)插值公式,指的是在节点上给出节点基函数,然后做基函数的线性拟合,组合系数为节点函数值的一种插值多项式。
假设,我们已知函数 f ( x ) f(x) f(x)在平面坐标系上有3个点,坐标分别为 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​), ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​), ( x 3 , y 3 ) (x_3,y_3) (x3​,y3​),可以分别根据这三个点找出节点基函数。例如,首先作出基函数 f 1 f_1 f1​的图像,经过 ( x 1 , 1 ) (x_1,1) (x1​,1), ( x 2 , 0 ) (x_2,0) (x2​,0), ( x 3 , 0 ) (x_3,0) (x3​,0)这三个点,同理可作出 f 2 f_2 f2​分别经过点 ( x 1 , 0 ) (x_1,0) (x1​,0), ( x 2 , 1 ) (x_2,1) (x2​,1), ( x 3 , 0 ) (x_3,0) (x3​,0)以及 f 3 f_3 f3​。通过寻找这三组基函数的线性组合,我们不难发现原函数可以写出如下形式:
f ( x ) = y 1 f 1 ( x ) + y 2 f 2 ( x ) + y 3 f 3 ( x ) f(x)=y_1f_1(x)+y_2f_2(x)+y_3f_3(x) f(x)=y1​f1​(x)+y2​f2​(x)+y3​f3​(x)上式可推广为: f ( x ) = ∑ i = 0 k y i ∏ j ≠ 1 x − x j x i − x j f(x)=\sum_{i=0}^{k}{y_i\prod_{j\ne1}\frac {x-x_j} {x_i-x_j}} f(x)=i=0∑k​yi​j​=1∏​xi​−xj​x−xj​​Lagrange插值多项式结构紧凑,在理论分析中甚为方便,但是其缺点在于当插值节点增减时,全部插值基函数均要随之变化,整个公式也将发生变化,在实际计算中很不方便。

2.Newton插值法

Newton(牛顿)插值法相对于拉格朗日插值法具有承袭性的优势,即在增加额外的插值点时,可以利用之前的运算结果以降低运算量。
假设已知n+1个点相对多项式函数 f f ff ff的值为: ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , ( x 2 , f ( x 2 ) ) , ⋯ , ( x n , f ( x n ) ) (x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)),⋯,(x_n,f(x_n)) (x0​,f(x0​)),(x1​,f(x1​)),(x2​,f(x2​)),⋯,(xn​,f(xn​)),求此多项式函数 f f f.
先从求满足两个点 ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) (x_0,f(x_0)),(x_1,f(x_1)) (x0​,f(x0​)),(x1​,f(x1​))的函数 f 1 ( x ) f_1(x) f1​(x)说起:
假设 f 1 ( x ) = f ( x 0 ) + b 1 ( x − x 0 ) f_1(x)=f(x_0)+b_1(x−x_0) f1​(x)=f(x0​)+b1​(x−x0​),
我们增加一个点, ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , ( x 2 , f ( x 2 ) ) (x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)) (x0​,f(x0​)),(x1​,f(x1​)),(x2​,f(x2​)),求满足这三个点的函数 f 2 ( x ) f_2(x) f2​(x):
假设 f 2 ( x ) = f 1 ( x ) + b 2 ( x − x 0 ) ( x − x 1 f_2(x)=f_1(x)+b_2(x−x_0)(x−x_1 f2​(x)=f1​(x)+b2​(x−x0​)(x−x1​),
以此类推,我们得到Newton插值法的函数为:

其优点在于:每增加一个点,不会导致之前的重新计算,只需要算和新增点有关的就可以了。


三、高次插值的Runge现象

在研究插值问题的初期,所有人都想当然地认为插值多项式的次数越高,插值精度越高。
Runge通过研究发现有的情况下,并非插值多项式阶数越高结果就越精确。当插值多项式的次数较高时,结果会出现严重的振荡现象,称之为Runge现象。
例如,我们在均匀节点上对Runge函数
f ( x ) = 1 1 + 25 x 2 , x ∈ [ − 1 , 1 ] f(x)=\frac{1}{1+25x^2},x\in[-1,1] f(x)=1+25x21​,x∈[−1,1]进行插值,(如图)红色曲线代表插值多项式的阶数为10时呈现的效果,可以看出,插值区间的边缘产生了严重的振荡现象,误差很大。因此,在实际中应避免使用高次的插值。通常为避免Runge现象,我们可以将插值区间分成若干小区间,在小区间内用低次插值,即分段低次插值,如样条函数插值。


四、Matlab插值

1、一维插值

当一组数据可以表示成平面坐标系上的点时,我们可以使用Matlab的一维插值命令:

yi=inter1(x,y,xi,'method')
%x,y为插值点,xi,yi为被插值点和结果,x,y和xi,yi通常为向量
%'method'表示插值方法:常用方法有'nearest''linear''spline''cubic'

‘nearest’——最邻近插值:插入与其距离最近的值
‘linear’——线性插值:构造线性函数进行插值
‘spline’——三次样条插值:将定义域分成若干个区间,在每个区间内构造三次多项式进行插值
‘cubic’——立方插值:构造立方函数进行插值
ps:'method’缺省时默认为线性插值

2、二维插值

当一组数据可以表示成空间坐标系上的点时,我们可以使用Matlab的二维插值命令:

yi=inter2(x,y,z,xi,yi,'method')
%x,y,z为插值点,xi,yi为被插值点,zi为输出的插值结果,即插值函数在(xi,yi)处的值;x,y为向量,xi,yi为向量或矩阵,而z和zi则为矩阵
%'method'表示插值方法:常用方法有'nearest''linear''spline''cubic'

‘nearest’——最邻近插值:插入与其距离最近的值
‘linear’——双线性插值:构造两组线性函数进行插值
‘spline’——双三次样条插值:将定义域分成若干个区间,在每个区间内构造三次多项式进行插值
‘cubic’——双立方插值:构造立方函数进行插值
默认为双线性插值

3、散乱点插值

当插值点(x,y)为散乱点,不再是网格上的点时,可以使用griddata命令进行二维插值:

griddata(x,y,z,xi,yi,'method')%'method'用法同上

总结

本文主要展示了数学建模中的一些插值方法及原理,并且基于Matlab进行实现的过程。由于作者也是在学习阶段,此篇文章仅供参考,欢迎大家指正!


参考资料

[1]【【零基础教程】老哥:数学建模算法、编程、写作和获奖指南全流程培训!】 https://www.bilibili.com/video/BV1kC4y1a7Ee?p=24&share_source=copy_web&vd_source=c62a50333f8ab9149f6acfdf0a7c31e7

[2]https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E6%8F%92%E5%80%BC%E6%B3%95/7085983

[3]https://zhuanlan.zhihu.com/p/138747068


数学建模学习笔记(一):插值法相关推荐

  1. 【数学建模学习笔记【集训十天】之第六天】

    数模学习目录 Matplotlib 学习 Matplotlib简介 Matplotlib 散点图 运行效果如下: Matplotlib Pyplot 运行效果如下: 关于plot() 运行效果如下: ...

  2. 数学建模学习笔记(2.3)lingo软件求解线性规划问题

    数学建模学习笔记(2.3)lingo软件求解线性规划问题 lingo软件的优势在于体积小,专注于解决优化问题 且编程语言通俗易懂,没有门槛 对于刚刚接触数学建模同学比较友善 当然对于已经参与建模很久的 ...

  3. 数学建模学习笔记(1)数学模型的特点和分类

    数学建模学习笔记(1)数学模型的特点和分类 ps:学习的教材为姜启源著的<数学模型(第四版)> 领取数模资料和更多内容请关注公众号:拾壹纪元 传送门: 线性规划(LP)问题 https:/ ...

  4. 数学建模学习笔记之评价问题聚类分析法

    数学建模学习笔记之评价问题聚类分析法 物以类聚.人以群分. 聚类分析是一个很大的概念,显然根据分类的依据不同会出现很多很多聚类的方法.例如K-Means .Sequential Leader.Mode ...

  5. 数学建模学习笔记-概况

    目录 1概况. 数学建模: 数学建模的模块: 一般步骤: 全过程: 论文的基本流程 模块学习: 1.题目备战:掌握固定模式 2.摘要备战:总结归纳能力,通过看高水平论文掌握. 3.问题重述:切忌直接抄 ...

  6. 高数叔数学建模学习笔记(1)

    此处将我在学习高数叔数学建模课程中遇到的代码记录下来,便于查看.学习. 5.matlab中的文件 wendu.m clear; f=input('temperature:'); c=5*(f-32)/ ...

  7. 数学建模学习笔记(二):非线性规划模型例题与灵敏度分析

    文章目录 前言 一.一个简单的非线性规划模型 二.问题的求解 1.模型的建立与求解 2.得出结论 三.灵敏度分析 总结 参考书目 前言 数学建模解决问题的过程一般分为五个步骤,称为五步方法,五个步骤如 ...

  8. 清风数学建模学习笔记——应用matlab实现分段三次埃尔米特(Hermite)插值与三次样条插值

    插值算法   数模比赛中,常常需要根据已知的函数点进行数据.模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,模拟产生一些新的但又比较靠谱的值来满足需求 ...

  9. 数学建模学习笔记(十一)——预测模型

    文章目录 一.综述 二.灰色预测简介 三.GM(1, 1)模型 四.使用灰色系统建模的前提 -- 准指数规律检验 五.对于GM(1, 1)的检验 六.GM(1, 1)模型的拓展 七.什么时候使用灰色预 ...

最新文章

  1. 开启Sharepoint 2013站点邮箱
  2. 单片机流星灯_51单片机拖尾灯实现
  3. 【Linux系统编程】 Linux系统调用概述
  4. 第十七篇 计算机组成原理
  5. 2万字!66道并发面试题及答案
  6. html表头的标签,HTML 表头单元格标签
  7. Tomcat网络IO NIO模型参数设定
  8. ubuntu不会自动休眠_关机、睡眠、休眠有啥区别?微软说非特殊情况不要关机
  9. WebSocket使用sendObject(Object arg0)向页面方法发送对象
  10. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
  11. c+命名空间_了解C ++中的命名空间
  12. SLAM建图精度评估 by EVO
  13. 时统ptp_IEEE1588 PTP对时系统原理及特点
  14. 红米note3android驱动,为何我的红米NOTE3 装不了USB驱动
  15. C语言——矩阵计算(转置、加法、减法、数乘、乘法)
  16. 中枢神经系统解剖结构图,神经系统的解剖结构
  17. ffmpeg获取音频信息
  18. android源码结构分析
  19. SQL 身份证获取性别
  20. 逻辑思维类面试题汇编七

热门文章

  1. Hadoop的完全分布式搭建
  2. 梦幻手游服务器维护摆摊公示时间,梦幻西游手游5月27日维护公告
  3. 人工智能之深度学习常见应用方向你都了解吗?(文末包邮送书5本)
  4. ACM Plan UVa - 168 Theseus and the Minotaur(图的遍历,深度优先)
  5. npm ERR code1
  6. 正则匹配文本中的括号
  7. PlusFo公链:币圈凋敝之时,亦是重生之日
  8. (理财一)如何为家庭配置保险
  9. vue : 无法加载文件 C:\Users\Lenovo\AppData\Roaming\npm\vue.ps1。...无法在当前系统上运行该脚本。
  10. 【Python】实现csv文件转json文件