数值分析MATLAB计算实验报告姓名班级学号一、实验名称根据给定数据利用MATLAB编程做出4次牛顿插值与三次样条插值的插值函数与被插值函数图形二、实验目的1.理解牛顿插值的定义并且编写出与其算法对应的MATLAB程序代码;2.了解三次样条插值的构造方法并且编写出与其算法对应的MATLAB程序代码;3.体会利用MATLAB软件进行数值计算。三、实验内容已知函数在下列各点的值为:xi0.20.40.60.81.0f(xi)0.980.920.810.640.38试用4次牛顿插值多项式P4(x)及三样条函数S(x)(自然边界条件)对数据进行插值。使用Matlab软件用图给出{(xi,yi),xi=0.2+0.08i,i=0,1,11,10},P4(x)及S(x)四、算法描述1.牛顿插值公式:Pn(x)=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,…,xn](x-x0)…(x-xn-1),当n=4时,将插值点xi及插值点对应的函数值f(xi)带入上式可得4次牛顿插值多项式。2.三次样条插值:使用三弯矩法,令nixsMii,,2,1,0),(,首先,以(xi,Mi),(xi-1,Mi-1)为结点作线性插值:iiiiiiMhxxMhxxxs11)(,其中hi=xi-xi-1紧接着,连续积分两次:213131)(6)(6)(cxcxxhMxxhMxsiiiiii再利用插值条件11)(,)(iiiiyxsyxs)()6()()6()(6)(6)(1113131iiiiiiiiiiiiiiiixxhMhyxxhMhyxxhMxxhMxsnixxxii,,2,1,1然后利用s'(x)在内结点连续的条件求Mi,s'(xi-0)=s'(xi+0))6()6()(2)(2)(112121iiiiiiiiiiiiiihMhyhMhyxxhMxxhMxsiiiiiiiiiiiihyyMMhxxhMxxhM112121)(6)(2)(2iixxx11111211211)(6)(2)(2)(iiiiiiiiiiiihyyMMhxxhMxxhMxs1iixxxiiiiiiiihyyMhMhxs1163)0(1111163)0(iiiiiiiihyyMhMhxs得iiiiiiihyyMhMh11631111163iiiiiiihyyMhMhiiiiiiiiiiiiihyyhyyMhMhhMh11111116)33(6)(62111111111iiiiiiiiiiiiiiiiihyyhyyhhMhhhMMhhh1,,2,1,211niMMMiiiiii最后,根据三条边界条件,求出的值。五、程序流程图是是C=A(n,n);b=poly(X(n));q1=conv(q1,b)否开始S=0.0;p=1.0q=1.0;c1=1.0J=2J≤nI=jI≤nA(i,j)=(A(i,j-1)-A(i-1,j-1))/(X(i)-X(i-j+1))b=poly(X(j-1));q1=conv(q,b);c1=c1*j;q=q1;K=n-1K=k-1;k≥1C=conv(C,poly(X(k)));d=length(C);C(d)=C(d)+A(k,k)L(k,:)=poly2sym(C);Q=poly2sym(q1);symsMwcgs=M*Q/c1;Cw=q1/c1;开始lambda(1)=1;A(1,1)=2;A(1,2)=lambda(1)H(1)=X(2)-X(1);mu(1)=1;D(1)=3*(Y(2)-Y(1))K=1k≤nhk=X(k+1)-X(k);H(k+1)=hkH=H(2:n+1)K=1k≤nlambdak=H(k)/(H(k)+H(k+1));lambda(k+1)=lambdak;muk=1-lambda(k+1);mu(k)=muk;dk=3*((mu(k).*(Y(k+1)-Y(k))./H(k))+(lambda(k+1).*(Y(k+2)结束D(m)=3*(Y(m)-Y(m-1))/H(m-1);mu(n)=1;n;H;lambda;mu;Di=1i≤m-1A(i,i)=2;A(m,m)=2;A(i,i+1)=lambda(i);A(i+1,i)=mu(i);dY=A\D';K=2k≤msk=Y(k-1)*((H(k-1)-2*X(k-1)+2*x)*(x-X(k))^2)/(H(k-1)^3)+Y(k)*((H(k-1)+2*X(k)-2*x)*(x-X(k-1))^2)/(H(k-1)^3)+dY(k-1)*((x-X(k-1))*(x-X(k))^2)/(H(k-1)^2)+dY(k)*((x-X(k))*(x-X(k-1))^2)/(H(k-1)^2)结束六、实验结果绿色:三次样条插值;红色:4次牛顿插值。七、实验结果分析此实验通过牛顿插值多项式及三次样条函数对数据进行插值,得到相应的数据和图像,方便对数据进行分析。从图像中可以看出,三次样条插值函数曲线较牛顿插值函数在插值节点处光滑,插值收敛性好,误差小,使结果更加趋于精确。八、附录(程序)X=[0.20.40.60.81.0];Y=[0.980.920.810.640.38];[p]=Newton_polyfit(X,Y,5);Y2=polyval(p,X);X1=0:0.01:1;Y3=interp1(X,Y,X1,'spline');plot(X,Y,'o',X,Y2,'b',X1,Y3,'p')%Y2牛顿插值,Y3三次样条插值function[p]=Newton_polyfit(X,Y)%X为拟合自变量%Y为拟合函数值%p为所得的拟合多项式系数formatlonggr=size(X);n=r(2);%n为要拟合的数据长度M=ones(n,n);M(:,1)=Y';fori=2:nforj=i:nM(j,i)=(M(j,i-1)-M(j-1,i-1))/(X(j)-X(j-i+1));endendM%显示均差表p0=[zeros(1,n-1)M(1,1)];p=p0;fori=1:n-1p1=M(i+1,i+1).*poly(X(1:i));p0=[zeros(1,n-i-1)p1];p=p+p0;end