资源描述:
《数值分析计算实习题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、插值法1.下列数据点的插值x01491625364964y012345678可以得到平方根函数的近似,在区间[0,64]上作图.(1)用这9个点作8次多项式插值Ls(x).(2)用三次样条(第一边界条件)程序求S(x).从得到结果看在[0,64]上,哪个插值更精确;在区间[0,1]上,两种插值哪个更精确?解:(1)拉格朗日插值多项式,求解程序如下symsxl;x1=[01491625364964];y1=[012345678];n=length(x1);Ls=sym(0);fori=1:nl=sym(y1(i));fork=1:i-1l=l*(x-x1(k))/(x1(i)-x1(k)
2、);endfork=i+1:nl=l*(x-x1(k))/(x1(i)-x1(k));endLs=Ls+l;endLs=simplify(Ls)%为所求插值多项式Ls(x).输出结果为Ls=-24221063/63504000*x^2+95549/72072*x-1/3048192000*x^8-2168879/435456000*x^4+19/283046400*x^7+657859/10886400*x^3+33983/152409600*x^5-13003/2395008000*x^6(2)三次样条插值,程序如下x1=[01491625364964];y1=[012345678]
3、;x2=[0:1:64];y3=spline(x1,y1,x2);p=polyfit(x2,y3,3);%得到三次样条拟合函数S=p(1)+p(2)*x+p(3)*x^2+p(4)*x^3%得到S(x)输出结果为:S=2288075067923491/73786976294838206464-2399112304472833/576460752303423488*x+4552380473376713/18014398509481984*x^2+999337332656867/1125899906842624*x^3(3)在区间[0,64]上,分别对这两种插值和标准函数作图,plot(x
4、2,sqrt(x2),'b',x2,y2,'r',x2,y3,'y')蓝色曲线为y=√x函数曲线,红色曲线为拉格朗日插值函数曲线,黄色曲线为三次样条插值曲线可以看到蓝色曲线与黄色曲线几乎重合,因此在区间[0,64]上三次样条插值更精确。在[0,1]区间上由上图看不出差别,不妨代入几组数据进行比较,取x4=[0:0.2:1]x4=[0:0.2:1];sqrt(x4)%准确值subs(Ls,'x',x4)%拉格朗日插值spline(x1,y1,x4)%三次样条插值运行结果为ans=00.44720.63250.77460.89441.0000ans=00.25040.47300.67060
5、.84551.0000ans=00.24290.46300.66170.84031.0000从这几组数值上可以看出在[0,1]区间上,拉格朗日插值更精确。数据拟合和最佳平方逼近1.有实验给出数据表x0.00.10.20.30.50.81.0y1.00.410.500.610.912.022.46试求3次、4次多项式的曲线拟合,再根据数据曲线形状,求一个另外函数的拟合曲线,用图示数据曲线及相应的三种拟合曲线。解:(1)三次拟合,程序如下symx;x0=[0.00.10.20.30.50.81.0];y0=[1.00.410.500.610.912.022.46];cc=polyfit(x
6、0,y0,3);S3=cc(1)+cc(2)*x+cc(3)*x^2+cc(4)*x^3%三次拟合多项式xx=x0(1):0.1:x0(length(x0));yy=polyval(cc,xx);plot(xx,yy,'--');holdon;plot(x0,y0,'x');xlabel('x');ylabel('y');运行结果S3=-7455778416425083/1125899906842624+1803512222945437/140737488355328*x-655705280524945/140737488355328*x^2+4172976892199509/4503
7、599627370496*x^3图像如下(2)4次多项式拟合symx;x0=[0.00.10.20.30.50.81.0];y0=[1.00.410.500.610.912.022.46];cc=polyfit(x0,y0,4);S3=cc(1)+cc(2)*x+cc(3)*x^2+cc(4)*x^3+cc(5)*x^4xx=x0(1):0.1:x0(length(x0));yy=polyval(cc,xx);plot(xx,yy,'r');h