数学建模学习笔记(一):插值法
文章目录
- 前言
- 一、一维插值问题的描述
- 二、常用插值方法
- 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)=y1f1(x)+y2f2(x)+y3f3(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∑kyij=1∏xi−xjx−xjLagrange插值多项式结构紧凑,在理论分析中甚为方便,但是其缺点在于当插值节点增减时,全部插值基函数均要随之变化,整个公式也将发生变化,在实际计算中很不方便。
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
数学建模学习笔记(一):插值法相关推荐
- 【数学建模学习笔记【集训十天】之第六天】
数模学习目录 Matplotlib 学习 Matplotlib简介 Matplotlib 散点图 运行效果如下: Matplotlib Pyplot 运行效果如下: 关于plot() 运行效果如下: ...
- 数学建模学习笔记(2.3)lingo软件求解线性规划问题
数学建模学习笔记(2.3)lingo软件求解线性规划问题 lingo软件的优势在于体积小,专注于解决优化问题 且编程语言通俗易懂,没有门槛 对于刚刚接触数学建模同学比较友善 当然对于已经参与建模很久的 ...
- 数学建模学习笔记(1)数学模型的特点和分类
数学建模学习笔记(1)数学模型的特点和分类 ps:学习的教材为姜启源著的<数学模型(第四版)> 领取数模资料和更多内容请关注公众号:拾壹纪元 传送门: 线性规划(LP)问题 https:/ ...
- 数学建模学习笔记之评价问题聚类分析法
数学建模学习笔记之评价问题聚类分析法 物以类聚.人以群分. 聚类分析是一个很大的概念,显然根据分类的依据不同会出现很多很多聚类的方法.例如K-Means .Sequential Leader.Mode ...
- 数学建模学习笔记-概况
目录 1概况. 数学建模: 数学建模的模块: 一般步骤: 全过程: 论文的基本流程 模块学习: 1.题目备战:掌握固定模式 2.摘要备战:总结归纳能力,通过看高水平论文掌握. 3.问题重述:切忌直接抄 ...
- 高数叔数学建模学习笔记(1)
此处将我在学习高数叔数学建模课程中遇到的代码记录下来,便于查看.学习. 5.matlab中的文件 wendu.m clear; f=input('temperature:'); c=5*(f-32)/ ...
- 数学建模学习笔记(二):非线性规划模型例题与灵敏度分析
文章目录 前言 一.一个简单的非线性规划模型 二.问题的求解 1.模型的建立与求解 2.得出结论 三.灵敏度分析 总结 参考书目 前言 数学建模解决问题的过程一般分为五个步骤,称为五步方法,五个步骤如 ...
- 清风数学建模学习笔记——应用matlab实现分段三次埃尔米特(Hermite)插值与三次样条插值
插值算法 数模比赛中,常常需要根据已知的函数点进行数据.模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,模拟产生一些新的但又比较靠谱的值来满足需求 ...
- 数学建模学习笔记(十一)——预测模型
文章目录 一.综述 二.灰色预测简介 三.GM(1, 1)模型 四.使用灰色系统建模的前提 -- 准指数规律检验 五.对于GM(1, 1)的检验 六.GM(1, 1)模型的拓展 七.什么时候使用灰色预 ...
最新文章
- 开启Sharepoint 2013站点邮箱
- 单片机流星灯_51单片机拖尾灯实现
- 【Linux系统编程】 Linux系统调用概述
- 第十七篇 计算机组成原理
- 2万字!66道并发面试题及答案
- html表头的标签,HTML 表头单元格标签
- Tomcat网络IO NIO模型参数设定
- ubuntu不会自动休眠_关机、睡眠、休眠有啥区别?微软说非特殊情况不要关机
- WebSocket使用sendObject(Object arg0)向页面方法发送对象
- 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
- c+命名空间_了解C ++中的命名空间
- SLAM建图精度评估 by EVO
- 时统ptp_IEEE1588 PTP对时系统原理及特点
- 红米note3android驱动,为何我的红米NOTE3 装不了USB驱动
- C语言——矩阵计算(转置、加法、减法、数乘、乘法)
- 中枢神经系统解剖结构图,神经系统的解剖结构
- ffmpeg获取音频信息
- android源码结构分析
- SQL 身份证获取性别
- 逻辑思维类面试题汇编七
热门文章
- Hadoop的完全分布式搭建
- 梦幻手游服务器维护摆摊公示时间,梦幻西游手游5月27日维护公告
- 人工智能之深度学习常见应用方向你都了解吗?(文末包邮送书5本)
- ACM Plan UVa - 168 Theseus and the Minotaur(图的遍历,深度优先)
- npm ERR code1
- 正则匹配文本中的括号
- PlusFo公链:币圈凋敝之时,亦是重生之日
- (理财一)如何为家庭配置保险
- vue : 无法加载文件 C:\Users\Lenovo\AppData\Roaming\npm\vue.ps1。...无法在当前系统上运行该脚本。
- 【Python】实现csv文件转json文件