matlab实现插值法和曲线拟合电子教案.docx
- 文档编号:1469678
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:12
- 大小:187.41KB
matlab实现插值法和曲线拟合电子教案.docx
《matlab实现插值法和曲线拟合电子教案.docx》由会员分享,可在线阅读,更多相关《matlab实现插值法和曲线拟合电子教案.docx(12页珍藏版)》请在冰豆网上搜索。
matlab实现插值法和曲线拟合电子教案
matlab实现插值法和曲线拟合
插值法和曲线拟合
电子科技大学
摘要:
理解拉格朗日多项式插值、分段线性插值、牛顿前插,曲线拟合,用matlab编程求解函数,用插值法和分段线性插值求解同一函数,比较插值余项;用牛顿前插公式计算函数,计算函数值;对于曲线拟合,用不同曲线拟合数据。
关键字:
拉格朗日插值多项式;分段线性插值;牛顿前插;曲线拟合
引言:
在数学物理方程中,当给定数据是不同散点时,无法确定函数表达式,求解函数就需要很大的计算量,我们有多种方法对给定的表格函数进行求解,我们这里,利用插值法和曲线拟合对函数进行求解,进一步了解函数性质,两种方法各有利弊,适合我们进行不同的散点函数求解。
正文:
一、插值法和分段线性插值
1拉格朗日多项式原理
对某个多项式函数,已知有给定的k+1个取值点:
其中对应着自变量的位置,而对应着函数在这个位置的取值。
假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:
其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:
[3]
拉格朗日基本多项式的特点是在上取值为1,在其它的点上取值为0。
2分段线性插值原理
给定区间[a,b],将其分割成a=x0 (1)Ih(xk)=yk,(k=0,1,…,n); (2)在每个区间[xk,xk+1]上,Ih(x)是个一次函数。 易知,Ih(x)是个折线函数,在每个区间[xk,xk+1]上,(k=0,1,…,n),于是,Ih(x)在[a,b]上是连续的,但其一阶导数是不连续的。 3拉格朗日插值多项式算法 输入,令。 对,计算 4分段线性插值算法 输入(x,y),k=0,1,…,n; 计算 5插值法和分段线性插值程序 按下列数据分别作五次插值和分段线性插值,画出两条插值曲线以及给定数据点。 求x1=0.32,x2=0.55,x3=0.68时的函数近似值,并比较两种方法的插值余项。 0.30 0.42 0.50 0.58 0.66 0.72 1.04403 1.08462 1.11803 1.15603 1.19817 1,23223 拉格朗日插值程序: functionlagrint xi=[0.32,0.55,0.68]; %xi=[0.2: 0.001: 0.8]; x=[0.3,0.42,0.50,0.58,0.66,0.72]; y=[1.04403,1.08462,1.11803,1.15603,1.19817,1.23223]; L=zeros(size(y)); m=length(xi); fori=1: m dxi=xi(i)-x; L (1)=prod(dxi(2: 6))/prod(x (1)-x(2: 6)); L(6)=prod(dxi(1: 6-1))/prod(x(6)-x(1: 6-1)); forj=2: 6-1 num=prod(dxi(1: j-1))*prod(dxi(j+1: 6)); den=prod(x(j)-x(1: j-1))*prod(x(j)-x(j+1: 6)); L(j)=num/den; end yi(i)=sum(y.*L); fprintf('x=%f,y=%f\n',xi(i),yi(i)); end plot(xi,yi,'r'); axis([0.20.81.031.24]); holdon plot(x,y,'b.','markersize',20) gridon 分段线性插值算法程序: function[y]=div %xi=[0.3: 0.001: 0.72]; x0=[0.3,0.42,0.50,0.58,0.66,0.72]; y0=[1.04403,1.08462,1.11803,1.15603,1.19817,1.23223]; k=1; xi=[0.32,0.55,0.68]; forj=1: 3 fori=1: 5 ifxi(j)>=x0(i)&&xi(j)<=x0(i+1)&&k<=3 lx (1)=(xi(j)-x0(i+1))/(x0(i)-x0(i+1)); lx (2)=(xi(j)-x0(i))/(x0(i+1)-x0(i)); y(k)=lx (1)*y0(i)+lx (2)*y0(i+1); k=k+1; end end end plot(xi,y,'r'); axis([0.20.81.031.24]); holdon plot(x0,y0,'b.','markersize',20) gridon 6运算结果 拉格朗日插值结果 x=0.320000,y=1.049958 x=0.550000,y=1.141271 x=0.680000,y=1.209300 拉格朗日插值余项: 分段插值结果 ans= 1.05081.14181.2095 分段线性插值余项: 由于拉格朗日插值的余项比分段线性插值的余项要求更为严格,点少、区间小的时候,拉格朗日插值要更好。 但在区间较大、节点较多的时候,分段线性插值要更好。 二、牛顿前插 1牛顿前插原理 次牛顿前插公式: 插值余项: , 阶差分记作。 阶差商是 差分和差商之间的关系是 2牛顿前插算法 输入。 对,计算各阶差分 计算函数值3牛顿前插程序: 编写一个用牛顿前插公式计算函数值的程序,要求先输出差分表,再计算x点的函数值 0.125 0.250 0.375 0.500 0.625 0.750 0.796 0.773 0.744 0.704 0.656 0.602 分别求x=0.158和x=0.636的三次插值的值,并比较二者的插值余项。 这里以x=0.636为例 function[P]=newtoncha x0=0.636; X=[0.1250.2500.3750.5000.6250.750]; Y=[0.7960.7730.7440.7040.6560.602]; h=abs(X (2)-X (1)); n=find(abs(x0-X)<3*h); X=X(n (1): n(end)); Y=Y(n (1): n(end)); w=length(X); R=zeros(w,w); R(: 1)=Y(: ); fork=2: w forj=k: w R(j,k)=R(j,k-1)-R(j-1,k-1); end end t=(x0-X (1))/h; T=1; form=1: w-1 T=T*(t-m+1); N(m)=R(m+1,m+1)*T/factorial(m); end P=R(1,1)+sum(N); 4运行结果: 差分表 0.796000000000000 0 0 0 0 0 0.773000000000000 .023********* 0 0 0 0 0.744000000000000 .029********* -0.006000000000000 0 0 0 0.704000000000000 -0.040000000000000 -0.011000000000000 -0.005000000000000 0 0 0.656000000000000 -0.048000000000000 -0.008000000000000 0.003000000000000 0.008000000000000 0 0.602000000000000 -0.054000000000000 -0.006000000000000 0.002000000000000 -0.001000000000000 -0.009000000000000 X=0.636时ans=0.651459661824000x=0,158时ans=0.790229818880000 三、曲线拟合 1曲线拟合原理: 给定数据。 记拟合函数的形式为(1.1), 其中为已知的线性无关函数。 求系数使得 (1.2) 取最小值。 称 (1.3)为拟合函数或经验公式。 如果,则(1.3)为次最小二乘拟合多项式 2曲线拟合算法: 已知数据对,求多项式,使得为最小。 注意到此时, 多项式系数满足下面的线性方程组: 其中 , 然后只要调用线性方程组的函数程序即可 3曲线拟合程序: 试分别用抛物线y=a+bx2和指数曲线y=aebx拟合下列数据 1 2.5 3.5 4 3.8 1.50 26.0 33.0 画出数据点和两条拟合曲线,并通过计算2个拟合函数残差向量的2范数来比较拟合优劣。 用抛物线y=a+bx拟合程序: functionZXE x=[12.5^23.5^24^2]; y=[3.81.5026.033.0]; m=1; S=zeros(1,2*m+1);T=zeros(m+1,1); fork=1: 2*m+1 S(k)=sum(x.^(k-1)); end fork=1: m+1 T(k)=sum(x.^(k-1).*y); end A=zeros(m+1,m+1);a=zeros(m+1,1); fori=1: m+1 forj=1: m+1 A(i,j)=S(i+j-1); end end a=A\T; fork=1: m+1 fprintf('a[%d]=%f\n',k,a(k)); end p=polyfit(x,y,1); u=polyval(p,x); plot(sqrt(x),u,'b') holdon plot(sqrt(x),y,'b.') gridon 指数曲线y=aebx拟合程序: functionZXE2 x=[12.53.54]; y=[3.81.5026.033.0]; y=log(y); m=1; S=zeros(1,2*m+1);T=zeros(m+1,1); fork=1: 2*m+1 S(k)=sum(x.^(k-1)); end fork=1: m+1 T(k)=sum(x.^(k-1).*y); end A=zeros(m+1,m+1);a=zeros(m+1,1); fori=1: m+1 forj=1: m+1 A(i,j)=S(i+j-1); end end a=A\T; fork=1: m+1 fprintf('a[%d]=%f\n',k,a(k)); end p=polyfit(x,y,1); u=polyval(p,x); plot(x,exp(u),'r') holdon plot(x,exp(y),'b.') gridon 4运行结果: 拟合曲线: a[1]=-0.168731 a[2]=0.833636 结论: 求解散点函数的时候,点少、区间小的时候,拉格朗日插值要更好。 但在区间较大,节点较多的时候,分段线性插
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 实现 插值法 曲线拟合 电子 教案