《牛顿插值法matlab程序解析》由会员分享,可在线阅读,更多相关《牛顿插值法matlab程序解析(2页珍藏版)》请在金锄头文库上搜索。
1、牛顿插值法在 MATLAB 中的实现经过 n+1 个不同的插值点 ,构造牛顿插值公式12n+1,x1231212n+12n=,(),(),()()Nffxxfxxx( x) 注:牛顿插值法中,用到了插值公式%我们以二次牛顿插值公式为例解析牛顿插值法的 matlab 程序functionc,d=newpoly(x,y)%这里 x 为 3 个节点的横坐标组成的向量,即 ,y 为纵坐标的组成向量,即123,x123,yffx%c 为所得的牛顿插值多项式的系数组成的向量n=length(x); %测量向量 x 的长度,即向量 x 中元素 的个数,赋值给 n,所以 n=3,注:这里的“n”仅为变量,和公
2、i式中的次数 n 不一样d=zeros(n,n); d=zeros(3,3)%把变量 d 定义为一个 n 行,n 列的零矩阵,此矩阵用来储存各阶差商,格式完全等同于书中 21 页的表 2.1d(:,1)=y;%此句是把向量 y 的转置,即 ,赋值给零矩阵 d 的第一列123()fxyf%下面运用两个 for 循环来构造书中 21 页的差商表 2.1%第一个循环(父循环) ,循环变量为 kfor k=2:n%用来表示零矩阵 d 中的第几行%第二个循环(父循环) ,循环变量为 kfor j=k:n%用来表示零矩阵 d 中的第几列d(k,j)=(d(k,j-1)-d(k-1,j-1)/(x(k)-x
3、(k-j+1);%差商公式,其中 d(k,j)表示零矩阵 d 中的第 k 行,第 j 列的元素,d(k,j-1),d(k-1,j-1)等也类似,它们代表的元素随着双循环而变化,x(k-1)表示 ,这种计算差商的方法是根据差商表的排列位置而得来,1x具体解释见下面。endend%下面以二次牛顿插值公式为例解析双循环构造差商表,让我们先来看看构造好的差商表 2.1121233123(),Xfxdffxfx %然后我们依旧用大括号的形式表示构造各阶差商的步骤 212121322332232112331 1()()(,)(,)2,() ,()()(,)(,)3,() ,x,(,)(,)(,) ,fxf
4、dk fxxj fffffxdjk fxx ,c=d(n,n); 即 c=d(3,3)%此句是把零矩阵 d 中的对角线元素给了向量 c, c 的向量长度即为 3%下面的循环为子循环,循环变量为 k,用于构造牛顿插值公式for k=(n-1):(-1):1; k=2:-1:1 %这句话是说循环变量 k 从 2 循环到 1c(k+1,k+1)=conv(c(k+1,k+1),poly(x(k); %conv 为相乘函数,此句 k 每循环一次就是把 c 和以 为单根的kx多项式相乘起来,即 ,k 循环结束后即为 ,注初值()cx11n()()()kcxxc=d(3,3).m=length(c); %此句就是统计向量 c 的长度,其实我们把它认定为 n 循环到了哪次,所以 m=k+1c(m)=c(m)+d(k,k) %此句是循环中的重点,是一个著名的循环,其中 c(m)=c(k+1,k+1) ;end%下面我们以二次牛顿插值公式为例用大括号的形式表示循环构造牛顿插值公式的过程 1232212321211232,13,(,),(),*(,),*(,),(),2()(kmdfxcxdxdfxxfkcdf初 值 为 = 1