插值与多项式逼近的数组计算方法实验讲解.pdf

上传人:白大夫 文档编号:5417134 上传时间:2020-05-04 格式:PDF 页数:25 大小:504.22KB
返回 下载 相关 举报
插值与多项式逼近的数组计算方法实验讲解.pdf_第1页
第1页 / 共25页
插值与多项式逼近的数组计算方法实验讲解.pdf_第2页
第2页 / 共25页
插值与多项式逼近的数组计算方法实验讲解.pdf_第3页
第3页 / 共25页
插值与多项式逼近的数组计算方法实验讲解.pdf_第4页
第4页 / 共25页
插值与多项式逼近的数组计算方法实验讲解.pdf_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《插值与多项式逼近的数组计算方法实验讲解.pdf》由会员分享,可在线阅读,更多相关《插值与多项式逼近的数组计算方法实验讲解.pdf(25页珍藏版)》请在三一文库上搜索。

1、数值方法实验报告 1 插值与多项式逼近的数组计算方法实验 郑发进 2012042020022 【摘要】计算机软件中经常要用到库函数,如)(xsin,)(xcos, x e,它们 是用多项式逼近来计算的。 虽然目前最先进的逼近方法是有理函数(即多项式的 商) ,但多项式逼近理论更适于作为数值分析的入门课程。在已知数据具有高精 度的情况下, 通常用组合多项式来构造过给定数据点的多项式。构造组合多项式 的方法有许多种, 如线性方程求解、 拉格朗日系数多项式以及构造牛顿多项式的 方分和系数表。 关 键 字泰勒级数、拉格朗日插值法、牛顿插值法、帕德逼近 一、实验目的 1. 通过具体实验,掌握泰勒级数、拉

2、格朗日插值法、牛顿插值法、帕德逼近的编 程技巧。 2. 比较各插值方法的优劣并掌握。 二、实验原理 1. 泰勒级数 在数学中,泰勒级数(英语:Taylor series)用无限项连加式级数来 表示一个函数,这些相加的项由函数在某一点的导数求得。 如果在点 x=x0具有任意阶导数,则幂级数 称为在点 x0处的泰勒级数。 在泰勒公式中,取x0=0,得到的级数 称为麦克劳林级数。 函数的麦克劳林级数是x 的幂级数,那么这种展开 数值方法实验报告 2 是唯一的,且必然与的麦克劳林级数一致。 2. 拉格朗日插值法 如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测 值,拉格朗日插值法可以找

3、到一个多项式,其恰好在各个观测的点取到观测到的 值。这样的多项式称为拉格朗日(插值)多项式。数学上来说,拉格朗日插值法 可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。 在平面上有 (x1,y1)(x2,y2).(xn,yn)共 n 个点,现作一条函数f(x)使其图 像经过这 n 个点。 作 n 个多项式 pi(x),i=1,2,3.,n,使得 最后可得 3. 牛顿插值法 插值法利用函数 f (x)在某区间中若干点的函数值,作出适当的特定函数, 在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x) 的近 似值。如果这特定函数是多项式, 就称它为插值多项式。 利用插值基

4、函数很容易 得到拉格朗日插值多项式, 公式结构紧凑, 在理论分析中甚为方便, 但当插值节 点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计 算中是很不方便的,为了克服这一缺点,提出了牛顿插值。 牛顿插值通过求各阶差商,递推得到的一个公式: 10121 ( )( )()()()() NNNN PxPxaxxxxxxxx 牛顿插值与拉格朗日插值具有唯一性。 4. 帕德逼近 它不仅与逼近论中其他许多方法有着密切的关系,而且在实际问题特别是许 多物理问题中有着广泛的应用。 设是在原点某邻域内收敛的、 具有复系数的麦克 劳林级数。欲确定一个有理函数,式中, 使得前次方的系数为0,即使

5、得 此处约 定 qk0(kn) 。虽然所求得的 Pm(z)和 Qn(z) 不惟一,但是比式却总是惟一的。 有理函数称为F(z) 的(m,n) 级帕德逼近 , 记为 (m/n) 。由(m/n) 所形成的阵列称为 帕德表。 数值方法实验报告 3 三、实验内容 1.P154.1: 用 plot命令,在同一幅图中绘制区间-1x1 上的 sin(x) ,以及 P5(x),P 7(x) 和 P9(x) 。 其中: 35 5( ) 3!5! xx P xx 式(1) 357 7( ) 3!5!7! xxx P xx 式 (2) 3579 9( ) 3!5!7!9! xxxx P xx 式 (3) 2.P17

6、1.2: 下表(表一)给出了11 月 8 号美国洛杉矶的一个郊区在5 小时内的测量温度。 (a)对表一中的数据构造一个拉格朗日插值多项式。 (b)估计这 5 小时内的平均温度。 (c)在同一坐标系中画出表中的数据和由(a)得到的多项式。讨论用(a)中 的多项式计算平均温度可能产生的误差。 时间(下午)华氏度 1 66 2 66 3 65 4 64 5 63 6 63 表 1 3.P178.1: 用牛顿插值多项式计算实验P171.2 的内容。 4.P194.1: 比较对于函数( ) x f xe 的逼近: 数值方法实验报告 4 泰勒多项式逼近: 234 4( ) 1 2624 xxx Txx 式

7、 (4) 帕德逼近: 2 2,2 2 126 ( ) 126 xx Rx xx 式 (5) (a)在同一坐标系中画出f(x) ,T4(x) ,R2,2(x) 的曲线。 (b)分别求出在区间 -1 ,1 上用 T4(x) 和 R2,2(x) 逼近 f(x) 的最大误差。 5.P194.3: 比较对于函数 f(x)=tan(x)的逼近: 泰勒多项式逼近: 3579 9 21762 ( ) 3153152835 xxxx Txx 式 (6) 帕德逼近: 35 5,4 24 945105 ( ) 94542015 xxx Rx xx 式 (7) (a)在同一坐标系中画出f(x) ,T9(x) ,R5,

8、4(x) 的曲线。 (b)分别求出在区间 -1 ,1 上用 T9(x) 和 R5,4(x) 逼近 f(x) 的最大误差。 四、实验结果及分析 1.P154.1 : 实验描述: (1)plot绘图的原理为连续点绘图,只需输入一组等间距的坐标点即可完成; (2)坐标点的计算使用 C+ 完成,计算完成后输入文件中; (3)绘图使用 matlab 的 plot函数完成,具体方法为从文件中读取出坐标点, 之后使用 plot函数绘图。 数值方法实验报告 5 实验结果: 表 2 x 及 sin(x)及 5,7,9 阶泰勒展开公式计算结果 x y=sin(x) y= P5(x) y= P7(x) y= P9(

9、x) -100000000 - 0.84147098 -0.84166667 -0.84146825 -0.84147101 -0.90000000 -0.78332691 -0.78342075 -0.78332585 -0.78332692 -0.80000000 -0.71735609 -0.71739733 -0.71735572 -0.71735609 -0.70000000 -0.64421769 -0.64423392 -0.64421758 -0.64421769 -0.60000000 -0.56464247 -0.56464800 -0.56464245 -0.564642

10、47 -0.50000000 -0.47942554 -0.47942708 -0.47942553 -0.47942554 -0.40000000 -0.38941834 -0.38941867 -0.38941834 -0.38941834 -0.30000000 -0.29552021 -0.29552025 -0.29552021 -0.29552021 -0.20000000 -0.19866933 -0.19866933 -0.19866933 -0.19866933 -0.10000000 -0.09983342 -0.09983342 -0.09983342 -0.099833

11、42 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.10000000 0.09983342 0.09983342 0.09983342 0.09983342 0.20000000 0.19866933 0.19866933 0.19866933 0.19866933 0.30000000 0.29552021 0.29552025 0.29552021 0.29552021 0.40000000 0.38941834 0.38941867 0.38941834 0.38941834 0.50000000 0.47942554

12、0.47942708 0.47942553 0.47942554 0.60000000 0.56464247 0.56464800 0.56464245 0.56464247 0.70000000 0.64421769 0.64423392 0.64421758 0.64421769 0.80000000 0.71735609 0.71739733 0.71735572 0.71735609 0.90000000 0.78332691 0.78342075 0.78332585 0.78332692 1.00000000 0.84147098 0.84166667 0.84146825 0.8

13、4147101 图 1 y=sin(x)及其 5,7,9 阶泰勒展开函数 数值方法实验报告 6 实验结论: (1)由表二可知,随着泰勒展开阶数的增加,Pn(x) 越来越接近于原函数, 当展开阶数 n=9 时,在误差 delta=1e-7的精度要求下可以认为P9(x) 与 sin(x) 完全拟合; (2)当 y=sin(x) 的泰勒展开函数 Pn(x) 的展开阶数为 5,7,9 时,其函数图像 与原函数图像基本相符; (3)综上,当 y=sin(x) 泰勒展开到达5 阶时,其五阶泰勒展开函数P5(x) 便近似于原函数,可在 00 1,1xxx范围内用于替代计算。 2.P171.2: 实验描述:

14、(1)拉格朗日插值多项式的公式为: , 0 ( )( ) n NkN k k Pxy Lx 式 (8) 以及 011 , 011 ()()()() ( ) ()()()() kkN N k kkkkkkN xxxxxxxx Lx xxxxxxxx 式 (9) (2) 进行计算时,因为现有坐标点关于 (3.5,y(3.5)点呈中心对称, 故取 y(3.5) 的值近似替代五小时温度的平均值; (3)拉格朗日插值多项式及已知点的绘图使用matlab 的 plot 函数完成,为 完成绘图需将拉格朗日插值多项式及已知坐标点的坐标输入到文件中,以便于使 用 matlab读取。 实验结果: (1)拟合后的

15、6 次拉格朗日插值多项式为: 6626 6 2314 ( )0.55()2.75(1)()5.41667()() kkkk P xxkxxkxkxk 3645 1511 5.33333()()2.625()(6)0.525() kkkk xkxkxkxxk式(10) (2)这五小时的平均温度为:64.5(华氏度) 数值方法实验报告 7 (3) 图 2 温度的拉格朗日插值多项式拟合曲线图 3.P178.1: 实验描述: (1)拉格朗日插值多项式的公式为: 010011 ( )()()()() NNN Pxaa xxaxxxxxx 式 (11) 其中 0 a 为给出坐标点的各阶差商。 (2)进行计

16、算时,因为现有坐标点关于(3.5,y(3.5)点呈中心对称,故取 y(3.5) 的值近似替代五小时温度的平均值; (3)牛顿插值多项式及已知点的绘图使用matlab 的 plot函数完成,为完 成绘图需将牛顿插值多项式及已知坐标点的坐标输入到文件中,以便于使用 matlab 读取。 数值方法实验报告 8 实验结果: (1)拟合后的 6 次牛顿插值多项式为: 2345 6 1111 ( )660.5()0.1667()0.0417()0.0167() kkkk P xxkxkxkxk 式(12) (2)这 5 小时的平均温度为: 64.5华氏度 (3) 图三温度的牛顿插值多项式拟合曲线图 实验结

17、论: (1)当日下午 1 至 6 时的平均温度估计为64.5 华氏度。 (2)由于采样点的数据容量较小,平均温度可能存在误差。 (3)对比拉格朗日插值与牛顿插值,牛顿插值的计算量更小,且当取5 次 点的时候,两者拟合精度都比较高。 数值方法实验报告 9 4.P194.1: 实验描述: (1)实验画图使用 matlab 中的 plot函数完成 (2 )误差的最大值使用matlab 中的 max函数完成 实验结果 : (1) -1-0.500.51 0 1 2 3 y=exp(x) y=T4(x) y=R2,2(x) -1-0.500.51 0 1 2 3 y=exp(x) -1-0.500.51

18、 0 1 2 3 y=T4(x) -1-0.500.51 0 1 2 3 y=R2,2(x) 图 4 f(x)及其泰勒逼近 T4(x) 及帕德逼近 R2,2(x) 曲线图 数值方法实验报告 10 (2) -1-0.8-0.6-0.4-0.200.20.40.60.81 -0.01 -0.005 0 0.005 0.01 用 T4(x)逼 近 f(x)的 误 差 曲 线 y=E4(x) -1-0.8-0.6-0.4-0.200.20.40.60.81 -2 0 2 4 x 10 -3 用 R2,2(x) 逼 近 f(x)的 误 差 曲 线 y=E2,2(x) 图 5 泰勒逼近及帕德逼近误差曲线图

19、 泰勒逼近 f(x) 的最大误差: E4(x)=0.0099 帕德逼近 f(x) 的最大误差: E2,2(x)=0.004 实验结论: (1)在 1,1x区间内, T4(x)与 R2,2(x)与原函数 y=e x 大致完全拟合; (2)相较与 T4(x),R2,2(x)的误差在区间 1,1x内更小,且随 |x|的增大,误差 也逐渐增大。 5.P194.3: 实验描述: (1)实验画图使用 matlab 中的 plot函数完成 (2)误差的最大值使用matlab 中的 max函数完成 数值方法实验报告 11 实验结果: (1) -1-0.500.51 -2 -1 0 1 2 y=tan(x) y

20、=T9(x) y=R5,4(x) -1-0.500.51 -2 -1 0 1 2 y=tan(x) -1-0.500.51 -2 -1 0 1 2 y=T9(x) -1-0.500.51 -2 -1 0 1 2 y=R5,4(x) 图 6 f(x)及其泰勒逼近 T9(x) 及帕德逼近 R5,4(x) 曲线图 数值方法实验报告 12 (2) -1-0.8-0.6-0.4-0.200.20.40.60.81 -0.02 -0.01 0 0.01 0.02 用 T9(x)逼 近 f(x)的 误 差 曲 线 y=E9(x) -1-0.8-0.6-0.4-0.200.20.40.60.81 -4 -2

21、0 2 4 x 10 -7 用 R5,4(x) 逼 近 f(x)的 误 差 曲 线 y=E5,4(x) 图 7 泰勒逼近及帕德逼近误差曲线图 泰勒逼近 f(x) 的最大误差: E4(x)=-0.0149 帕德逼近 f(x) 的最大误差: E2,2(x)= -3.1725e-07 实验结论: (1)在 1,1x区间内, T4(x) 与 R2,2(x) 与原函数 y=tan(x) 大致完全拟合; (2)相较与T9(x) ,R5,4(x) 的误差在区间 1,1x内更小,且随 |x| 的增大,误 差也逐渐增大 ; (3)与实验四相对比可得出,随着逼近次数的增加,计算精度也随之增加 附件(代码): 1.

22、P154.1: #include #include 数值方法实验报告 13 #include #include #include usingnamespace std; struct X_FX /定义一个用于存放 x,sin(x),P5(x),P7(x),P9(x)的数 据类型 double x; double y1; double y2; double y3; double y4; ; int main() int i; X_FX Fx21; /定义一个一维数组,此数组用于储存 x,f(x),P5(x),P7(x),P9(x) double x=-1; i=0; double Fsinx(d

23、ouble); double Psinx(double,int); ofstream outfile; while(x #include #include #include #include usingnamespace std; struct Coordinate / 构建一个用于保存坐标点的数据类型 double x; double y; ; int main() ofstream outfile; int N,i; double adv; double *lagran_build(Coordinate*,int); void lagran_output(double*,Coordinat

24、e*,int); double lagran(double*,Coordinate*,int,double); coutN; Coordinate *Data; /构建变量 Data,用于保存坐标点 double *lagran_coefficient; /构建变量 lagran_coefficient,用于保存 拉格朗日插值多项式的系数 Data=new Coordinate N-1; coutDatai.xDatai.y; lagran_coefficient=lagran_build(Data,N); /构建拉格朗日插值多项式 lagran_output(lagran_coefficie

25、nt,Data,N); /输出N阶的拉格朗日插值 多项式函数 adv=lagran(lagran_coefficient,Data,N,3.5); /计算5小时的平均温度 cout #include #include #include #include usingnamespace std; struct Coordinate /构建一个用于保存坐标点的数据类型 数值方法实验报告 20 double x; double y; ; int main() ofstream outfile; int N,i; double adv; double *newton_build(Coordinate*,

26、 int); void newton_output(double*,Coordinate*,int); double newton(double*,Coordinate*,int,double); coutN; Coordinate *Data; /构建数组 Data,用于保存坐标点 double *newton_coefficient; /构建数组 new_coefficient,用于 保存牛顿插值多项式的系数 Data=new Coordinate N-1; Data=new Coordinate N-1; coutDatai.xDatai.y; newton_coefficient=ne

27、wton_build(Data,N); /构建次牛顿插值多 项式 newton_output(newton_coefficient,Data,N); /输出N次牛顿插值 多项式 adv=newton(newton_coefficient,Data,N,3.5); /计算5小数平均温度 couti;j-) newton_coefficientj=(newton_coefficientj-newton_coefficientj-1)/deltax; return newton_coefficient; /此函数用于输出一个 N次牛顿插值多项式 /输入newton_coefficient为保存 N次

28、牛顿插值多项式的一维矩阵的地址 /输入Data为保存已知坐标点的数组的地址 /输入N为N次牛顿插值多项式的次数 void newton_output(double *newton_coefficient,Coordinate *Data,int N) int i,j; coutabs(max2) delta1=max1 else deltal=max2 end subplot(2,1,2) %绘制 R2,2(x)逼近f(x)的误差曲线 y=y1-y3; plot(x,y) title(用R2,2(x)逼近f(x)的误差曲线 ) legend(y=E2,2(x) max1=max(y); %计算

29、R2,2(x)逼近f(x)的最大误差 max2=min(y); if max1abs(max2) delta2=max1 else delta2=max2 end 5.P194.3: x=linspace(-1,1); %生成x=-1,1 y1=exp(x); %计算f(x)=tan(x) y2=x+x.3/3+2*x.5/15+17*x.7/315+62*x.9/2835; %计算T9(x) y3=(945*x-105*x.3+x.5)./(945-420*x.2+15*x.4); %计算R5,4(x) figure(1) %绘制f(x),T9(x),R5,4(x) 曲线 subplot(2

30、,2,1) plot(x,y1,r) hold all plot(x,y2,g) hold all plot(x,y3,b) legend(y=tan(x),y=T9(x),y=R5,4(x) subplot(2,2,2) plot(x,y1,r) legend(y=tan(x) subplot(2,2,3) plot(x,y2,g) legend(y=T9(x) subplot(2,2,4) 数值方法实验报告 25 plot(x,y3,b) legend(y=R5,4(x) figure(2) subplot(2,1,1) %绘制 T9(x)逼近f(x)的误差曲线 y=y1-y2; plot

31、(x,y) title(用T9(x)逼近f(x)的误差曲线 ) legend(y=E9(x) max1=max(y); %计算T9(x)逼近f(x)的最大误差 max2=min(y); if max1abs(max2) delta1=max1 else deltal=max2 end subplot(2,1,2) %绘制 R5,4(x)逼近f(x)的误差曲线 y=y1-y3; plot(x,y) title(用R5,4(x)逼近f(x)的误差曲线 ) legend(y=E5,4(x) max1=max(y); %计算R5,4(x)逼近f(x)的最大误差 max2=min(y); if max1abs(max2) delta2=max1 else delta2=max2 end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1