您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 拉格朗日插值、牛顿插值的matlab代码
实验五多项式插值逼近信息与计算科学金融崔振威201002034031一、实验目的:拉格朗日插值和牛顿插值的数值实现二、实验内容:p171.1、p178.1、龙格现象数值实现三、实验要求:1、根据所给题目构造相应的插值多项式,2、编程实现两类插值多项式的计算3、试分析多项式插值造成龙格现象的原因主程序1、拉格朗日function[c,l]=lagran(x,y)%c为多项式函数输出的系数%l为矩阵的系数多项式%x为横坐标上的坐标向量%y为纵坐标上的坐标向量w=length(x);n=w-1;l=zeros(w,w);fork=1:n+1v=1;forj=1:n+1ifk~=jv=conv(v,poly(x(j)))/(x(k)-x(j))%对多项式做卷积运算endendl(k,:)=v;endc=y*l;牛顿插值多项式主程序function[p2,z]=newTon(x,y,t)%输入参数中x,y为元素个数相等的向量%t为插入的定点%p2为所求得的牛顿插值多项式%z为利用多项式所得的t的函数值。n=length(x);chaS(1)=y(1);fori=2:nx1=x;y1=y;x1(i+1:n)=[];y1(i+1:n)=[];n1=length(x1);s1=0;forj=1:n1t1=1;fork=1:n1ifk==j%如果相等则跳出循环continue;elset1=t1*(x1(j)-x1(k));endends1=s1+y1(j)/t1;endchaS(i)=s1;endb(1,:)=[zeros(1,n-1)chaS(1)];cl=cell(1,n-1);%cell定义了一个矩阵fori=2:nu1=1;forj=1:i-1u1=conv(u1,[1-x(j)]);%conv()用于多项式乘法、矩阵乘法cl{i-1}=u1;endcl{i-1}=chaS(i)*cl{i-1};b(i,:)=[zeros(1,n-i),cl{i-1}];endp2=b(1,:);forj=2:np2=p2+b(j,:);endiflength(t)==1rm=0;fori=1:nrm=rm+p2(i)*t^(n-i);endz=rm;elsek1=length(t);rm=zeros(1,k1);forj=1:k1fori=1:nrm(j)=rm(j)+p2(i)*t(j)^(n-i);endz=rm;endendplot(t,z,'y',x,y,'*r')%输出牛顿插值多项式的函数图p171.1(a)、f(x)=ex解:在matlab窗口中输入:x=[00.20.40.60.81];y=[exp(0)exp(0.2)exp(0.4)exp(0.6)exp(0.8)exp(1)]y=1.00001.22141.49181.82212.22552.7183[c,l]=lagran(x,y)可以得出输出结果为:c=0.01390.03490.17040.49911.00011.0000l=-26.041778.1250-88.541746.8750-11.41671.0000130.2083-364.5833369.7917-160.416725.00000-260.4167677.0833-614.5833222.9167-25.00000260.4167-625.0000510.4167-162.500016.66670-130.2083286.4583-213.541763.5417-6.2500026.0417-52.083336.4583-10.41671.00000由输出结果可以的出:P(x)的系数分别为:a0=0.0139a1=0.0349a2=0.1704a3=0.4991a4=1.0001a5=1.0000(b)、f(x)=sin(x)解:在matlab窗口中输入:x=[00.20.40.60.81];y=[sin(0)sin(0.2)sin(0.4)sin(0.6)sin(0.8)sin(1)];[c,l]=lagran(x,y)可以得出输出结果为:c=0.00730.0016-0.16760.00021.00000l=-26.041778.1250-88.541746.8750-11.41671.0000130.2083-364.5833369.7917-160.416725.00000-260.4167677.0833-614.5833222.9167-25.00000260.4167-625.0000510.4167-162.500016.66670-130.2083286.4583-213.541763.5417-6.2500026.0417-52.083336.4583-10.41671.00000由输出结果可以的出:P(x)的系数分别为:a0=0.0073a1=0.0016a2=-0.1676a3=0.0002a4=1.0000a5=0(c)、f(x)=(x+1)x+1解:在matlab窗口中输入:x=[00.20.40.60.81];y=[11.2^1.21.4^1.41.6^1.61.8^1.82^2];[c,l]=lagran(x,y)可以得出输出结果为:c=0.3945-0.07170.73040.94151.00521.0000l=-26.041778.1250-88.541746.8750-11.41671.0000130.2083-364.5833369.7917-160.416725.00000-260.4167677.0833-614.5833222.9167-25.00000260.4167-625.0000510.4167-162.500016.66670-130.2083286.4583-213.541763.5417-6.2500026.0417-52.083336.4583-10.41671.00000由输出结果可以的出:P(x)的系数分别为:a0=0.3945a1=-0.0717a2=0.7304a3=0.9415a4=1.0052a5=1.0000P178.12、a0=5a1=-2a2=0.5a3=-0.1a4=0.003x0=0x1=1x2=2x3=3c=2.5解:在matlab窗口中输入:x=[5-20.5-0.1];y=[0123];t=0:0.1:2.5;[u,v]=newTon(x,y,t)可得出输出结果:u=0.1896-0.7843-1.39282.8688v=2.86882.72182.56032.38552.19832.00001.79171.57451.34971.11820.88130.64010.39570.1493-0.0980-0.3451-0.5908-0.8340-1.0735-1.3082-1.5370-1.7588-1.9723-2.1765-2.3702-2.5523由此可以求出牛顿多项式为:f(x)=0.1896x^3--0.7843^x2--1.3928x+2.8688输出的图为:结果分析:利用牛顿插值多项式的函数,通过调用函数可以求得牛顿多项式与给定的点的值,并通过matlab做出函数图像。对输出结果v的值和图像进行分析,不难发现函数的输出值没有很明显的偏离函数原图像,即出现龙格现象。因此利用牛顿插值多项式求该函数,其结果是逼近的。
本文标题:拉格朗日插值、牛顿插值的matlab代码
链接地址:https://www.777doc.com/doc-7316662 .html