Newton插值法详解 下载本文

内容发布更新时间 : 2024/6/28 22:36:10星期一 下面是文章的全部内容请认真阅读。

《数值分析》实验报告

学号: 姓名: 班级: 日期: 题目:Newton插值法 实验环境: MATLAB 2014Ra; Win7旗舰版; 实验内容与完成情况: 1、编程实现求差商的算法。 2、设有函数?(x)??x12???e1?t22dt的函数表如下 x 0.0 0.1 0.2 0.3 0.4 0.5000 0.5398 0.5793 0.6179 0.7554 ?(x) (1)编程实现求Newton插值多项式的算法; (2)用Newton算法求?(xi),与lagrange算法进行比较。 统计计算时间,并xi?0,0?0.01i,i?1,2,3L,40的近似值,1、算法:step 1 输入[x0,x1,…xn],[y1,y2,…yn]; step 2 对j=0,1,2…n; di<-yi; step 3 对k=0,1,2…n-1; dj=(dj-d(j-i))/(xi-x(j-k-1)); step 4 输出[d0,d1,…dn] 程序:(Matlab) ①建立自定义函数Chashang.m function f=Chashang(x,y,X) syms t; %定义符号变量t,进行公式的化简和计算; n=length(x); %测量向量x的长度,赋给n; m=length(y); %测量向量y的长度,赋给m; if m~=n %判断m和n是否相等,就是判断x与y是否一一对应; error('样本数据中的x与y的对应个数不匹配'); end - 1 -

A=zeros(n,n); %定义一个n行n列的零矩阵; A(:,1)=y'; %把向量y转置,赋给零矩阵的第一列; for j=2:n %第一个循环,变量为j,用来表示第几行; for i=1:(n-j+1) %第二个循环,变量为i,用来表示第几列; A(i,j)=(A(i+1,j-1)-A(i,j-1))/(x(i+j-1)-x(i)); %差商公式,A(i,j)表示零矩阵的第j行,第i列; end end A %得到差商矩阵A; ②编写函数调用。 x=[]; %对应x值; y=[]; %已知的函数值; X=[]; %插值节点; f=Chashang(x,y,X) %调用函数得到差商值; 2、㈠利用1中的求差商的算法,把求出的差商矩阵的提取对角线元素,利用秦九韶算法,得到牛顿插值多项式。 ①首先建立自定义函数Newton.m function f=Newton(x,y,X) syms t; %定义符号变量t,进行公式的化简和计算; n=length(x); %测量向量x的长度,赋给n; m=length(y); %测量向量y的长度,赋给m; if m~=n %判断m和n是否相等,就是判断x与y是否一一对应; error('样本数据中的x与y的对应个数不匹配'); end A=zeros(n,n); %定义一个n行n列的零矩阵; A(:,1)=y'; %把向量y转置,赋给零矩阵的第一列; for j=2:n %第一个循环,变量为j,用来表示第几行; for i=1:(n-j+1) %第二个循环,变量为i,用来表示第几列; A(i,j)=(A(i+1,j-1)-A(i,j-1))/(x(i+j-1)-x(i)); %差商公式,A(i,j)表示零矩阵的第j行,第i列; end end A f=A(1,1); for j=2:n T=1; for i=1:j-1 T=T*(t-x(i)); end f=f+A(1,j)*T; %输出多项式; end f=vpa(f,2); %控制运算精度,不然结果的位数无法控制,或是 - 2 -

输出分数; f=simplify(f) %对表达式f进行化简; f=subs(f,'t',X) %赋值函数,用数值替代符号,用X代替t,计算差值函数值并输出; ②然后编写脚本文件ndcz.m调用函数 clc clear tic %调用程序运行时间消耗函数,第一次遇到tic开始计时; x=[0.0,0.1,0.2,0.3,0.4]; y=[0.5,0.5398,0.5793,0.6179,0.7554]; X=0.0:0.01:0.4; f=Newton(x,y,X) toc %第一遇到toc利用之间的插值,求出程序运行消耗时间; ㈡输出结果: A= 0.5000 0.3980 -0.0150 -0.1000 41.8333 0.5398 0.3950 -0.0450 16.6333 0 0.5793 0.3860 4.9450 0 0 0.6179 1.3750 0 0 0 0.7554 0 0 0 0 f=41.833333335816860198974609375*t^4-25.200000001739438933645240381587*t^3+4.6166666671143805918639715309539*t^2+0.14649999995179435548593335003509*t + 0.5 f=[0.5,0.50190188499956100034371407515916,0.50458175999920145453262692962753,0.50790348499891182000280832282220.51174095999868315023677576806651,0.51597812499850709476349453259003,0.52050895999837589915837763752862,0.52523748499828240504328585792434,0.53007775999822005008652772272554,0.5349538849981828680028595147868,0.53979999999816548855348527086896,0.5445602849981631375460567816391,0.54918895999817163683467359167056,0.55365028499818740431988299944293,0.55791855999820745394868005734203,0.56197812499822939571450757165996,0.56582335999825143565725610259505,0.56945868499827237586326396425189,0.57289855999829161446531722464131,0.57616748499830914564264970568039,0.57929999999832555962094298319248,0.58234068499834204267232638690715,0.58534415999836037711537700046025,0.58837508499838294131511966139386,0.59150815999841270968302696115631,0.59482812499845325267701924510219,0.59842975999850873680146461249234,0.60241788499858392460717891649383,0.60690735999868417469142576418001,0.61202308499881544169791651653047,0.61789999999898427631681028843103,0.62468308499919782528471394867379,0.63252735999946 - 3 -