数值分析——插值(一)、Runge现象
在数值分析中,插值方法是基础且重要的。本文将介绍Lagrange插值公式与Newton插值公式。此外,针对Runge现象,本文给出了稍稍详细的讨论。
一、Lagrange插值公式
假设函数 \(y=f(x)\) 在取定的\(n+1\)个互异的基点 \(x_0,x_1,\cdots,x_n\) 处的值已知分别为 \(y_0=f(x_0),y_1=f(x_1),\cdots,y_n=f(x_n)\),现在要寻找多项式 \(p(x)\) 使得 $$p(x_k)=f(x_k), \quad k=0,1,\cdots,n$$
记
\]
令
\]
这就是满足条件的多项式。
例 利用等距基点计算函数 \(f(x)=\frac{\sin{e^{-x^2}}}{\sqrt{x+2}}\) 在区间 \([-1,1]\) 上的值。
import math
def fun1(t):
return math.sin(math.exp(-t**2))/math.sqrt(t+2)
def LagIn(X,P,x):
Pol=0
length=len(P)
count1=0
while count1 <= length-1:
lpoly=P[count1]
count2=0
while count2 <= length-1:
if count1 != count2:
lpoly=lpoly*(x-X[count2])/(X[count1]-X[count2])
else:
lpoly=lpoly
count2=count2+1
Pol=Pol+lpoly
count1=count1+1
return Pol
n=int(input("输入基点个数:"))
A=[]
K=[]
Result=[]
count=0
while count <= n:
A.append(fun1(-1+count*2/n))
K.append(-1+count*2/n)
count=count+1
count=0
print(LagIn(K,A,0.1))
考虑误差问题。记
\]
若\(f(x)\)在包含\(n+1\)个插值基点\(x_0,x_1,\cdots,x_n\)的区间\([a,b]\)上有\(n\)阶连续导数,且在\((a,b)\)内存在\(n+1\)阶有界导数,那么对\([a,b]\)上的每一点\(x\)必存在一点\(\eta \in (a,b)\)使得
\]
二、均差与Newton插值公式
仍然使用上一节的记号。考虑形如
\]
的多项式,满足条件
\]
由线性代数的知识容易知道,\(a_0,a_1,\cdots,a_n\)是唯一确定的。考虑这种形式的多项式的好处是,当需要增加基点时,可以减少计算量。
下面引入均差的概念来确定该插值多项式的系数。
\(f(x)\)关于基点\(x_0,x_1,\cdots,x_n\)的n阶均差定义为
\]
规定
\]
是\(f(x)\)关于基点\(x_i\)的零阶均差。
利用数学归纳法可以证明:n阶均差可以写成
\]
与利用Lagrange插值法得到的多项式比较可知,\(N_n(x)\)的系数
\]
三、Runge现象
考虑函数
\]
对该函数在等距基点上插值,分别取插值基点个数为5,10,15,20,30,作出误差图像,如下所示:





import math
import matplotlib.pyplot as mpl
def fun1(t):
return (1+t**2)**(-1)
def LagIn(X,P,x):
Pol=0
length=len(P)
count1=0
while count1 <= length-1:
lpoly=P[count1]
count2=0
while count2 <= length-1:
if count1 != count2:
lpoly=lpoly*(x-X[count2])/(X[count1]-X[count2])
else:
lpoly=lpoly
count2=count2+1
Pol=Pol+lpoly
count1=count1+1
return Pol
n=int(input("输入基点个数:"))
A=[]
K=[]
Result=[]
count=0
while count <= n:
A.append(fun1(-5+count*10/n))
K.append(-5+count*10/n)
count=count+1
count=0
B=[]
F=[]
while count <= 10000:
B.append(-5.01+count*10.02/10000)
F.append((fun1(B[count])-LagIn(K,A,B[count])))
count=count+1
mpl.plot(B,F)
mpl.show()
可以看到,插值多项式在端点附近有较大的误差。事实上可以证明
\]
这就是所谓的Runge现象。下面将进行仔细讨论。
在区间\([a,b]\)上,记插值基点为\(\{x_j^{(n)}\},\quad j=0,1,\cdots,n\),插值多项式为\(p_n(x)\)。首先估计误差项\(f(x)-p_n(x)\)。
由Newton插值法,在区间\([a,b]\)上取与插值基点相异的一个基点 \(x=t\),得到
\]
由于\(p_{n+1}(t)=f(t)\),因此
\]
下面记
\]
下面在复平面上考虑问题,插值基点视作实轴上的点,仍保留原来的记号。
由留数定理
\]
其中
\]
C是曲线,使得插值基点在它内部,\(f\)在其内部解析。类似可以求得\(f[z,x_0,x_1,\cdots,x_n]\)的表达式。从而得到
\]
为了进一步估计,需要先证明以下引理:
引理 假设\(\{x_j^{(n)}\}\)是区间\([a,b]\)上的等距基点,定义
\]
则
\]
证明:
\]
由黎曼积分的定义知
\]
引理成立。
考虑曲线
\]
命题 \(\{x_j^{(n)}\}\)是包含在曲线\(C(\rho)\)中的等距插值基点,若\(f\)在\(C(\rho)\)中解析,则\(p_n\)在\(C(\rho'),\rho' < \rho\)上一致收敛于\(f\)。
证明:假设\(z\)在曲线\(C(\rho')\)上,显然\(C(\rho)\)和\(C(\rho')\)是不交的,因此有以下估计:
\]
由于\(|f(\eta)|\)和\(|\eta-z|\)在\(C(\rho)\)上分别由上界和下界,因此
\]
考虑引理中的结果,由\(\lim_{n \to \infty}\sigma_n(z)=\rho'\)及\(\lim_{n \to \infty}\sigma_n(\eta)=\rho\),对\(\epsilon < \frac{|p-p'|}{3}\)能够取到\(n\)使得
\]
从而可以证明一致收敛。
考虑\(f\)在\(C(\rho)\)中并不解析的情况。仅仅讨论一种特殊情况:若只有一个一阶极点\(z^*\),此时
\]
其中\(C^*=C(\rho^*)\)是围绕极点的一条路径。由上面的讨论知,第一项趋于零。利用留数定理,第二项可以写成
\]
其中
\]
是有界的。
\]
此时\(f(z)-p_n(z)\)并不收敛。
上面的讨论并没有给出Runge现象的充要条件。当插值区间过大时,可能会出现Runge现象;缩小插值区间,可以避免Runge现象,因此可以考虑分段插值的方法。此外也可以采用Chebyshev基点进行插值,这就不在本文的讨论范围内了。
参考
[1]Epperson J. On the Runge Example[J]. The American Mathematical Monthly, 1987, 94(4):329-341.
[2]林成森. 数值计算方法[M]. 科学出版社, 2005.
[3]作者本人的实验报告.
数值分析——插值(一)、Runge现象的更多相关文章
- 数值分析案例:Newton插值预测2019城市(Asian)温度、Crout求解城市等温性的因素系数
数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温性的因素系数 文章目录 数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温 ...
- Jacobi与SOR迭代法的实现与性能比较及均匀间距与Chebyshev插值的实现、性能分析及二者生成的插值误差比较
这篇文章给出(1)Jacobi与SOR迭代法的实现与性能比较及(2)均匀间距与Chebyshev插值的实现.性能分析及二者生成的插值误差比较,给出完整的实现代码,没有进行性能优化,仅供参考. (1)J ...
- MATLAB中插值算法实现
%%%1.M文件%(1).以往少的程序可以在命令行窗口进行编码,但大量的程序编排到命令行窗口,%会有造成乱码的危险.(2).如果将命令编成程序存储在一个文件中(M文件),依次运行文件中的命令,则可以重 ...
- 【数值分析】Python实现Lagrange插值
一直想把这几个插值公式用代码实现一下,今天闲着没事,尝试尝试. 先从最简单的拉格朗日插值开始!关于拉格朗日插值公式的基础知识就不赘述,百度上一搜一大堆. 基本思路是首先从文件读入给出的样本点,根据输入 ...
- scipy插值与拟合
原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot ...
- 转Python SciPy库——拟合与插值
1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq p ...
- 图像的降采样与升采样(二维插值)----转自LOFTER-gengjiwen
图像的降采样与升采样(二维插值) 1.先说说这两个词的概念: 降采样,即是采样点数减少.对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中 每行每列每隔k个点取一个点组成一幅图像.降采样很容 ...
- 空间插值文献阅读(Geostatistical approaches for incorporating elevation into the spatial interpolation of rainfall)
空间插值技术应用必读论文---P. Goovaerts, Geostatistical approaches for incorporating elevation into the spatial ...
- 数值分析1:三角函数的计算(C语言实现)
之前学习C语言的时候,一直有个疑问,计算机从芯片设计的角度来看,只能计算常规的加减乘及移位之类的操作,那么对于像sin .cos这些三角函数,人脑尚无可以直接运算的法则,那么计算机是怎么实现的呢?最近 ...
随机推荐
- 萌新也能看懂的KMP算法
前言 算法是什么?算法就是数学规律.怎么去总结和发现这个规律,就是理解算法的过程. KMP算法的本质是穷举法,而并不是去创造新的匹配逻辑. 以下将搜寻的字符串称为子串(part),以P表示.被搜寻的字 ...
- Ajax的使用(jquery的下载)
Ajax学习笔记(jquery的下载) JQuery的官网下载 地址:http://jquery.com 右上角的"Download JQuery" 三个可供下载的文件: Prod ...
- 一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.怎么处理慢查询 2.ACID靠什么保证的 3.什么是MVCC 4.mysql主从同步原理 5.简述Myisam和inn ...
- 齐博x1工单碎片模板制作教程
可以把工单插入到任何频道的内容里边,如下图所示 碎片模板制作标准如下 <form action="{:urls('order/add')}" class="wn_f ...
- 基于数组或链表的学生信息管理系统(小学期C语言程序实训)
1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...
- 5.httprunner-hook机制
hook简介 httprunner3是基于python的pytest框架,里面也有前置和后置的概念 setup_hooks:开始执行前触发hook函数,主要用于请求预处理(签名,加密等) teardo ...
- nrf9160 做modem—— 连接云(接入方式MQTT)
今天测试把nrf9160作为modem的例程Serial LTE Modem程序(后面简称slm),何为做modem,通俗来说就是将nrf9160作为无线模块,主控由其余MCU做,主控通过AT命令控制 ...
- 精简docker的导出镜像
Docker 镜像是由多个文件系统(只读层)叠加而成,每个层仅包含了前一层的差异部分.当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层.容器上所做的任何更改,譬如新建文件.更 ...
- 接入监控视频,为啥还需要对接厂商的SDK呢,不是有onvif这样的标准协议吗?
不少人问过我这个问题,这真是一个好问题. 我举两个例子,让您仔细品: ① 快速打开视频和极致操控的问题. onvif协议很科班,但厂商的sdk可能会给你一些独特的方法,譬如先make一个I帧,这样第一 ...
- Appscan安全扫描问题-会话检测失败
在进行手动探索-使用浏览器记录时,在后续的继续探索中经常碰到会话检测失败的问题.然而在[配置-登录管理-自动]中记录账号密码后再继续探索仍然提示会话检测失败....网上查找了资料,从该博主的博文中成功 ...