牛顿插值法matlab程序

  • 格式:docx
  • 大小:18.52 KB
  • 文档页数:2

《计算方法》数值实验报告

班级 090712 学号 09071235 姓名 金志彬

实验室 3-128 设备编号 D12 日期

实验题目 编写牛顿插值方法的MATLAB主程序并验算

1、实验目的:

通过编程实现牛顿插值方法,加深对多项式插值的理解。应用所编程序解决实际算例。

2、实验要求:

(1)认真分析课题要求,复习相关理论知识,选择适当的解决方案;

(2)上机实验程序,做好上机前的准备工作;

(3)调试程序,记录计算结果;

(4)分析和解释计算结果;

(5)按照要求书写实验报告。

3、实验内容:

(1)算法原理或计算公式

算法原理:根据均差定义,把x看成[a,b]上一点,可得

只要把后一式代入前一式,就得到

其中

由式(1-1)确定的多项式)(xNn显然满足插值条件,且次数不超过n次的多项式,其系数为

称)(xNn为牛顿(Newton)均差插值多项式。系数ka就是书本表5-1中第一条斜线上对应的数值。

式(1-2)为插值余项,由插值多项式唯一性可知,它与书本式(

(2)程序设计思路

1)输入:n的值及;,...,1,0,,niyxii)(要计算的函数点x(本文取x0,x1两个函数点);

2)由

计算)(xNn的值;

3)输出:)(xNn。

(3)源程序

function f=Newton(x,y,x0,x1)

syms t;

if(length(x)==length(y))

n=length(x);

c(1:n)=;

else

disp('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;

y=y1;

end

f=simplify(f);

g=subs(f,'t',x0)

g1=subs(f,'t',x1)

A=zeros(n,n-1);

A=[y',A];

for j=2:n

for i=j:n

A(i,j)=(A(i,j-1)-A(i-1,j-1))/(x(i)-x(i+1-j));

end

end

disp('差商表为');

disp(A);

(4)运行结果

>> x=[0 1 2 3];

>> y=[1 2 17 64];

>> x0=;

>> x1=;

>> f=Newton(x,y,x0,x1)

g =

g1 =

差商表为

0 0 0 0

0 0

0

f =

1-2*t^2+3*t^3

4、实验小结体会:

1)通过本次实验让我从实践验证了理论-------插值多项式的基本思想;

2)牛顿插值法建立过程中用到了插商计算,这是有别于拉格朗日插值法的一部分,在已知点数较少的情况下用牛顿插值法较为准确;

3)通过编程,加深了matlab的熟悉特别是一些函数语句,进一步体会到了函数逼近的思想。