数学实验--多项式插值计算及其收敛性实验
数学建模数学实验插值及案例

数学建模数学实验插值及案例在科学研究和工程实践中,数学建模扮演着至关重要的角色。
通过建立数学模型,我们可以对现实世界的现象进行模拟和预测。
其中,插值方法是一种重要的数学建模工具,用于估计在给定数据点之间的未知值。
本文将探讨插值方法的基础理论以及一个具体的数学实验案例。
插值方法是一种数学技术,通过在给定的数据点之间估计未知的值。
最常用的插值方法包括线性插值、多项式插值和样条插值等。
线性插值是最简单的插值方法,它将数据点之间的变化视为线性的,即变化率保持恒定。
多项式插值方法则通过构建一个多项式函数来逼近数据点的变化趋势。
样条插值则通过将数据点连接成平滑的曲线来进行插值。
本案例将利用多项式插值方法对房价进行预测。
我们收集了一组房屋价格数据,包括房屋的面积、房龄、位置等信息。
然后,我们使用多项式插值方法构建一个函数来描述房价与这些因素之间的关系。
通过调整多项式的阶数,我们可以控制模型的复杂性。
我们使用该模型来预测新的房价。
在本案例中,我们使用了200个样本数据进行训练,并使用另外100个数据点进行测试。
我们发现,通过增加多项式的阶数,模型的预测精度可以得到提高。
然而,当阶数增加到一定程度后,模型的性能改善不再明显。
我们还发现模型的预测结果对训练数据的分布非常敏感,对于分布偏离较大的新数据点,预测结果可能会出现较大误差。
通过本次数学实验,我们深入了解了插值方法在数学建模中的应用。
在实际问题中,插值方法可以帮助我们更好地理解数据的变化趋势和预测未知的值。
然而,插值方法也存在一定的局限性,如本实验中模型对训练数据分布的敏感性。
未来工作中,我们可以尝试采用其他更加复杂的模型,如神经网络、支持向量机等来提高预测精度。
我们还应充分考虑数据的分布特性,以提高模型的泛化能力。
插值方法是数学建模中的重要工具之一,它可以让我们更好地理解和预测数据的趋势。
通过本次数学实验,我们深入了解了多项式插值方法的工作原理和实现过程,并成功地将其应用于房价预测问题中。
实验四 插值法

实验四、插值法插值法是函数逼近的一种重要方法,它是数值积分、微分方程数值解等数值计算的基础与工具,其中多项式插值是最常用和最基本的方法。
拉格朗日插值多项式的优点是表达式简单明确,形式对称,便于记忆,它的缺点是如果想要增加插值节点,公式必须整个改变,这就增加了计算工作量。
而牛顿插值多项式对此做了改进,当增加一个节点时只需在原牛顿插值多项式基础上增加一项,此时原有的项无需改变,从而达到节省计算次数、节约存储单元、应用较少节点达到应有精度的目的。
一、实验目的1、理解插值的基本概念,掌握各种插值方法,包括拉格朗日插值和牛顿插值等,注意其不同特点;2、通过实验进一步理解并掌握各种插值的基本算法。
二、Matlab 命令和程序命令 poly :创建一个向量,其分量为一个多项式的系数,该多项式具有给定的根。
命令polyval:求多项式的值,命令 conv : 创建一个向量,其分量为一个多项式的系数,该多项式是另外两个多项式的积polyval(C,2)>> P=poly(2)P=1 -2Q=poly(3)Q=1 -3>> conv(P,Q)ans=1 -5 6>> polyval(P,2)ans=1、拉格朗日插值( 基于N+1个点 ,计算0(()()nn k k k L x f x l x ==∑)拉格朗日多项式)function [C,L]=lagran(X,Y)%input --X is a vector that contains a list of abscissas% Y is a vector that contains a list of ordinates%output--C is a matrix that contains the coefficient of the lagrane % interplatory polynomial% -- L is a matrix that contains the Lagrange coefficent polynomials w=length(X);n=w-1;L=zeros(w,w);%Form the Lagrange coefficient polynomialsfor k=1:n+1V=1;for j=1:n+1if k~=jV=conv(V,poly(X(j)))/(X(k)-X(j));endendL(k,:)=V;end%Determine the coefficiants of the Lagrange interpolating polynomial C=Y*L;2、牛顿插值function [C,D,Newton]=newpoly(X,Y,p)%Input -X is a vector that contains a list of abscissas% -Y is a vector that contains a list of ordinates% -p is the%Output -C is a vector that contains the coefficents of% the Newton interpolatory polynomia% -D is the divided-difference table% -Newton is the value of Newton interplatory polynomia in pn=length(X);D=zeros(n,n);D(:,1)=Y';%Use formula to form the divided-difference tablefor j=2:nfor k=j:nD(k,j)=(D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1));endend%Determine the coefficient fo the newton interpolating polynomialC=D(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)));m=length(C);C(m)=C(m)+D(k,k);End%Determine the value of the newton interpolating polynomial at pNewton=D(n,n);for k=(n-1):-1:1Newton=Newton*(p-X(k))+D(k,k);End三、实验任务1、已知函数表x 0.56160 0.56280 0.56401 0.56521iy 0.82741 0.82659 0.82577 0.82495i用二次拉格朗日插值多项式求5635x时的函数近似值。
第9节 多项式插值PPT课件

证 明 : f(n+ 1)()0
多项式插值误差
• 例:已 知 sin1,sin1,sin3
6 2 0.85
sin
42
32
分别利用 sin0.x8 的1次外 内推 插、2次 Lagrange 插值计算 sin 50 并估计误差。
数值逼近(Approximation)
• Approximation theory is concerned with how functions can best be approximated with simpler functions, and with quantitatively characterizing the errors introduced thereby.
0.2
0
-0.2
5
-0.4-5
2
1.5
1
0.5
0
-0.5
5
-5
0
4阶
0
10阶
注意:
上述插值 结果是正 确的多项 式插值结 果,而且 5 是唯一的 多项式插 值结果。 Rung现象 是多项式 插值本身 的缺陷而 非误差。
5
埃尔米特(Hermite)插值
在不少实际问题中,对插值不但要求在节点上函数值相等而且还要求 它的导数值也相等。
det xx10nn xnn
... ...
...
x0 x1
xn
1
1
i j
(xi
xj )
0
1
范德蒙矩阵的行列式的值为xi- xj 的连乘积,当 xi≠xj时,该 行列式的值不为零,即线性方程组有解,且存在唯一解
第六章 插值计算与插值多项式模型

ω 3 ( x) =
( x − x1 )( x − x 2 ) 1 = ( x − 1)( x − 3) ( x3 − x1 )( x3 − x 2 ) 8
Ln-1(x)模型为 当X=4℃时
拉格朗日多项式形式简单、对称,便于计算机编程计算;但计算工作量较大,而且 当全部点作插值时,舍人误差也大,多项式次数较高,曲线的波动较大,一般计算时,取 距插值点j较近的几个点进行插值计算。
拉氏插值模型的余项估计
用拉氏插值多项式模型表示函数f(x)时,引起的误差由 Rn-1(x) = f(x) - Ln-1(x)给出。 或写成如下形式
线 性 插 值
线性插值是最简单的插值方法,设已知函数y=f(x),在x0、x1处的值分别 为y0,y1,则过点(x0,y0),(xl,y1)的连线方程为
y1 − y0 y = y0 + ( x1 − x0 ) x1 − x0
[x。,x1]内任一点的插值为
y1 − y0 y = y0 + ( x − x0 ) x1 − x0
∆f 0 ∆2 f 0 y = y0 + ( x − x0 ) + ( x − x0 )( x − x1 ) h 2h 2
例:6.2某流体实测温度与粘度的关系如下表所示;试求出t=25℃时的粘度值。 解:用牛顿插值计算首先求一阶差分,二阶差分…并列入表中:
T℃ 20 22 24 26 28 30 μ 1.0051 0.9579 0.91442 0.8737 0.8360 0.8007 △ -0.0472 -0.0437 -0.0405 -0.0337 -0.0353 △2 0.0035 0.0032 0.0028 0.0024 △3 -0.0003 -0.0004 -0.004
插值数值实验报告(3篇)

第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
数值分析实验报告

%消元过程
fori=k+1:n
m=A(i,k)/A(k,k);
forj=k+1:n
A(i,j)=A(i,j)-m*A(k,j);
end
b(i)=b(i)-m*b(k);
end
det=det*A(k,k);
end
det=det*A(n,n);
%回代过程
ifabs(A(n,n))<1e-10
flag='failure';return;
*x=(x0,x1….,xn),插值节点
*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值
*t求插值函数Pn(x)在t处的函数值
*返回值 插值函数Pn(x)在t处的函数值
*/
procedureNewton
forj=0to n
d1jyj;
endfor
forj=1to n
fori=j to n
[n,m]=size(A);nb=length(b)
%当方程组行与列的维数不相等时,停止计算,并输出出错信息
ifn~=m
error('The row and columns of matrix A must beepual!');
return;
end
%当方程组与右端项的维数不匹配时,停止计算,并输出错误信息
clear
fprintf('gauss-seidel迭代法')
x1_(1)=0;
x2_(1)=0;
x3_(1)=0;
fori=1:9
x1_(i+1)=7.2+0.1*x2_(i)+0.2*x3_(i);
实验三 最佳平方逼近多项式的收敛性word资料8页
实验三 最佳平方逼近多项式的收敛性一、 实验目的若已知给定区间[a,b]上的连续函数f (x ),寻找一个简单、易于计算的函数P (x )来代替f (x )使用,即用P (x )去近似f (x ),这就是函数逼近所要研究的问题。
而逼近的方法很多,收敛速度也各有差异,本实验主要讨论最佳平方逼近,分别对Legendre 以及Chebychev 方法讨论其n 次截断多项式的问题,观察其收敛性,学习并掌握最佳平方逼近多项式的MATLAB 实验及精度比较。
二、 实验原理由教材定义有:对于给定的函数],[)(b a C x f ∈,如果存在使得则称S *(x )是f (x )在集合01{(),(),,()}n Span x x x ϕϕϕL 中的最佳平方逼近函数。
显然,求最佳平方逼近函数)()(0**x a x S j nj j ϕ⋅=∑=的问题可归结为求它的系数**1*0,,,n a a a Λ,使多元函数取得极小值,也即点(**1*0,,,n a a a Λ)是I (a 0, …,a n )的极点。
由于I (a 0, a 1, …,a n )是关于a 0, a 1, …,a n 的二次函数,利用多元函数取得极值的必要条件,0=∂∂ka I (k = 0, 1, 2, …, n )即得方程组 如采用函数内积记号那么,方程组可以简写为0(,)(,)(0,1,2,,)n k jj k j a f k n ϕϕϕ===∑L (1)这是一个包含n + 1个未知元a 0, a 1, …, a n 的n + 1阶线性代数方程组,写成矩阵形式为0001000101111101(,)(,)(,)(,)(,)(,)(,)(,)(,)(,)(,)(,)n n n n n n n n a f a f a f ϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕ⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭L LM M L L L L L ………(2) 此方程组叫做求a j (j = 0, 1, 2, …, n )的法方程组。
多项式插值计算方法
多项式插值计算方法引言:在数学和计算机科学中,插值是一种常见的数值计算方法,用于通过已知的数据点来估计未知的数据点。
多项式插值是插值方法中的一种,通过构造一个多项式函数来逼近数据点,从而实现插值的目的。
本文将介绍多项式插值的基本概念、计算方法和应用领域。
一、多项式插值的基本概念多项式插值是指通过已知的n个数据点(x1, y1), (x2, y2), ..., (xn, yn),构造一个n次多项式函数P(x)来逼近这些数据点。
通过将P(x)代入已知的数据点,可以满足P(xi) = yi,即多项式函数经过已知数据点。
二、多项式插值的计算方法1. 拉格朗日插值法拉格朗日插值法是一种常用的多项式插值计算方法。
通过构造一个满足已知数据点的n次多项式函数P(x),可以使用拉格朗日插值公式来计算多项式的系数。
具体步骤如下:- 构造插值多项式P(x) = L1(x)y1 + L2(x)y2 + ... + Ln(x)yn,其中Li(x)为拉格朗日基函数。
- 拉格朗日基函数的计算公式为Li(x) = Π(j=1 to n, j ≠ i)(x-xj)/(xi-xj),即除了第i个数据点外,其他数据点的插值基函数的乘积。
- 将已知数据点代入插值多项式,可以得到相应的系数,进而得到插值多项式P(x)。
2. 牛顿插值法牛顿插值法是另一种常用的多项式插值计算方法。
通过构造一个满足已知数据点的n次多项式函数P(x),可以使用牛顿插值公式来计算多项式的系数。
具体步骤如下:- 构造插值多项式P(x) = c0 + c1(x-x0) + c2(x-x0)(x-x1) + ... + cn(x-x0)(x-x1)...(x-xn-1),其中ci为差商。
- 差商的计算公式为ci = f[x0, x1, ..., xi]/(xi-x0)(xi-x1)...(xi-xi-1),即已知数据点的函数值的差商。
- 使用差商递推公式可以计算出所有的差商,进而得到插值多项式P(x)。
数值分析实验(四)插值法实验
插值法实验班别:学生姓名:学号:一、实验目的1.通过进行不同类型的插值,比较各种插值的效果,明确各种插值的优越性;2.通过比较不同次数的多项式拟合效果,了解多项式拟合的原理;3.利用matlab编程,学会matlab命令;4.掌握拉格朗日插值法和牛顿插值法;二、实验题目(1) 调用拉格朗日插值程序求拉格朗日插值4次多项式在0.45 0.5 0.60.8上的值,并画出原函数与拉格朗日插值4次多项式的图像进行比较。
(2) 调用牛顿插值程序求牛顿插值4次多项式,并求其在0.45 0.5 0.60.8上的值。
(3)选做:调用分段线性插值程序求其在0.45 0.5 0.6 0.8上的值,并画出原函数与分段线性插值多项式的图像进行比较。
三、实验原理1. 拉格朗日插值2. 牛顿插值的原理四、实验内容与结果1. 拉格朗日插值法(1)相关程序function yy=mlagr(x,y,xx)%用途:拉格朗日插值法求解%格式:yy=mlagr(x,y,xx), x是节点向量, y是节点对应的函%数值向量, xx是插值点(可以是多个), yp返回插值结果n=length(x); m=length(xx);yy=zeros(1,m); c1=ones(n-1,1); c2=ones(1,m);for i=1:nxp=x([1:i-1,i+1:n]);yy=yy+y(i)*prod((c1*xx-xp'*c2)./(x(i)-xp'*c2));End(原函数与拉格朗日插值4次多项式的图像进行比较的程序)x=[0.4 0.55 0.65 0.8 0.9];y=[0.41075 0.57815 0.69675 0.888111.02652];plot(x,y,'+');x=0.4:0.01:0.6;y0=sin(x); plot(x,y0,'*')(2)实验结果(3)>> x=[0.4 0.55 0.65 0.8 0.9];y=[0.41075 0.57815 0.69675 0.88811 1.02652];xx=[0.45 0.5 0.6 0.8]; yy=mlagr(x,y,xx)yy =0.4653 0.5211 0.6367 0.8881(原函数与拉格朗日插值4次多项式的图像进行比较)x=[0.4 0.55 0.65 0.8 0.9];y=[0.41075 0.57815 0.69675 0.88811 1.02652];plot(x,y,'+');x=0.4:0.01:0.6;y0=sin(x); plot(x,y0,'*')0.40.450.50.550.60.650.70.750.80.850.90.40.50.60.70.80.911.1(3)实验结果分析2. 牛顿插值法相关程序(1)相关程序%程序5.2--mnewp.mfunction yy=mnewp(x,y,xx)%用途:牛顿差值%格式:yy=mnewp(x,y,xx), x 是节点向量, y 是节点对应的函%数值向量, xx 是插值点(可以是多个), yy 返回插值结果n=length(x);syms t ;yy=y(1);y1=0; lx=1;for i=1:n-1for j=i+1:ny1(j)=(y(j-1)-y(j))/(x(j-i)-x(j)); %计算差商endc(i)=y1(i+1); lx=lx*(t-x(i));yy=yy+c(i)*lx; %计算牛顿插值多项式的值y=y1;endif nargin==3yy=subs(yy,'t',xx);elseyy=collect(yy);yy=vpa(yy,6);end(2)实验结果x=[0.4 0.55 0.65 0.8 0.9];y=[0.41075 0.57815 0.69675 0.88811 1.02652];xx=[0.45 0.5 0.6 0.8]; yy=mnewp(x,y,xx)yy =0.4653 0.5211 0.6367 0.8881(3)实验结果分析。
实验一函数插值方法
实验⼀函数插值⽅法《数值分析》课程设计实验报告实验⼀函数插值⽅法⼀、问题提出对于给定的⼀元函数()y f x =的n+1个节点值(),0,1,,j j y f x j n == 。
试⽤Lagrange 公式求其插值多项式或分段⼆次Lagrange 插值多项式。
数据如下:(1)求五次Lagrange 多项式5L ()x ,和分段三次插值多项式,计算(0.596)f ,(0.99)f 的值。
(提⽰:结果为(0.596)0.625732f ≈, (0.99) 1.05423f ≈)(2)试构造Lagrange 多项式6L ()x ,计算的(1.8)f ,(6.15)f 值。
(提⽰:结果为(1.8)0.164762f ≈,(6.15)0.001266f ≈)⼆、实验步骤1、利⽤Lagrange 插值公式00,()n nin k k i i k k ix x L x y x x ==≠??-= ?-??∑∏编写出插值多项式程序; function [A1,LN,L1,B1]=lagrange(X,Y) m=length(X); LN=ones(m,m); for k=1: m x1=1; for i=1:m ifk~=ix1=conv(x1,poly(X(i)))/(X(k)-X(i));endL1(k,:)=x1; B1(k,:)=poly2sym (x1)endA1=Y*L1;LN=Y*B1在主显⽰区,输⼊五次Lagrange多项式L()5x程序:>> X=[0.4 0.55 0.65 0.80 0.95 1.05];>> Y=[0.41075 0.57815 0.69675 0.90 1.00 1.25382];>> [A1,LN,L1,B1]=lagrange(X,Y)>> plot(X,A1);>> F=poly2sym(A1)运⾏后,输出五次Lagrange多项式L()5x的结果:A1 =121.6264 -422.7503 572.5667 -377.2549 121.9718 -15.0845F =(2139673480305281*x^5)/17592186044416 - (1859275536318005*x^4)/4398046511104 + (9836621836743*x^3)/17179869184 - (414796119737013*x^2)/1099511627776 + (2145751274873259*x)/17592186044416 - 1061478972867847/70368744177664拉格朗⽇插值多项式5()L x的图如下:2、给出插值多项式或分段三次插值多项式的表达式;function [f,ff] = Hermite3(x,y,y1)f = 0.0;if(length(x) == length(y))if(length(y) == length(y1))n = length(x);elsedisp('y和y的导数的维数不相等');return;endelsedisp('x和y的维数不相等! ');return;endfor i=1:nh = 1.0;a = 0.0;for j=1:nif( j ~= i)h = h*(t-x(j))^2/((x(i)-x(j))^2);a = a + 1/(x(i)-x(j));endendf = f + h*((x(i)-t)*(2*a*y(i)-y1(i))+y(i));endff = subs(f,'t');x的程序:在主显⽰区,输⼊分段三次艾尔⽶特插值多项式L()5>> x=[0.4 0.55 0.65 0.80 0.95 1.05];>> y=[0.41075 0.57815 0.69675 0.90 1.00 1.25382];>> y1=[2.3440 0.9032 1.4329 0.9903 0.9170 5.1439];>> [f,ff] = Hermite3(x,y,y1);>> ffx的输出结果:运⾏后,分段三次艾尔⽶特插值多项式L()5ff =(6400000000*(t - 4/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t -19/20)^2*(t - 21/20)^2*((2240245151070481*t)/140737488355328 - 52393133567890089/8796093022208000))/184041 -(16000000*((6348013345609171*t)/140737488355328 - 85523418631741336287/1759218604441600000)*(t - 2/5)^2*(t -4/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t - 19/20)^2)/169 + (16000000*((4105617466549689*t)/281474976710656 -5238387122042657959/703687441776640000)*(t - 2/5)^2*(t - 4/5)^2*(t - 13/20)^2*(t - 19/20)^2*(t - 21/20)^2)/9 - (256000000* ((35097*t)/10000 - 46347/12500)*(t - 2/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t - 19/20)^2*(t - 21/20)^2)/81 - (400000000* ((13147*t)/20000 - 449611/400000)*(t - 2/5)^2*(t - 4/5)^2*(t - 11/20)^2*(t - 19/20)^2*(t - 21/20)^2)/81 - (10000000000* ((84913*t)/11000 - 1833347/220000)*(t - 2/5)^2*(t - 4/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t - 21/20)^2)/9801x的图如下:分段三次艾尔⽶特插值多项式L()53、根据节点选取原则,对问题(2)⽤三点插值或⼆点插值,其结果如何;>> X=[1 2 3 4 5 6 7];>> Y=[0.368 0.135 0.050 0.018 0.007 0.002 0.001];>> [A1,LN,L1,B1]=lagrange(X,Y)>> plot(X,A1);>> F=poly2sym(A1)运⾏后,输出结果的Lagrange 多项式L ()6x 的结果:A1 =0.0001 -0.0016 0.0186 -0.1175 0.4419 -0.9683 0.9950F=(4304240283865561*x^6)/73786976294838206464- (7417128346304051*x^5)/4611686018427387904 +(223*x^4)/12000- (2821*x^3)/24000+(994976512675275*x^2)/2251799813685248-(19367*x)/20000 + 199/200Lagrange 多项式L ()6x 的图如下:4、对此插值问题⽤Newton 插值多项式其结果如何。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 Lab02.多项式插值计算及其收敛性实验 【实验目的和要求】 1.使学生深入理解Langrage插值法和Newton插值法以两者之间的异同,能用Matlab语言编写按Langrage插值法和Newton插值法计算插值的程序; 2.用所编写的程序进行插值计算、验证Runge现象、分析插值多项式的收敛性; 3.使学生深入理解教材介绍的两种分段低次插值法,熟悉掌握函数interp1的使用; 4.使用函数interp1用不同方法进行插值计算,对教材介绍的几种分段低次插值法进行分析比较。
【实验内容】 1.根据Matlab语言特点,描述Langrage插值法和Newton插值法。 2.用Matlab语言编写按Langrage插值法和Newton插值法计算插值的程序。
3.对]5,5[ ,112xxy,分别取3个,5个、9个、11个等距节点,用所编写的程序进行插值计算并画图,以验证Runge现象、分析插值多项式的收敛性。
4.用函数interp1,对]5,5[ ,112xxy,用n=11个节点(等分)作分段线性插值、分段Hermit插值和三次样条插值,用m=101个插值点(等分)作图,比较结果。
【实验仪器与软件】 1.CPU主频在1GHz以上,内存在128Mb以上的PC; 2.Matlab 6.0及以上版本。
实验讲评: 2
实验成绩: 评阅教师: 2012 年5 月 1 日
Lab02.多项式插值计算及其收敛性实验 一、算法描述 Langrange算法描述: 1) 若1n次多项式()(1,...,)jlxjn在n个节点12...nxxx上满足条件
1 k=j()0 kjjklx
(,1,...)jkn (1)
就称这n个1n次多项式1(),...()nlxlx为节点1,...,nxx上的差值基函数。 2) 差值基函数为
111111()...()()...()()()...()()...()kknkkkkkkknxxxxxxxxlxxxxxxxxx
(1,...,)kn
显然它满足条件(1)。于是,满足条件(1)的差值多项式()nLx可表示为 1()()nnkkkLxylx ()nLx就称为拉格朗日Lagrange差值多项式。
Newton插值多项式算法描述: Newton插值多项式的表达式如下: )())(()()(110010nnnxxxxxxcxxccxN 其中每一项的系数ci的表达式如下:
01102110),,,(),,,(),,,(xxxxxfxxxfxxxfciiiii
根据ic以上公式,计算的步骤如下: (1) 计算01(),(),,()nfxfxfx (2) 计算011(,),,(,)nnfxxfxx (3) …… (4) 计算01111(,,,),(,,,)nnnfxxxfxxx (5) 计算011(,,,,)nnfxxxx 3
二、算法程序 编写lagrange函数如下 function y=lagrange(x0,y0,x) n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end 编写Newton插值法如下 function f = Newton(x,y,x0) syms t; if(length(x) == length(y)) n = length(x); c(1:n) = 0; else display('你所输入的x与y的维数不相等!'); return end f = y(1); y1 = 0; l = 1; for(i=1:n-1) for(j=i+1:n) y1(j) = (y(j)-y(i))/(x(j)-x(i)); end c(i) = y1(i+1); l = l*(t-x(i)); f = f + c(i)*l; simplify(f); y = y1; if(i==n-1) if(nargin == 3) 4
f = subs(f,'t',x0); else f = collect(f); f = vpa(f, 6); end end end
三、插值计算 对]5,5[ ,112xxy,分别取3个,5个、9个、11个等距节点,用所编写的程序进行插值计算并画图,以验证Runge现象、分析插值多项式的收敛性。 Langrange算法: 1. 取3个等距节点进行差值计算: 编写m函数如下: x0=linspace(-5,5,3); y0=1./(1+x0.^2); x=-5:0.1:5; y=1./(1+x.^2); y1=lagrange(x0,y0,x); plot(x,y,'r',x,y1,'b')
2. 取5个等距节点进行差值计算 x0=linspace(-5,5,5); y0=1./(1+x0.^2); x=-5:0.1:5; 5
y=1./(1+x.^2); y1=lagrange(x0,y0,x); plot(x,y,'r',x,y1,'b');
3. 取9个等距节点进行插值计算 x0=linspace(-5,5,9); y0=1./(1+x0.^2); x=-5:0.1:5; y=1./(1+x.^2); y1=lagrange(x0,y0,x); plot(x,y,'r',x,y1,'b')
4. 取11个等距节点进行差值计算 x0=linspace(-5,5,11); y0=1./(1+x0.^2); x=-5:0.1:5; 6
y=1./(1+x.^2); y1=lagrange(x0,y0,x); plot(x,y,'r',x,y1,'b');
从图上看,在区间[-1,1]上,插值的误差比较小,在两端出现明显的振荡现象,即:Runge现象 Newton插值法: (1) 取3个等距节点进行差值计算: 编写m函数如下: x0=linspace(-5,5,3); y0=1./(1+x0.^2); x=-5:0.1:5; y=1./(1+x.^2); y1=Newton(x0,y0,x); plot(x,y,'r',x,y1,'b') (2) 取5个等距节点进行差值计算
x0=linspace(-5,5,5); y0=1./(1+x0.^2); x=-5:0.1:5; y=1./(1+x.^2); y1=Newton(x0,y0,x); plot(x,y,'r',x,y1,'b'); 7
(3) 取9个等距节点进行插值计算 x0=linspace(-5,5,9); y0=1./(1+x0.^2); x=-5:0.1:5; y=1./(1+x.^2); y1=Newton(x0,y0,x); plot(x,y,'r',x,y1,'b'); 8
(4) 取11个等距节点进行差值计算 x0=linspace(-5,5,11); y0=1./(1+x0.^2); x=-5:0.1:5; y=1./(1+x.^2); y1=Newton(x0,y0,x); plot(x,y,'r',x,y1,'b'); 9
虽然牛顿迭代做了改进,但从图上看,在区间[-1,1]上,插值的误差比较小,在两端还是存在明显的振荡现象(Runge现象)。
4、用函数interp1,对]5,5[ ,112xxy,用n=11个节点(等分)作分段线性插值、分段Hermit插值和三次样条插值,用m=101个插值点(等分)作图,比较结果。 解:编写分段线性插值的m文件分别如下: a) 用n=11个节点(等分)作分段线性插值 m函数1: function y = fenduan_linear(x0,y0,m,n) %************************************** %x0------------------------横坐标 %y0------------------------纵坐标 %m-------------------------x的值 %n-------------------------迭代的次数%************************************** for i = 1:n-1 if (m >= x0(i)) &(m <= x0(i+1)) y = (m - x0(i+1))/(x0(i) - x0(i+1))*y0(i) + ( m- x0(i))/(x0(i+1) - x0(i))*y0(i+1); end end m函数2: function y=fun_12(x) y = 1./(1+x.^2); end m函数3: function linshi11() n = input('输入=:'); x0 = linspace( -5,5,n); for x = -5:0.01:5 y = fenduan_linear(x0,fun_12(x0),x,n); hold on; plot(x,y,'g'); plot(x,fun_12(x),'b'); end