龙格现象
- 格式:doc
- 大小:71.50 KB
- 文档页数:6
插值MATLAB实现(牛顿差商插值误差龙格现象切比雪夫插值)插值是数值分析中的一种方法,通过已知数据点的函数值来估计函数在其他点的值。
MATLAB提供了多种方法来实现插值,包括牛顿差商插值、插值误差分析、龙格现象和切比雪夫插值。
下面将详细介绍这些方法的实现原理和MATLAB代码示例。
1.牛顿差商插值:牛顿差商插值是一种基于多项式插值的方法,其中差商是一个连续性的差分商。
该方法的优势在于可以快速计算多项式的系数。
以下是MATLAB代码示例:```matlabfunction [coeff] = newton_interpolation(x, y)n = length(x);F = zeros(n, n);F(:,1)=y';for j = 2:nfor i = j:nF(i,j)=(F(i,j-1)-F(i-1,j-1))/(x(i)-x(i-j+1));endendcoeff = F(n, :);end```该代码中,输入参数x和y分别表示已知数据点的x坐标和y坐标,返回值coeff表示插值多项式的系数。
2.插值误差分析:插值误差是指插值函数与原始函数之间的差异。
一般来说,通过增加插值节点的数量或使用更高次的插值多项式可以减小插值误差。
以下是MATLAB代码示例:```matlabfunction [error] = interpolation_error(x, y, x_eval)n = length(x);p = polyfit(x, y, n-1);y_eval = polyval(p, x_eval);f_eval = sin(pi*x_eval);error = abs(f_eval - y_eval);end```该代码中,输入参数x和y分别表示已知数据点的x坐标和y坐标,x_eval表示插值节点的x坐标,error表示插值误差。
3.龙格现象:龙格现象是插值多项式在等距插值节点上错误增长的现象。
数值分析中的插值误差控制技巧数值分析是解决实际问题中涉及数值计算的方法和技术的学科。
在数值计算中,插值是一种常用的数值分析技术,用于在给定的有限数据点集合上估计函数在其他点上的值。
然而,插值过程中会产生误差,为了保证插值结果的准确性,需要掌握一些插值误差控制技巧。
本文将介绍数值分析中常用的插值误差控制技巧。
一、余项估计法余项估计法是一种常用的插值误差控制技巧。
在数值分析中,我们通常使用多项式插值方法进行插值计算。
多项式插值的基本思想是通过已知数据点构造一个多项式,然后利用该多项式在其他点上的值来估计函数的值。
余项估计法通过对多项式插值的余项进行估计来控制插值误差。
二、龙格现象与插值节点的选择在实际问题中,插值节点的选择对插值结果的准确性有重要影响。
龙格现象是指在某些特定的插值节点选择下,插值多项式在边界上会出现振荡现象。
为了避免龙格现象,需要选择合适的插值节点。
常用的插值节点选择方法有均匀节点、切比雪夫节点等。
三、样条插值与光滑插值除了多项式插值,样条插值也是一种常用的插值方法。
样条插值通过在每个小区间上构造一个低次多项式来实现插值。
样条插值不仅能够满足插值条件,还能够保证插值函数在节点处的光滑性。
光滑插值是为了减小插值误差而采用的一种技巧。
四、自适应插值与网格剖分自适应插值是一种根据插值误差大小来调整插值节点的方法。
通过不断调整插值节点,自适应插值能够有效控制插值误差,并使插值结果更加精确。
网格剖分是自适应插值的一种实现方式,通过将插值区域划分成多个小区间进行插值计算,以提高插值的准确性。
五、边界条件的选取在插值过程中,边界条件的选取也对插值结果的准确性有重要影响。
常用的边界条件有自然边界条件、固定边界条件等。
合理选择边界条件能够有效控制插值误差,并提高插值结果的准确性。
综上所述,数值分析中的插值误差控制技巧是保证插值结果准确性的重要手段。
通过合理选择插值节点、掌握余项估计法、利用样条插值和自适应插值等方法,可以有效控制插值误差,提高插值结果的准确性。
一、判断1、0.026900x *=-作为x 的近似值,它的有效数字位数为5位。
( × )2、迭代法的敛散性与迭代初值的选取无关。
( × )3、牛顿插值多项式的优点是:在计算时,高一级的插值多项式可利用前一次插值的结果。
( √ )4、已知观察值()(),0,1,i i x y i n =,用最小二乘法求得的拟合多项式其次数为n 次。
( × )5、改进欧拉公式是一种隐式的方法。
( × )6、一个近似数的有效数位愈多,其相对误差限愈小。
( √ ) 6、求方程310x x --=在区间[1, 2]内根的迭代法总是收敛的。
( × )7、矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--521253113是主对角占优矩阵。
( × )8、在求插值多项式时,插值多项式的次数越高,误差越小。
( × ) 9、具有n+1各节点的插值型求积公式至少具有n+1次代数精度。
( × ) 二、填空题1、误差来源: 舍入误差 , 截断误差 , 观测误差 , 模型误差 。
2、古代数学家祖冲之曾以113355作为圆周率π的近似值,此近似值有 7 位有效数字。
3、用二分法求方程f(x)=x3+x-1=0在区间[0,1]内的根,进行一步二分后根所在区间为,进行二步二分后根所在区间为。
4、方程求根中牛顿迭代公式,收敛速度是。
5、求线性解方程组 5x1-3x2-0.1x3=1-2x1+6x2+0.7x3=0x1+2x2+3.5x3=0的高斯—赛德尔迭代格式为,取迭代初值x 1(0)=1,x 2(0)=-1,x 3(0)=1,则x 1(1)= -0.38 ,x2(1)= -0.24, x3(1)= 351。
6、Gauss 求积公式⎰baf(x )dx≈∑=Nn n)Anf(x 具有 2N+1 次代数精度。
7、n+1个插值节点构造的拉格朗日插值公式Ln(x)= 1 余项Rn(x)= 1 。
3. 多项式插值的龙格现象考虑在一个固定的区间上用插值逼近一个函数。
显然,拉格朗日插值中使用的节点越多,插值多项式的次数就越高,自然关心插值多项式的次数增加时,()n L x 是否也更加靠近被逼近的函数。
龙格给出的一个例子是极著名并富有启发性的。
设在区间[]1,1-上的函数为:()21125f x x =+,考虑区间[]1,1-的一个等距划分,分点为:21,0,1,2,,iix i nn=-+=则拉格朗日插值多项式为: ()()201125nn i i iL x l x x ==+∑ 其中(),0,1,2,i l x i n =是n 次拉格朗日插值基函数。
要求:(1)选择不断增大的分点数目2,3,n =画出原函数()f x 及插值多项式函数()n L x 在区间[]1,1-的图像,比较并分析实验结果。
解:算法为function lagrangeinterp% graphs of different 'n' clear all;clc x=-1:.01:1;y=1./(1+25.*x.^2); plot(x,y,'-') hold onn=input('n='); x=-1:2/n:1;y=1./(1+25.*x.^2); u=-1:.01:1;v=lagrange(x,y,u);function v = lagrange(x,y,u) % algorithm of lagrange n = length(x); v = zeros(size(u)); for k = 1:nw = ones(size(u)); for j = [1:k-1 k+1:n]w = (u-x(j))./(x(k)-x(j)).*w; endv = v + w*y(k); endplot(x,y,'o',u,v,'--') hold off当选定为2等分时:当选定为3等分时:当选定为5等分时:当选定为10等分时:当选定为15等分时:由上述五个图形可得:在一定范围内,拉格朗日插值中使用的节点越多,插值多项式的L x也更加靠近被逼近的函数,插值节点但并不是越多越好,当超过某一次数就越高,()n值后,就会在端点处出现龙格现象,而且节点越多,龙格现象越严重。
差值里的龙格现象实验临床八年1004张馨予2204100412 一.实验任务:由书上例子2.2和2.3表明适当的提高多项式的次数,有可能提高插值的精度,但是绝对不可能由此认为插值多项的次数越高越好。
此次试验的任务便是验证差值多项式里的龙格现象。
二.算法设计:对函数f(x)=1/(1+25*x*x),(-1<=x<=1).先以xi=-1+2/5i(i=0,1,2,…,5)为节点做五次插值多项式P5(x),再以xi=-1+1/5i(i=0,1,…,10)为节点做十次插值多项式P10(x),并将曲线f(x)=1/(1+25*x*x),y=P5(x),y=P10(x),在区间[-1,1]上,描绘在同一个坐标系。
程序设计,对于插值法,首先计算lagrange差值基本函数lk(x)。
再写出满足差值条件的n次插值多项式Ln(x)=yl(x)的总和。
三.计算机程序:1.求5个点对应y值的m文件function y=flongge2x=-1:0.4:1for i=1:length(x)y(i)=1/(1+25*x(i)*x(i));enddisp(y)2.求10个点对应y值的函数文件function y=flongge2x=-1:0.2:1for i=1:length(x)y(i)=1/(1+25*x(i)*x(i));enddisp(y)3. 差值里的龙格现象function f=Language(x,y,x0)syms t;if(length(x)==length(y))n=length(x);elsedisp('xand y are not of the same demision');return;endf=0.0;for(i=1:n)l=y(i);for(j=1:i-1)l=l*(t-x(j))/(x(i)-x(j));end;for(j=i+1:n)l=l*(t-x(j))/(x(i)-x(j));end;f=f+l;f=simplify(f);if(i==n)if(nargin==3)f=subs(f,'t',x0)elsef=collect(f);f=vpa(f,6);endendend并在命令编辑器里输入x y 矩阵,以及f=Language(x,y)4.龙格总图的m文件functiontu=longgezongtufplot('-220.940*t^10+494.907*t^8-381.433*t^6+123.360*t^4-16.8552*t^2+1.',[-1,1] ),holdon;fplot('1/(1+25*x*x)',[-1,1]), hold on;fplot('1.20199*t^4-1.73079*t^2+.567309',[-1,1],1e-4),grid四.调试以及运行结果1.在命令编辑器里输入flongge2,得到十个点的对应y值:(截的图)2.输入f,得到五个点对应的y值:3.在命令编辑器里输入x矩阵,和y矩阵,以及f=Language(x,y),就会得到对应的两个差值公式:y=-220.940*t^10+494.907*t^8-381.433*t^6+123.360*t^4-16.8552*t^2+1.y=1.20199*t^4-1.73079*t^2+.567309根据这两个公式编出可以输出图的程序。
二.主要方、步骤:
1.运用FORTRAN编制原函数,拉格朗日插值和线性插值程序;
2.将数据运用grapher将实验数据绘制成图.
三.程序代码:
!龙格现象/高次插值的病态性质
PROGRAM LONGERend
parameter(n=10)
real(8) y(0:20),x(0:20),x1(0:20),y1(0:20),Ih(0:20)
!计算f(x)
open(2,file='y.doc')
write(2,"('x',30x,'f(x)')")
do i=0,n
x(i)=-5.0+10*i/n
y(i)=1.0/(1+x(i)**2)
write(2,*) x(i), y(i)
end do
!计算Ln(x),拉格朗日插值程序
OPEN(2,file='y1.doc')
write(2,"('x1',30x,'Ln(x)')")
do i=0,n-1
x1(i)=(x(i)+x(i+1))/2
y1(i)=0.0
do j=0,n
!计算Wn+1(x),W'n+1(x)
w=1.0
wp=1.0
do k=0,n
w=w*(x1(i)-x(k))
if(k/=j) then
wp=wp*(x(j)-x(k))
end if
end do
y1(i)=y1(i)+y(j)*w/wp/(x1(i)-x(j))
end do
write(2,*) x1(i),y1(i)
end do
!分段线性插值程序
open(2,file='Ih.doc')
write(2,"('x1',30x,'Ih')")
do k=0,n-1
Ih(k)=(x1(k)-x(k+1))/(x(k)-x(k+1))*y(k)+(x1(k)-x(k))/(x(k+1)-x(k))*y( k+1)
write(2,*) x1(k),Ih(k)
end do
print*,'数据已写入指定文件'
end
四.数值结果:
x f(x)
-5.00000000000000 3.846153846153846E-002 -4.00000000000000 5.882352941176471E-002 -3.00000000000000 0.100000000000000 -2.00000000000000 0.200000000000000 -1.00000000000000 0.500000000000000
0.000000000000000E+000 1.00000000000000
1.00000000000000 0.500000000000000
2.00000000000000 0.200000000000000
3.00000000000000 0.100000000000000
4.00000000000000
5.882352941176471E-002
5.00000000000000 3.846153846153846E-002
x1 Ln(x)
-4.50000000000000 1.57872102169562 -3.50000000000000 -0.226196282498366 -2.50000000000000 0.253755465606773 -1.50000000000000 0.235346591310803 -0.500000000000000 0.843407429828903
0.500000000000000 0.843407429828903
1.50000000000000 0.235346591310803
2.50000000000000 0.253755465606773
3.50000000000000 -0.226196282498366
4.50000000000000 1.57872102169562
x1 Ih
-4.50000000000000 4.864253393665158E-002 -3.50000000000000 7.941176470588235E-002 -2.50000000000000 0.150000000000000 -1.50000000000000 0.350000000000000 -0.500000000000000 0.750000000000000
0.500000000000000 0.750000000000000
1.50000000000000 0.350000000000000
2.50000000000000 0.150000000000000
3.50000000000000 7.941176470588235E-002
4.50000000000000 4.864253393665158E-002
Grapher制图部分:
原函数图像:
f(x)
x 拉格朗日插值函数图像:
Ln(x)
x
分段线性插值函数图象:
Ih(x)
x原函数
五.数值结果分析:
○1.从拉格朗日插值函数图象与原函数图像的对比可看出:随着自变量|x︱的增大Ln(x)与f(x)总体上呈现出偏离越来越远的效果;
○2.从分段线性插值函数图象与原函数图像的对比可看出:二者较为近似,
拉格线性插值函数能较好的逼近原函数;
从以上两点可以看出,高次插值多项式Ln(x)近似的效果并不一定好,而通过分段线性插值多项式则能很好的避免高次插值的病态现象。
六.实验收获和体会:
收获:1.能熟练的运用FORTRAN编制原函数,拉格朗日插值和线性插值程序;
2.能够运用grapher将实验数据绘制成图。
体会:由于FORTRAN还处在学习阶段,导致编写程序花掉了较长时间;而且由于不会该程序的有格式输出,导致数据绘图阶段花费了更多的功夫。