您好,欢迎访问三七文档
1班级学号:姓名:第一章插值方法一.目的和意义理解常用的插值方法,求函数的近似表达式,以解决其它实际问题;明确插值多项式和分段插值多项式各自的优缺点;熟悉插值方法的程序编制;绘出插值函数的曲线。掌握曲线拟合的最小二乘法;探索拟合函数的选择与拟合精度间的关系。二.实验内容和要求1.1Lagrange插值(1)要求:用线性插值,二次插值,三次插值计算ln0.54的近似值。(2)程序代码:文件功能:计算Lagrange插值多项式在x=x0处的值。Matlab文件:文件名:FSimpson.m程序:function[y0,n]=lagrange_eval(x,y,x0)m=length(x);n=zeros(m,1);y0=0;fori=1:m;n(i)=1;forj=1:mifj~=in(i)=n(i)*(x0-x(j))/(x(i)-x(j));endendy0=y0+y(i)*n(i);end2实验结果:结果:x=[0.5,0.6];y=[-0.693147,-0.510826];x0=0.54;[y0,n]=lagrange_eval(x,y,x0)y0=-0.6202n=0.60000.4000x=[0.4,0.5,0.6];y=[-0.916291,-0.693147,-0.510826];x0=0.54;[y0,n]=lagrange_eval(x,y,x0)y0=-0.6153n=-0.12000.84000.2800x=[0.4,0.5,0.6,0.7];y=[-0.916291,-0.693147,-0.510826,-0.356575];x0=0.54;y0=-0.6560n=-0.064030.67200.4480-0.0560结果分析:上述为三次插值的结果,由此可知三次插值的结果最为准确。1.2逐步插值(1)程序代码:文件功能:计算逐步插值多项式在x=x0处的值Matlab文件:程序:functiony0=neville_eval(x,y,x0)m=length(x);p=zeros(m,1);p1=zeros(m,1);p=y;fori=1:mp1=p;k=1;forj=i+1:mk=k+1;p(j)=p1(j-1)+(p1(j)-p1(j-1))*(x0-x(k-1))/(x(j)-x(k-1));endifads(p(m)-p(m-1))10^-6;y0=p(m);return;endendy0=p(m);实验结果:结果:4x=[0.4,0.5];y=[-0.916291,-0.693147];x0=0.54;y0=neville_eval(x,y,x0)y0=-0.6039x=[0.4,0.5,0.6];y=[-0.916291,-0.693147,-0.510826];x0=0.54;y0=neville_eval(x,y,x0)y0=-0.6153x=[0.4,0.5,0.6,0.7];y=[-0.916291,-0.693147,-0.510826,-0.356575];x0=0.54;y0=neville_eval(x,y,x0)y0=-0.6160结果分析:Neville逐步插值比Lagrange插值更优越。1.3分段三次Hermite插值(1)要求:已知lnx在x1=0.3,x2=0.4,x3=0.5,x4=0.6处的函数值及导数值,使用分段三次Hermite插值公式计算lnx在x=0.45处的函数值。(2)程序代码:文件功能:利用分段三次Hermite插值计算插值点出的函数近似值。Matlab文件:程序:functiony0=hermite_interp(x,y,dy,x0)5n=length(x);fori=1:n;ifx0=x(i)&x0=x(i+1)k=1;break;endenda1=x0-x(k+1);a2=x0-x(k);a3=x(k)-x(k+1);y0=(a1/a3)^2*(1-2*a2/a3)*y(k)+(-a2/a3)^2*(1+2*a1/a3)*y(k+1)+(a1/a3)^2*a2*dy(k)+(-a2/a3)^2*a1*dy(k+1);计算结果:结果:x=[0.30,0.40,0.50,0.60];y=log(x);dy=1\x;x0=0.45;y0=hermite_interp(x,y,dy,x0)y0=-1.1477结果分析:由此可见,用分段三次Hermite插值求解的精度还是比较高的。
本文标题:第一章插值
链接地址:https://www.777doc.com/doc-2115548 .html