欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

切比雪夫插值

程序员文章站 2022-07-05 17:25:24
...

简介

使用平均分布的点作为插值多项式的基点XiX_i很普遍。在很多情况下,用于插值的数据点仅以这种形式存在,例如当数据由相同时间间隔分布的一起读取的数据所组成时。在其他情况下,我们可以在认为合适的地方*选择基点。事实证明,基点间距选取的方式对于插值误差有很大的影响,切比雪夫插值是一种特定最优的点间距选取方式。

理论分析

切比雪夫理论

切比雪夫插值的动机是在插值区间上,提高对如下插值误差(如:牛顿差商公式)的最大值的控制
(xx1)(xx2) (xxnn!f(n)(c) \frac{\text{(}x-x_1\text{)}\left( x-x_2 \right)···\text{ (}x-x_n\text{) }}{n!}f^{\left(n\right)}\left(c\right)
从现在开始,让我们把区间固定在[-1,1]。

多项式插值误差的分子
(xx1)(xx2) (xxn1.1 \text{(}x-x_1\text{)}\left( x-x_2 \right)···\text{ (}x-x_n\text{) } \hspace{3em} (1.1)
本身是一个关于x的n阶多项式,并在区间[-1,1]上具有极值。是否可能在区间[-1,1]找到特定的 x1x_1,···,xnx_n 使得(1.1)的最大值足够小?这被称为插值误差的最小最大问题。

多项式结点均匀分布时,其端点可能取值趋向极大,这是龙格现象的一个表现。而切比雪夫结点会在区间上一定程度地补偿多项式的大小。

在[-1,1]之间,当选择放置9个基点的精确位置是 cos(Π18)\cos \left( \frac{\varPi}{18}\right)cos(3Π18)\cos \left(\frac{3\varPi}{18}\right),···,cos(17Π18)\cos \left(\frac{17\varPi}{18}\right)时,这使得(1.1)中的最大绝对值等于1/256,这是在区间[-1,1]上9个点对应的最小值。这种根据切比雪夫的定位,见如下定理。

定理1.2
选择实数-1\lex1x_1,···,xnx_n \le 1,使得
max1x1(xx1)(xxn) \underset{-1\le x\le 1}{\max}\left| \left(x -x_1 \right)···\left( x - x_n \right) \right|
尽可能小,则
x=cos2i1Π2n,i=1,n x = cos\frac{2i-1\varPi}{2n},i = 1,···,n
对应的最小值是1/2n12^{n-1}。实际上,通过
(xx1)(xx2) (xxn)  =12n1Tn(x) \text{(}x-x_1\text{)}\left( x-x_2 \right)···\text{ (}x-x_n\text{) }\ = \frac{1}{2^{n-1}} Tn(x)
可以得到极小值,其中Tn(x)表示n 阶切比雪夫多项式。

从定理中我们得到结论:如果区间[-1,1]中的n个插值基点选在n阶切比雪夫多项式Tn(x)根的位置,误差可以被最小化。这些根如下
xi=cos(oddΠ2n)(1.3) x_i = \cos \left(\frac{odd\varPi}{2n}\right)\hspace{3em} (1.3)

其中“odd”表示1 - 2n-1之间的奇数,然后就可以保证对于区间[-1,1]中所有x,(1.1)的绝对值小于1/2(n1)2^{\text{(}n-1\text{)}}

选择切比雪夫的根作为插值的基点,在区间[-1,1]中尽可能均匀地分散了插值误差,我们将使用切比雪夫根作为基点的插值多项式叫做切比雪夫插值多项式。

切比雪夫多项式

定义n阶切比雪夫多项式Tn(x)= cos(n arccosx)。不考虑该函数的外观,它对于每个n都是关于x的多项式。例如,当 n = 0时,对应 0 阶多项式1,当 n=1 时我们得到 T1(x) = cos(arccosx) = x 。当n = 2时,回忆余弦求和公式cos(a+b) = cosacosb - sinasinb。令y = arccosx,因而 cosy = x 。则 T2(x)= cos2y\cos ^2y = cos2y\cos ^2y - sin2y\sin ^2y = 2cos2y\cos ^2y-1 = 2x2x^2-1 ,这是一个2阶的多项式。一般地,注意到
Tn+1(x) = cos(n+1)y =  cos(ny+y) = cosnycosysinnysiny T_{n+1}\left(x\right)\ =\ \cos\left(n+1\right)y \ = \ \ cos\left(ny+y \right)\ =\ \cos ny\cos y-\sin ny\sin y
Tn1(x) = cos(n1)y =  cos(nyy) = cosnycosysinnysiny T_{n-1}\left(x\right)\ =\ \cos\left(n-1\right)y \ = \ \ cos\left(ny-y \right)\ =\ \cos ny\cos y-\sin ny\sin -y
由于sin(-y) = -siny,我们把前面的方程加起来得到
Tn+1(x) +Tn1(x) =2cosnycosy = 2xTn(x) T_{n+1}\left(x \right) \ +T_{n-1}\left(x \right)\ = 2\cos ny\cos y\ =\ 2xT_n\left( x\right)
得到的关系如下:
Tn+1(x)= 2xTn(x)Tn1(x) T_{n+1}\left(x \right) = \ 2xT_n\left( x\right) - T_{n-1}\left(x \right)
这被称为切比雪夫多项式的递归关系,从中我们可以得出:
Tn(x)的所有过零点都在-1-1之间,实际上,过零点是0 = cos(n arccos(x))的解,由于cosy = 0,当且仅当 y = 奇数·(Π\varPi/2),我们发现
narccosx=oddΠ/2 narccosx = odd · \varPi /2
x=cosoddΠ2n x = \cos \frac {odd*\varPi}{2n}
由此我们可以知道,Tn(x)的所有根都是实数,我们可以以分解形式(x-x1x_1)···(x-xnx_n)表示 Tn(x)/2n12^{n-1},其中xix_i是切比雪夫节点。

区间的变化

到目前,关于切比雪夫插值的讨论局限于区间[-1,1],这是由于定理1.2在这个区间内非常容易说明。现在我们将方法推广到一般的区间[a,b]。

移动基点使得它们在区间[a,b]上的相对位置和在区间[-1,1]上一致。这可以通过如下两步实现:(1)使用因子(b-a)/2拉伸点(这是两个区间长度的比值),(2)将点平移(b+a)/2,使得中心从0移动到区间[a,b]的中心。换句话讲,从原始点
cosoddΠ2n cos \frac{odd\varPi}{2n}
移动到
ba2cosoddΠ2n+b+a2 \frac{b-a}{2}\cos \frac{odd\varPi}{2n}+\frac{b+a}{2}
使用区间[a,b]上新的切比雪夫基点xix_i,···,xnx_n,插值误差公式中分子部分的上界也发生了改变,这是由于对因子x-xix_i拉伸到(b - a )/2。结果最小最大值1/2n12^{n-1}必须被替换为 [(ba)/2]n{ [(b-a)/2]}^n/2n1{2^{n-1}}

切比雪夫节点
在区间[a,b],
 xi = b+a2+ba2cos(2i1)Π2n \ x_{i\ }=\ \frac {b+a}{2}+ \frac{b-a}{2}\cos \frac{\left(2i-1 \right)\varPi}{2n}
i = 1,···,n。不等式
 (xxixxn(ba2)n2n1 \ |(x-x_i)···(x-x_n)| \le \frac{\left(\frac{b-a}{2} \right)^n}{2^{n-1}}
在区间上[a,b]上成立。

算法描述

切比雪夫插值

实例分析

例题:

函数 f (x) = 11+x2\frac{1}{1+x^2} x[5,5]x\in \left[ -5,5 \right]

  1. 取等距插值节点横坐标为:

    -5,-4,-3,-2,-1,0,1,2,3,4,5

  2. 在[-5,5]区间上,取11个切比雪夫节点
    xk=5cos((2k+1)Π22)(k=10,9,8,) x_k = 5cos (\frac{(2k+1)\varPi}{22}) ( k = 10,9,8,··· )

其点横坐标分别为 :

-4.9491,-4.5482,-3.7787,-2.7032,-1.4087,0,1.4087,2.7032,3.7787,4.5482,4.9491

取部分点对比如下:
切比雪夫插值
由表格中计算的测试点与原函数值对比,明显切比雪夫节点是更优的取点方式 。

取等距点拟合的曲线如图:
切比雪夫插值

取切比雪夫节点拟合的曲线如图:
切比雪夫插值

代码:

#include<iostream>
using namespace std;
double n,x[100],y[100],l[100] ;

void input()
{
	for(int i=0;i<n;i++) 
		cin>>x[i]>>y[i]; 
} 

double cau(double test)
{
	double re = 0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(j!=i)
				l[i] = l[i] * (test-x[j])/(x[i]-x[j]);
		} 
		re += l[i]*y[i];
	}
	return re;
}
int main()
{
	cout<<"输入多少个点"<<endl;
	cin>>n;
	cout<<"输入插值点:"<<endl;
	input();
	double test; 
	cin>>test; 
	for(int i=0;i<100;i++) l[i]=1;
	double re = cau(test);
	cout<<"result: "<<re <<endl; 
	return 0;
}

结果

等距节点:

切比雪夫插值

切比雪夫节点:

切比雪夫插值

总结

总的来说,切比雪夫插值是一种特定最优的点间距选取方式,它和拉格朗日插值、牛顿差商公式相比,更能有效地避免龙格现象地出现,而且,能够更好地贴合原函数,也就是说,它的结果预测相对会更准确。

参考文献
Timothy Sauer. { Numercial Analysis}. 2014.

相关标签: 计算方法