数值分析实验报告Hermite插值法、Runge现象,比较Language插值、分段线性插值、分段三次Hermie插值

合集下载

数值分析 插值多项式实验报告

数值分析 插值多项式实验报告

三、实验内容及要求:
1.已知数据如下:
xi
f ( xi )
0 0+学号
0.2 0.04+学号
0.4 0.16+学号
0.6 0.36+学号
0.8 0.64+学号
1.0 1+学号
注学号取后面两位数,如 122320101,学号=1。 (1)用 MATLAB 等语言编写按 Lagrange 插值法和 Newton 插值法计算插值的程序,对以上数据进行插值; (2)利用 MATLAB 在第一个图中画出离散数据及插值函数曲线。 2.给定函数 f ( x) =
6
end end b=1; for k=1:9 if k~=i b=b*(x0(i)-x0(k)); end end A(i)=expand(a/b); end L=0; for p=1:9 L=L+y0(p)*A(p); end L L=-745631513600000000/6545742033698309*x^8+3419841600000000000/65457420 33698309*x^7-6621592639456000000/6545742033698309*x^6+701929935000000 0000/6545742033698309*x^5-4393156359065510000/6545742033698309*x^4+16 03771386328125000/6545742033698309*x^3-22515465371294825/503518617976 793*x^2+7750485791015625/13091484067396618*x+1 x1=0:0.0001:1; y1=1./(1+25.*x1.^2); y2=-745631513600000000/6545742033698309.*x1.^8+3419841600000000000/65 45742033698309.*x1.^7-6621592639456000000/6545742033698309.*x1.^6+701 9299350000000000/6545742033698309.*x1.^5-4393156359065510000/65457420 33698309.*x1.^4+1603771386328125000/6545742033698309.*x1.^3-225154653 71294825/503518617976793.*x1.^2+7750485791015625/13091484067396618.*x 1+1; plot(x1,y1,'--r') hold on plot(x1,y2,'k') (4)取十一个节点 clear clc x0=0:0.1:1; y0=1./(1+25.*x0.^2); syms x for i=1:11 a=1; for j=1:11 if j~=i a=expand(a*(x-x0(j))); end end b=1; for k=1:11

埃尔米特插值

埃尔米特插值

0,则可以设:
0(x) (x 1)(ax b)
将:
0 (0) 1
0
(0)
0
带入0(x) (x 1)(ax b),则:
a 1 b 1
则:0 (x) 1 x2
同理: 1( x)为二次项式
又:
1(0) 0
1
(0)
0
则:x 0为1(x)的二重根
则:1(x) cx2 又:1(1) 1
xi
01
f(xi) 0
1
f (xi )
0
1
解: 本题利用承袭性的思想 首先利用:
xi
0
1
f(xi) 0
1
求出: L1(x)
L1 ( x)
x x1 x0 x1
y0
x x0 x1 x0
y1
x
增加:
xi 0
yi 0
求:H2 ( x), 其中H2 ( x)满足:
xi
01
f(xi) 0
1
f (xi )
则:c 1
则:1(x) x2 同理:0 (x) x(1 x)
插值余项为:
R(x)
f (x) H2(x)
f
(
3!
)
(
x
x0
)2
(
x
x1 )
仿Lagrange 或 Newton 证明
情形2. 已知: 4个条件
xi
x0 x1
yi = f(xi) y0 y1
yi f (xi ) y0 y1
一、 Hermite插值多项式的定义
插值条件中除函数值外, 还有导数值(回顾 Taylor展开式, 是某点的导数值), 如
已知: 2n+2个条件

Hermite插值方法

Hermite插值方法

数值分析实验报告五一、实验目的理解Hermite插值方法,掌握Hermite插值算法设计二、实验内容使用vc++编程,实现该方法,即Hermite插值法三、实验步骤#include <iostream.h>double herm(double x0,double x1,double y0,double y1,double h0,double g0,double g1,double x) {double alp0,alp1,bta0,bta1,t;double s;t=h0*h0;alp0=(x-x1)*(x-x1)*(h0+2*(x-x0))/t/h0;alp1=(x-x0)*(x-x0)*(h0-2*(x-x1))/t/h0;bta0=(x-x0)*(x-x1)*(x-x1)/t;bta1=(x-x1)*(x-x0)*(x-x0)/t;s=y0*alp0+y1*alp1+g0*bta0+g1*bta1;return(s);}void main(){int n=7;double p0;double pn; double aa[8],bb[8],s=0;double xx[8]={0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9};double yy[8]={0.4794,0.6442,0.7833,0.8912,0.9636,0.9975,0.9917,0.9463};double g[8];int i;double a[8],c[8],h[8];cout<<"Please input p0 and pn"<<endl;cin>>p0;cin>>pn;for(i=0;i<=n-1;i++){h[i]=xx[i+1]-xx[i];cout<<"h["<<i<<"]="<<h[i]<<endl;}c[0]=1;g[0]=3*(yy[1]-yy[0])/h[0]-p0*h[0]/2;for( i=1;i<=n-1;i++){a[i]=h[i]/(h[i]+h[i-1]);c[i]=1-a[i];}for(i=1;i<n;i++){cout<<"a["<<i<<"]="<<a[i]<<endl;cout<<"c["<<i<<"]="<<c[i]<<endl;}for( i=1;i<=n-1;i++){g[i]=3*(c[i]*(yy[i+1]-yy[i])/h[i]+a[i]*(yy[i]-yy[i-1])/h[i-1]);}a[n]=1;g[n]=3*(yy[n]-yy[n-1])/h[n-1]+pn*h[n-1]/2;for(i=0;i<=n;i++)cout<<"g["<<i<<"]="<<g[i]<<endl;aa[0]=2;bb[0]=c[0]/aa[0];g[0]=g[0]/aa[0];for(i=1;i<=n-1;i++){aa[i]=2-a[i]*bb[i-1];bb[i]=c[i]/aa[i];g[i]=(g[i]-a[i]*g[i-1])/aa[i];}aa[n]=2-a[n]*bb[n-1];g[n]=(g[n]-a[n]*g[n-1])/aa[n];for(i=n-1;i>=0;i--){g[i]=g[i]-bb[i]*g[i+1];}cout<<endl;for(i=0;i<=n;i++)cout<<"g["<<i<<"]="<<g[i]<<endl;double ss;double c0,c1,d0,d1,g0,g1,h1;double x0;cout<<"Please input interpolation point x0:"<<endl;cin>>x0;if(x0>=0.5 && x0<0.7){c0=xx[0];c1=xx[1];d0=yy[0];d1=yy[1];h1=h[0];g0=g[0];g1=g[1];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}else if(x0>=0.7 && x0<0.9){c0=xx[1];c1=xx[2];d0=yy[1];d1=yy[2];h1=h[1];g0=g[1];g1=g[2];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}else if(x0>=0.9 && x0<=1.1){c0=xx[2];c1=xx[3];d0=yy[2];d1=yy[3];h1=h[2];g0=g[2];g1=g[3];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}else if(x0>=1.1 && x0<=1.3){c0=xx[3];c1=xx[4];d0=yy[3];d1=yy[4];h1=h[3];g0=g[3];g1=g[4];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}else if(x0>=1.3 && x0<=1.5){c0=xx[4];c1=xx[5];d0=yy[4];d1=yy[5];h1=h[4];g0=g[4];g1=g[5];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}else if(x0>=1.5 && x0<=1.7){c0=xx[5];c1=xx[6];d0=yy[5];d1=yy[6];h1=h[5];g0=g[5];g1=g[6];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}else if(x0>=1.7 && x0<=1.9){c0=xx[6];c1=xx[7];d0=yy[6];d1=yy[7];h1=h[6];g0=g[6];g1=g[7];ss=herm(c0,c1,d0,d1,h1,g0,g1,x0);cout<<ss<<endl;}elsecout<<"The data error,please input again!"<<endl;}四、运行结果。

埃尔米特(Hermite)插值

埃尔米特(Hermite)插值

实验二埃尔米特(Hermite)插值一、实验目的:1.掌握埃尔米特插值算法原理;2.使用C语言编程实现埃尔米特插值算法。

二、实验准备:阅读《数值分析》2.4节二、实验要求:某人从甲地开车去乙地,每隔一段时间对行车距离和速率进行一次采样,得到在n+1 个采样时刻点t i 的里程s i和速率v i(i=0, 1, ..., n)。

要求编程构造埃尔米特插值多项式H2n+1(t),满足H2n+1(t i)=s i,H'2n+1(t i)=v i,对所有i=0, 1, ..., n成立,并据此计算m个给定时刻的里程和速率。

函数接口定义:void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] );其中N为采样点个数(注意这个N不是公式中的最大下标n,而是等于n+1),采样时刻点t i、里程s i、速率v i分别通过t、s、v传入;m是需要估算的给定时刻的个数,ht传入给定的时刻点,相应计算出的里程和速率应分别存储在hs和hv中。

裁判程序如下:裁判输入数据:20.0 1.00.0 1.00.0 0.050.0 0.2 0.5 0.8 1.030.0 0.5 1.0100.0 170.0 200.030.0 150.0 0.050.0 0.25 0.5 0.75 1.050.0 1.0 2.0 3.0 4.00.0 60.0 160.0 260.0 300.05.0 70.0 100.0 120.0 20.0100.5 1.0 1.5 2.0 2.5 3.0 3.5 3.8 3.95 4.0标准输出数据:0.0000 0.1040 0.5000 0.8960 1.00000.0000 0.9600 1.5000 0.9600 0.0000100.0000 127.9297 170.0000 195.9766 200.000030.0000 165.4688 150.0000 52.9688 0.000030.2222 60.0000 105.9303 160.0000 206.3438 260.0000 307.9764 305.7687 299.9796 300.000062.6024 70.0000 109.0488 100.0000 92.9745 120.0000 41.2374 -44.8421 -16.2783 20.0000#include<stdio.h>#define MAXN 5 /* 最大采样点个数 */#define MAXM 10 /* 最大估算点个数 */void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] ){double l[10],p[10],h1[10],h2[10],x,ll[10],pp[10];int kk;for(kk=0;kk<m;kk++){x=ht[kk];hs[kk]=0;hv[kk]=0;int i;for(i=0;i<N;i++){l[i]=1;ll[i]=1;int j;for(j=0;j<N;j++){if(i!=j){l[i]=l[i]*(x-t[j])/(t[i]-t[j]);}}p[i]=0;pp[i]=0;int k;for(k=0;k<N;k++){if(i!=k){p[i]=p[i]+l[i]/(x-t[k]);pp[i]=pp[i]+ll[i]/(t[i]-t[k]);}}h1[i]=(1-2*pp[i]*(x-t[i]))*l[i]*l[i];h2[i]=(x-t[i])*l[i]*l[i];hs[kk]=hs[kk]+s[i]*h1[i]+v[i]*h2[i];int kkk;for(kkk=0;kkk<N;kkk++){if(x==t[kkk])break;}if(x==t[kkk])hv[kk]=v[kkk];elsehv[kk]=hv[kk]+s[i]*(2*p[i]*l[i]-4*l[i]*p[i]*(x-t[i])*pp[i]-2*pp[i]*l[ i]*l[i])+v[i]*(l[i]*l[i]+2*l[i]*p[i]*(x-t[i]));}}}int main(){int N, m;double t[MAXN], s[MAXN], v[MAXN]; /* 用于构造的数据 */double ht[MAXM], hs[MAXM], hv[MAXM]; /* 用估算的数据 */int i;while ( scanf("%d", &N) != EOF ) {for ( i=0; i<N; i++ )scanf("%lf", &t[i]);for ( i=0; i<N; i++ )scanf("%lf", &s[i]);for ( i=0; i<N; i++ )scanf("%lf", &v[i]);scanf("%d", &m);for ( i=0; i<m; i++ )scanf("%lf", &ht[i]);Hermite_Interpolation( N, t, s, v, m, ht, hs, hv );for ( i=0; i<m; i++ )printf("%.4lf ", hs[i]);printf("\n");for ( i=0; i<m; i++ )printf("%.4lf ", hv[i]);printf("\n\n");}return 0; }。

数值分析Runge现象计算实验

数值分析Runge现象计算实验

数值分析实验报告(02)一、实验目的通过上机绘制Runge 函数图像,理解高次插值的病态性质。

二、实验内容在区间[-1,1]上分别取n=10,n=20用两组等距节点对龙格(Runge)函数21()125f x x =+作多项式插值,对每个n 值分别画出()f x 和插值函数的图形。

三、编程思路(相关背景知识、算法步骤、流程图、伪代码)四、程序代码(Matlab 或C 语言的程序代码)function yt=Untitled8(x,y,xt)%UNTITLED5 ´Ë´¦ÏÔʾÓйش˺¯ÊýµÄÕªÒª% ´Ë´¦ÏÔʾÏêϸ˵Ã÷n=length(x);ny=length(y);if n~=nyerror('²åÖµ½ÚµãxÓ뺯ÊýÖµy²»Ò»ÖÂ');endm=length(xt);yt=zeros(1,m);for k=1:nlk=ones(1,m);for j=1:nif j~=klk=lk.*(xt-x(j))/(x(k)-x(j));endend ;yt=yt+y(k)*lk;endn=input('n=');x=linspace(-1,1,n);y=1./(1+25.*x.^2);xf=linspace(-1,1,100);yf=1./(1+25.*xf.^2)xl=xf;yl=Untitled8(x,y,xf);plot(xf,yf,'-b',xl,yl,'-r')五、数值结果及分析(数值运行结果及对结果的分析)当n=10时当n=20六、实验体会(计算中出现的问题,解决方法,实验体会)出现符号错误,代码函数变量不明重新输入,查询错误,找到并改正编码需要认真仔细,一定要头脑清晰,避免出现一些低级错误。

hermite插值报告

hermite插值报告

Hermite 插值实验的目的及意义:分段线性插值多项式S(x)在差值区间[a,b]上只能保证连续性,而不光滑。

要想得到在插值区间上光滑的分段线性插值多项式,采用Hermite 插值。

(带有导数的插值多项式)。

如果已知函数y=f(x)在节点a=x0<x1<…<xn=b 处的函数值和导数值:()()n i x f y x f y i i i i ,...,2,1,0,'',===则在小区间],[1i i x x -上有四个插值条件:()11--=i i x f y , ()i i x f y =()11''--=i i x f y ,()i i x f y ''=,故能构造一个三次多项式()x H i ,并称为三次Hermite 插值多项式。

这时在整个[a,b]上可以用分段三次Hermite 插值多项式来逼近f(x).()()()()10121,21,[,],[]......,[,]n n n H x x x x H x x x x H x H x x x x -∈⎧⎪∈⎪=⎨⎪⎪∈⎩ 数学公式:()()2211133[2]()[2()]()i i i i i i i i i iih x x x x h x x x x H x y y h h ---+-----=++2211122()()()()''i i i i i i iix x x x x x x x y y h h -------+算法描述:Step1: 输入未知数X 及ii i y y x ',,其中i=0,1,…,n ;Step2: For i=0,1,…,n 对于指定X,判断X 是否满足条件1i i x X x -〈〈; Step3:如果满足计算()()2211133[2]()[2()]()i i i i i i i i i iih x x x x h x x x x H x y y h h ---+-----=++2211122()()()()''i i i i i i iix x x x x x x x y y h h -------+,如果不满足不执行循环。

数值分析实验报告--实验2--插值法

数值分析实验报告--实验2--插值法

1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。

显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。

我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。

龙格(Runge )给出一个例子是极著名并富有启发性的。

设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。

实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。

(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。

(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。

1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。

1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。

Matlab 脚本文件为Experiment2_1_1fx.m 。

可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。

数值分析实验报告--Runge现象的产生和克服

数值分析实验报告--Runge现象的产生和克服

数值分析实验报告(四)题目:Runge现象的产生和克服学院:机电工程学院(二专业)专业:机械设计制造及其自动化班级:1008108班姓名:***学号:**********号Runge现象的产生和克服摘要:对于多项式插值运算,随着插值阶数的逐渐增多,如果带入离散点过于密集,使得定义域中的“边缘区域”,没有有效的点,将导致插值函数的边缘区域大幅度的偏离函数的真值,该现象称之为“Runge现象”。

0 前言(目的与意义):了解Runge现象,体会插值运算的不准确性,以及其差值带来的误差甚至是错误。

1 数学背景:插值运算的误差公式:|w n (x)||R n (x)|<M n+1(n+1)!M n+1=max{f(n+1)(x i)}于是,如果函数的n+1阶导数一旦很大,则会出现函数的误差很大的情况。

2 程序及代码:(1)lagrange多项式插值函数syms f x p dp lx L;f=1/(1+25*x^2);N=input('请输入插值节点数N=');xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);syms x;p=p*(x-xx(i));enddp=diff(p);for j=1:(N+1)x=xx(j);k=eval(dp);syms x;lx=p/((x-xx(j))*k);L=L+lx*ff(j);endaa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];for i=1:length(aa)x=aa(i);S(i)=eval(L);fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e)ezplot(f,[-1,1])hold onezplot(L,[-1,1])hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off(2)分段线性插值函数syms f x p lx;f=1/(1+25*x^2);N=input('请输入插值节点数N=');xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);endsyms xfor i=1:Nfor j=1:(N+1)if j==ilx(i,j)=(x-xx(i+1))/(xx(i)-xx(i+1)); else if j==i+1lx(i,j)=(x-xx(i))/(xx(i+1)-xx(i)); elselx(i,j)=0;endendendendp=lx*ff';aa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];for i=1:length(aa)x=aa(i);for j=1:N+1if x<xx(j)breakendendS(i)=eval(p(j-1));fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e)ezplot(f,[-1,1])hold onxxx=(-1:0.01:1);for i=1:length(xxx)x=xxx(i);for j=1:N+1if x<xx(j)breakendendSS(i)=eval(p(j-1));endplot(xxx,SS,'r')hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off(3):三转角插值法函数syms f x df s s1 s2 s3 s4;f=1/(1+25*x^2);df=diff(f);N=input('请输入插值节点数N=');h=2/N;xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);dff(i)=eval(df);endsyms xfor i=1:Ns1=(x-xx(i+1))^2*(h+2*(x-xx(i)))*ff(i)/h^3; s2=(x-xx(i))^2*(h+2*(xx(i+1)-x))*ff(i+1)/h^3; s3=(x-xx(i+1))^2*(x-xx(i))*dff(i)/h^2;s4=(x-xx(i))^2*(x-xx(i+1))*dff(i+1)/h^2;s(i)=s1+s2+s3+s4;endaa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96]; for i=1:length(aa)x=aa(i);for j=1:N+1if x<xx(j)breakendendS(i)=eval(s(j-1));fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e) ezplot(f,[-1,1])hold onxxx=(-1:0.01:1);for i=1:length(xxx)x=xxx(i);for j=1:N+1if x<xx(j)breakendendSS(i)=eval(s(j-1));endplot(xxx,SS,'r')hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off(4).三弯矩插值法函数:syms f x ddf s;f=1/(1+25*x^2);ddf=diff(diff(f));N=input('请输入插值节点数N=');h=2/N;xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);ddff(i)=eval(ddf);endsyms xfor i=1:NA=(ff(i+1)-ff(i))/h-h*(ddff(i+1)-ddff(i))/6;B=ff(i)-h^2*ddff(i)/6;s(i)=(xx(i+1)-x)^3*ddff(i)/(6*h)+(x-xx(i))^3*ddff(i+1)/(6*h)+A*(x-xx(i))+B; endaa=[-0.96:0.1:-0.06,0,0.06:0.1:0.96];for i=1:length(aa)x=aa(i);for j=1:N+1if x<xx(j)breakendendS(i)=eval(s(j-1));fff(i)=eval(f);ende=0;for i=1:length(aa)e=e+(S(i)-fff(i))^2;ende=sqrt(e/(20*21));fprintf('插值偏差为e=%.6f\n',e)ezplot(f,[-1,1])hold onxxx=(-1:0.01:1);for i=1:length(xxx)x=xxx(i);for j=1:N+1if x<xx(j)breakendendSS(i)=eval(s(j-1));endplot(xxx,SS,'r')hold onplot(xx,ff,'*')hold onplot(aa,S,'o')hold off3 总结与评价:函数的Runge现象可以通过三转角插值和三弯矩插值来解决,而且对于三转角和三弯矩插值来说,带入的数据越多,其插值效果越好4 实验结果:图1:观察Runge现象图2:分段线性插值图3:三转角插值:图4:三弯矩插值:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东师范大学数学科学学院实验报告
x 0.1 0.5 1 1.5 2 2.5 3
y 0.95 0.84 0.86 1.06 1.5 0.72 1.9
y' 1 1.5 2 2.5 3 3.5 4
求质点在时刻1.8时的速度,并画出插值多项式的图像。

1)运用Hermite插值法画出图像,如图4-1,并求质点在时刻1.8时的速度。

>>clear
>>clc
>>X=[0.1 0.5 1 1.5 2 2.5 3;0.95 0.84 0.86 1.06 1.5 0.72 1.9;1 1.5 2 2.5 3 3.5 4];
>> x=0.1:0.01:3;
>> H=Hermite1(X,x);
>> plot(x,H)
>> hold on
>> plot(X(1,:),X(2,:),'r*')
>> H1_8=Hermite(X,1.8);
>> plot(1.8,H1_8,'go')
>> legend('插值图像','原始点','目标点');
图4-1
二、验证高次插值的Runge现象
问题分析和算法设计
(一)Language插值代码
function [Ln] =Lagrange(X,x)
%请输入2*n+1矩阵X,X中第一行每个元素都是插值节点,X中第二行每个元素都是插值节点对应的函数值;
%第二章P24例一拉格朗日插值
n=size(X,2);d=0;
for m=1:1:n
if x==X(1,m);
d=m;
break
end
end
运行结果和总结 运行结果 例:
给定函数55,11
)(2
≤≤-+=
x x
x f ; (1) 验证表2-10的误差结果(高次插值的Runge 现象);
(2) 以0.1为步长分别进行Language 插值、分段线性插值、分段三次Hermite
插值,画出三种插值函数以及f(x)的图像,比较三种插值结果。

(1)验证表2-10的误差结果(高次插值的Runge 现象);
>>clear >>clc
>> x=-5:1:5;
>>X=1./(1+x.^2); >>X=[x;X]; >>x=-5:0.01:5;
>>a=Lagrange1(X,x); >>plot(x,a) >>hold on >>x=-5:0.1:5;
>>plot(x,(1./(1+x.^2)))
>>legend('Language 插值图像','原始图像');
画出如图4-2图像
图4-2
>>x=[5,4.8,4.5,4.3,4,3.8]; >>a=1./(1+x.^2);
>>b=Lagrange1(X,x); >>c=a-b;
>>A=[a',b',c'];
经整理得证表2-10,如表4-1
x f(x) L10(x) R10(x)
5 0.038462 0.038462 0
4.8 0.041597 1.804385 -1.76279
4.5 0.047059 1.578721 -1.53166
4.3 0.051308 0.888081 -0.83677
4 0.058824 0.058824 0
3.8 0.064767 -0.2013 0.266063
表4-1
(2)以0.1为步长分别进行Language插值、分段线性插值、分段三次Hermite 插值,画出三种插值函数以及f(x)的图像,比较三种插值结果。

>>clear
>>clc
>> x=-5:1:5;X=1./(1+x.^2); X=[x;X];
>> H=Liner1(X,x);
>> plot(H(1,:),H(2,:))
>> hold on
>> x=-5:1:5; X=1./(1+x.^2); X=[x;X];
>> X2=-(1+x.^2).^(-2).*2.*x;
>> X=[X;X2];
>> H=Hermite_31(X);
>> plot(H(1,:),H(2,:))
>> x=-5:1:5;
>> X=1./(1+x.^2);
>> X=[x;X];
>> x=-5:0.01:5;
>> a=Lagrange1(X,x);
>> plot(x,a)
>> x=-5:0.1:5;
>>plot(x,(1./(1+x.^2)))
>> legend('分段三次Hermite插值','分段线性插值','Language插值','原始图像');
得到Language插值、分段线性插值、分段三次Hermite插值,画出三种插值函数以及f(x)的图像,如图4-3
图4-3。

相关文档
最新文档