数据插值和函数逼近MATLAB实现.docx
matlab代码--函数逼近
![matlab代码--函数逼近](https://img.taocdn.com/s3/m/b8792a3111a6f524ccbff121dd36a32d7375c7ec.png)
matlab代码--函数逼近函数逼近1.Chebyshev用切比雪夫多项式逼近已知函数function f=Chebyshev(y,k,x0)syms t;T(1:k+1)=t;T(1)=1;T(2)=t;c(1:k+1)=0.0;c(1)=int(subs(y,findsym(sym(y)),sym('t'))*T(1)/sqrt(1-t^2),t,-1,1)/pi;c(2)=2*int(subs(y,findsym(sym(y)),sym('t'))*T(2)/sqrt(1-t^2),t,-1,1)/pi;f=c(1)+c(2)*t;for i=3:k+1T(i)=2*t*T(i-1)-T(i-2);c(i)=2*int(subs(y,findsym(sym(y)),sym('t'))*T(i)/sqrt(1-t^2),t,-1,1)/2;f=f+c(i)*T(i);f=vpa(f,6);if(i==k+1)if(nargin==3)f=subs(f,'t',x0);elsef=vpa(f,6);endendend2.Legendre用勒让德多项式逼近已知函数function f=Legendre(y,k,x0)syms t;P(1:k+1)=t;P(1)=1;P(2)=t;c(1:k+1)=0.0;c(1)=int(subs(y,findsym(sym(y)),sym('t'))*P(1),t,-1,1)/2; c(2)=int(subs(y,findsym(sym(y)),sym('t'))*P(2),t,-1,1)/2; f=c(1)+c(2)*t;for i=3:k+1P(i)=((2*i-3)*P(i-1)*t-(i-2)*P(i-2))/(i-1);c(i)=int(subs(y,findsym(sym(y)),t)*P(i),t,-1,1)/2;f=f+c(i)*P(i);if(i==k+1)if(nargin==3)f=subs(f,'t',x0);elsef=vpa(f,6);endendend3.Pade用帕德形式的有理分式逼近已知函数function f=Pade(y,n,x0)syms t;A=zeros(n,n);q=zeros(n,1);p=zeros(n+1,1);b=zeros(n,1);yy=0;a(1:2*n)=0.0;for(i=1:2*n)yy=diff(sym(y),findsym(sym(y)),n);a(i)=subs(sym(yy),findsym(sym(yy)),0.0)/factorial(i); end; for(i=1:n)for(j=1:n)A(i,j)=a(i+j-1);end;b(i,1)=-a(n+i);end;q=A\b;p(1)=subs(sym(y),findsym(sym(y)),0.0);for(i=1:n)p(i+1)=a(n)+q(i)*subs(sym(y),findsym(sym(y)),0.0);for(j=2:i-1)p(i+1)=p(i+1)+q(j)*a(i-j);endendf_1=0;f_2=1;for(i=1:n+1)f_1=f_1+p(i)*(t^(i-1));endfor(i=1:n)f_2=f_2+q(i)*(t^i);endif(nargin==3)f=f_1/f_2;f=subs(f,'t',x0);elsef=f_1/f_2;f=vpa(f,6);end4.lmz用列梅兹算法确定函数的最佳一致逼近多项式function[coff,err]=lmz(func,m,a,b,eps)if(nargin==4)eps=1.0e-6;endsyms v;maxv=0.0;max_x=a;%记录abs(f(x)-p(x))取最大值的xfor k=0:mpx(k+1)=power(v,k);end%p(x)多项式for i=1:m+2x(i)=0.5*(a+b+(b-a)*cos(3.14159265*(m+2-i)/(m+1)));fx(i)=subs(sym(func),findsym(sym(func)),x(i));end%初始的x和f(x)A=zeros(m+2,m+2);for i=1:m+2for j=1:m+1A(i,j)=power(x(i),j-1);endA(i,m+2)=(-1)^i;endc=A\transpose(fx);%p(x)的初始系数u=c(m+2);%算法中的utol=1;%精度while(tol>eps)t=a;while(t<b)%此循环找出abs(f(x)-p(x))取最大值的x< p="">t=t+0.05*(b-a)/m;px1=subs(px,'v',t);pt=px1*c(1:m+1);ft=subs(sym(func),findsym(sym(func)),t);if abs(ft-pt)>maxvmaxv=abs(ft-pt);max_x=t;endendif max_x>bmax_x=b;end%以下可参考算法的三个确定新点集的情况if(a<=max_x)&&(max_x<=x(2))%第一种情况f0=subs(sym(func),findsym(sym(func)),x(2));px1=subs(px,'v',x(2));pt=px1*c(1:m+1);d1=f0-pt;fm=subs(sym(func),findsym(sym(func)),max_x);pm1=subs(px,'v',max_x);pm=pm1*c(1:m+1);d2=fm-pm;if d1*d2>0x(2)=max_x;endelseif(x(m+1)<=max_x)&&(max_x<=b)%第二种情况f0=subs(sym(func),findsym(sym(func)),x(m+1));px1=subs(px,'v',x(m+1));pt=px1*c(1:m+1);d1=f0-pt;fm=subs(sym(func),findsym(sym(func)),max_x); pm1=subs(px,'v',max_x);pm=pm1*c(1:m+1);d2=fm-pm;if d1*d2>0x(m+1)=max_x;endelse%第三种情况for i=2:mif(x(i)<=max_x)&&(x(i+1)>=max_x)index_x=i;break;endend%找到max_x所在区间f0=subs(sym(func),findsym(sym(func)),x(index_x)); px1=subs(px,'v',x(index_x));pt=px1*c(1:m+1);d1=f0-pt;fm=subs(sym(func),findsym(sym(func)),max_x); pm1=subs(px,'v',max_x);pm=pm1*c(1:m+1);d2=fm-pm;if d1*d2>0x(index_x)=max_x;endendendfor i=1:m+2%重新计算f(x)fx(i)=subs(sym(func),findsym(sym(func)),x(i));endfor i=1:m+2for j=1:m+1A(i,j)=power(x(i),j-1);endA(i,m+2)=(-1)^i;endc=A\transpose(fx);%重新计算p(x)的系数tol=abs(c(m+2)-u);u=c(m+2);endcoff=c(1:m+1);err=u;5.ZJPF求已知函数的最佳平方逼近多项式function coff=ZJPF(func,n,a,b)C=zeros(n+1,n+1);var=findsym(sym(func));func=func/var;for i=1:n+1C(1,i)=(power(b,i)-power(a,i))/i;%算法中的C矩阵的第一行func=func*var;d(i,1)=int(sym(func),var,a,b);%算法中的D向量的第一行end for i=2:n+1C(i,1:n)=C(i-1,2:n+1);f1=power(b,n+i);f2=power(a,n+i);C(i,n+1)=(f1-f2)/(n+i);%形成C矩阵endcoff=C\d;%求解逼近多项式的系数6.FZZ用傅立叶级数逼近已知的连续周期函数function[A0,A,B]=FZZ(func,T,n)syms t;func=subs(sym(func),findsym(sym(func)),sym('t')); A0=int(sym(func),t,-T/2,T/2)/T;for(k=1:n)A(k)=int(func*cos(2*pi*k*t/T),t,-T/2,T/2)*2/T;A(k)=vpa(A(k),4);B(k)=int(func*sin(2*pi*k*t/T),t,-T/2,T/2)*2/T;B(k)=vpa(B(k),4);end7.DFF离散周期数据点的傅立叶逼近function c=DFF(f,N)c(1:N)=0;for(m=1:N)for(n=1:N)c(m)=c(m)+f(n)*exp(-i*m*n*2*pi/N);endc(m)=c(m)/N;end8.SmartBJ用自适应分段线性法逼近已知函数function[node,err]=SmartBJ(func,a,b,maxtol) format long;node(1)=a;node(2)=b;num=2;if(b-a)<10n=5;elsen=10;enderr=0;bSign=1;while(bSign)bSign=0;knode=node;tnum=num;insert_num=0;for i=1:(tnum-1)[mx,mv]=FindMX(func,knode(i),knode(i+1),n);%找到区间[knode(i),knode(i+1)]上的误差最大的点if mv>maxtol%如果误差超过给定精度,在此点将区间[knode(i),knode(i+1)]分为两段d(1:(i+insert_num))=node(1:(i+insert_num));d(i+insert_num+1)=mx;num=num+1;d((i+insert_num+2):num)=node((i+insert_num+1):(num-1));node=d;bSign=1;insert_num=insert_num+1;elseif(mv>err)err=mv;%记录所有分段线性插值区间上的最大误差endendendendformat short;function[max_x,max_v]=FindMX(func,a,b,n)format long;eps=1.e-3;max_v=0;max_x=a;fa=subs(sym(func),findsym(sym(func)),a);%左端点函数值fb=subs(sym(func),findsym(sym(func)),b);%右端点函数值step=n/5;tol=1;tmp=0;while tol>epst=a;for j=0:(n/step)%此循环找出取最大值的xt=a+j*step*(b-a)/n;pt=fa+(t-a)*(fb-fa)/(b-a);%线性插值得出的函数值ft=subs(sym(func),findsym(sym(func)),t);if abs(ft-pt)>max_v%abs(f(x)-p(x))max_v=abs(ft-pt);%记录最大误差max_x=t;%记录此点坐标endendtol=abs(max_x-tmp);tmp=max_x;step=step/2;endformat short;9.SmartYTBJ用自适应样条逼近(第一类)已知函数function[node,err]=SmartYTBJ(func,a,b,y_s,y_e,maxtol) format long;node(1)=a;node(2)=b;num=2;if(b-a)<10n=5;elsen=10;enderr=0;bSign=1;while(bSign)bSign=0;for l=1:numy(l)=subs(subs(sym(func),findsym(sym(func)),node(l)));endknode=node;tnum=num;insert_num=0;for i=1:(tnum-1)pfx=ThrSample1(knode,y,y_s,y_e,((knode(i)+knode(i+1))/2));%上式给出每个分段区间上的样条插值函数[mx,mv]=FindMX(func,pfx,knode(i),knode(i+1),n);%找到区间[knode(i),knode(i+1)]上的误差最大的点if mv>maxtol%如果误差超过给定精度,在此点将区间[knode(i),knode(i+1)]分为两段,即将此点加%入结点数组中d(1:(i+insert_num))=node(1:(i+insert_num));d(i+insert_num+1)=mx;num=num+1;d((i+insert_num+2):num)=node((i+insert_num+1):(num-1));node=d;bSign=1;insert_num=insert_num+1;elseif(mv>err)err=mv;%记录所有样条插值区间上的最大误差endendendendformat short;function[max_x,max_v]=FindMX(func,pfx,a,b,n)format long;eps=1.e-3;max_v=0;max_x=a;fa=subs(sym(func),findsym(sym(func)),a);%左端点函数值fb=subs(sym(func),findsym(sym(func)),b);%右端点函数值step=n/5;tol=1;tmp=0;while tol>epst=a;for j=0:(n/step)%此循环找出取最大值的xt=a+j*step*(b-a)/n;pt=subs(sym(pfx),findsym(sym(pfx)),t);%样条插值得出的函数值ft=subs(sym(func),findsym(sym(func)),t);if abs(ft-pt)>max_v%abs(f(x)-p(x))max_v=abs(ft-pt);%记录最大误差max_x=t;%记录此点坐标endendtol=abs(max_x-tmp);tmp=max_x;step=step/2;endformat short;10.multifit离散试验数据点的多项式曲线拟合function A=multifit(X,Y,m)%A--输出的拟合多项式的系数N=length(X);M=length(Y);if(N~=M)disp('数据点坐标不匹配!');return;endc(1:(2*m+1))=0;b(1:(m+1))=0;for j=1:(2*m+1)%求出c和bfor k=1:Nc(j)=c(j)+X(k)^(j-1);if(j<(m+2))b(j)=b(j)+Y(k)*X(k)^(j-1);endendendC(1,:)=c(1:(m+1));for s=2:(m+1)C(s,:)=c(s:(m+s));endA=b'\C;%直接求解法求出拟合系数11.LZXEC离散试验数据点的线性最小二乘拟合function[a,b]=LZXEC(x,y)if(length(x)==length(y))n=length(x);elsedisp('x和y的维数不相等!');return;end%维数检查A=zeros(2,2);A(2,2)=n;B=zeros(2,1);for i=1:nA(1,1)=A(1,1)+x(i)*x(i);A(1,2)=A(1,2)+x(i);B(1,1)=B(1,1)+x(i)*y(i);B(2,1)=B(2,1)+y(i);endA(2,1)=A(1,2);s=A\B;a=s(1);b=s(2);12.ZJZXEC离散试验数据点的正交多项式最小二乘拟合function a=ZJZXEC(x,y,m)if(length(x)==length(y))n=length(x);elsedisp('x和y的维数不相等!');return;end%维数检查syms v;d=zeros(1,m+1);q=zeros(1,m+1);alpha=zeros(1,m+1);for k=0:mpx(k+1)=power(v,k);end%x的幂多项式B2=[1];d(1)=n;for l=1:nq(1)=q(1)+y(l);alpha(1)=alpha(1)+x(l);endq(1)=q(1)/d(1);alpha(1)=alpha(1)/d(1);a(1)=q(1);B1=[-alpha(1)1];for l=1:nd(2)=d(2)+(x(l)-alpha(1))^2;q(2)=q(2)+y(l)*(x(l)-alpha(1));alpha(2)=alpha(2)+x(l)*(x(l)-alpha(1))^2; end q(2)=q(2)/d(2);alpha(2)=alpha(2)/d(2);a(1)=a(1)+q(2)*(-alpha(1));a(2)=q(2);beta=d(2)/d(1);for i=3:(m+1)B=zeros(1,i);B(i)=B1(i-1);B(i-1)=-alpha(i-1)*B1(i-1)+B1(i-2);for j=2:i-2B(j)=-alpha(i-1)*B1(j)+B1(j-1)-beta*B2(j); endB(1)=-alpha(i-1)*B1(1)-beta*B2(1);BF=B*transpose(px(1:i));for l=1:nQx=subs(BF,'v',x(l));d(i)=d(i)+(Qx)^2;q(i)=q(i)+y(l)*Qx;alpha(i)=alpha(i)+x(l)*(Qx)^2;endalpha(i)=alpha(i)/d(i);q(i)=q(i)/d(i);beta=d(i)/d(i-1);for k=1:i-1a(k)=a(k)+q(i)*B(k);enda(i)=q(i)*B(i);B2=B1;B1=B;end</b)%此循环找出abs(f(x)-p(x))取最大值的x<>。
数据插值、拟合方法的MATLAB实现
![数据插值、拟合方法的MATLAB实现](https://img.taocdn.com/s3/m/9965e52d15791711cc7931b765ce0508763275e3.png)
hours=0:1:23;
temps=[12 12 12 11 10 10 10 10 11 13 15 18 19 20 22 21 20 19 18 16 15 15 15 15]
n=6;
p=polyfit(hours,temps,n)
t=linspace(0,23,100);
z=polyval(p,t); %多项式求值
plot(hours,temps,'o',t,z,'k:',hours,temps,'b',’r’,'linewidth',1.5)
legend('原始数据','6阶曲线')
2.3用8阶多项式拟合的命令
hours=0:1:23;
temps=[12 12 12 11 10 10 10 10 11 13 15 18 19 20 22 21 20 19 18 16 15 15 15 15]
实验结果:
1.一元插值图像
图1.1一元插值图
经分析三次样条插值法效果最好,以三次样条插值法得出每个0.5小时的温度值:
时间
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
温度
12
11.9
12
12.0
12
11.6
11
10.4
10
9.9
10
10.0
时间
6
6.5
7
7.5
8
8.5
9
9.5
10
10.5
11
11.5
MATLAB插值法程序用多种插值法逼近sin(x)
![MATLAB插值法程序用多种插值法逼近sin(x)](https://img.taocdn.com/s3/m/ff729271011ca300a6c3905f.png)
数学与统计学实验教学中心实验报告一、实验目的:学会运用插值法求得所需值。
二、实验内容:通过提供的初值,运用插值法计算要求位置处的sin(x)值,模拟出插值图像,并与真值图像做对比。
三、实验环境:MATLAB。
四,实验方法:根据所给初值条件x=[0.4 0.5 0.6 0.7],y=[0.38942 0.47943 0.56464 0.64422],通过对插值法spline的调用,运用语句y1=interp1(x,y,x1,'spline'),求解x1=0.57891处的插值y1=interp1(x,y,x1,'spline')。
再利用现所得的数据,对x值进行细小的分割,使插值的密度加大,分别用插值法nearest,linear,cubic求出对应的y数据组,再根据对应的[x,y]数据作图,以获得插值图像及真实值图像,并比较插值图像与真实值图像的相似度。
另外我将插值数据与真实值作差获得两者的差额,并描绘出相应的差额图像,在对比相似度时更为明显易懂。
五、实验过程:根据设计思想,编写并键入程序于MATLAB,生成相应的M文件并做调试,最后得出正确可行的程序体为:format long %调用长值型数据,加大精度x=[0.4 0.5 0.6 0.7];y=[0.38942 0.47943 0.56464 0.64422];x1=0.57891;y1=interp1(x,y,x1,'spline'); %调用spline插值法求所需值x1y1 %输出所求值xi=0.4:0.01:0.7; %细化插值变量yi=interp1(x,y,xi,'spline'); %调用spline插值法求得数组yi zi=interp1(x,y,xi,'nearest'); %调用nearest插值法求得数组zi oi=interp1(x,y,xi,'linear'); %调用linear插值法求得数组oiqi=interp1(x,y,xi,'cubic'); %调用cubic插值法求得数组qi ri=sin(xi); %调用sin(x)函数求真值数组ri; ai=ri-yi; %计算spline插值法与真值的差bi=ri-zi; %计算nearest插值法与真值的差ci=ri-oi; %计算linear插值法与真值的差di=ri-qi; %计算cubic插值法与真值的差subplot(3,2,1),plot(x,y,'ok',xi,yi,'+',xi,zi,'k',xi,oi,'*',xi,qi,'b',x1,y1,'or',xi,ri,'r')%画出所有图像以作比较subplot(3,2,2),plot(x,y,'ok',xi,yi,'+',x1,y1,'or',xi,ri,'r',xi,ai,'+')%画出spline图像以作比较subplot(3,2,3),plot(x,y,'ok',xi,zi,'k',x1,y1,'or',xi,ri,'r',xi,bi,'+')%画出nearest图像以作比较subplot(3,2,4),plot(x,y,'ok',xi,oi,'*',x1,y1,'or',xi,ri,'r',xi,ci,'+')%画出lineart图像以作比较subplot(3,2,5),plot(x,y,'ok',xi,qi,'b',x1,y1,'or',xi,ri,'r',xi,di,'+')%画出cubic图像以作比较%另外运用gtext()语句在图像中插入文字说明(调试并运行得到实验结果图像)(并在工作栏里获得数据)x1 =0.578910000000000 y1 =0.547109809796892(经过验证,结果正确,实验成功)六、实验总结:1.遇到的问题及解决过程:实验中,在作图环节出现很多问题:首先是图像较多,并且图像大范围重合,要在图像中凸显真值,提供的数据点,所求的数据点,就更困难了,所以我想到用subplot语言做出多组图像,以使图像清晰明了;另外我将求得的各差额图像与相应的插值图像画到一起,便于对比该插值法与真值的相似度,为了视图方便,我运用gtext()命令对图像进行标记和说明,获得简单明了的图像。
用MATLAB作函数插值
![用MATLAB作函数插值](https://img.taocdn.com/s3/m/fef54cf0941ea76e58fa0411.png)
1.先在三维坐标画出原始数据,画出粗糙的温度分布曲面图. 输入以下命令: x=1:5; y=1:3; temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86]; mesh(x,y,temps) 2.以平滑数据,在x、y方向上每隔0.2个单位的地方进行插值.
figure(5) subplot(1,3,1),contour(xi,yi,z1i,10,'r'); subplot(1,3,2),contour(xi,yi,z2i,10,'r'); subplot(1,3,3),contour(xi,yi,z3i,10,'r');
用MATLAB作散点数据的插值计算
例
已知飞机下轮廓线上数据如下,求x每改变0.1时的y值。
X Y
0 3 5 7 9 1 1 1 1 1 1 2 3 4 5 0 12 17 20 21 20 18 12 10 16 . . . . . . . . .
机翼下 轮廓线 y
x
x0=[0 3 5 7 9 11 12 13 14 15 ]; y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 ]; x=0:0.1:15; y1=lagr1(x0,y0,x); y2=interp1(x0,y0,x); y3=interp1(x0,y0,x,'spline'); subplot(3,1,1) plot(x0,y0,'k+',x,y1,'r') grid title('lagrange') subplot(3,1,2) plot(x0,y0,'k+',x,y2,'r') grid title('piecewise linear') subplot(3,1,3) plot(x0,y0,'k+',x,y3,'r') grid title('spline')
基于Matlab实现函数逼近
![基于Matlab实现函数逼近](https://img.taocdn.com/s3/m/5fa11641be1e650e52ea99a1.png)
基于Matlab 实现函数逼近曾德惠(湖北民族学院理学院 湖北恩施 445000)摘 要:为满足工程应用中对数据处理的需要,讨论基于Mat lab 实现函数逼近的三种方法:插值、拟合和神经网络逼近。
在介绍基本原理的基础上,利用Matlab 的插值和拟合函数,结合实例对分段线性插值、Her mite 、三次样条插值及最小二乘曲线拟合法的Matlab 实现方法进行研究。
设计非线性函数逼近的BP 神经网络,通过网络训练、仿真达到了预期的效果。
所有结果表明,采用不同的逼近方法,利用Mat lab 编程可以简单、有效地实现函数逼近。
关键词:Mat lab;函数逼近;插值;拟合;神经网络中图分类号:T P391.9;O241 文献标识码:A 文章编号:10042373X(2009)182141203Realization of Function Approximation Based on MatlabZENG Dehui(School of S cience ,H ubei Instit ut e for Nat i onalit i es,Enshi,445000,China )A bstra ct :Thr ee means to r ea lize function appr oach such as the inter polation approach,f itting approach as well as the neu 2r al networ k approach ar e discussed based on Matlab t o meet the demand of data processing in engineering application.Based on basic principle of the introduction,realization methods to piecewise linea r inter polation,H ermite interpolation,cubic spline in 2ter polat ion and least squares cur ve fitting method are r esear ched using inter polation funct ion and fitting function in Matlab with example.BP neural network to proximate nonlinear functions is designed,desired efect is achieved through the tr aining and simulation of net work.All r esults indicate that different methods ar e adopted according to specific problems,and function approach is realized simply and effectively in Matlab.Keywords :Matlab;function approximat ion;inter polation;fitting;neura l network收稿日期:20092032030 引 言在工程分析和科学研究中,常需要根据一些测试数据求得自变量和因变量的近似函数关系式,来完成其他设计计算。
插值与逼近拟合及其Matlab应用共50页文档
![插值与逼近拟合及其Matlab应用共50页文档](https://img.taocdn.com/s3/m/ed02e7c60b4e767f5bcfce25.png)
1、战鼓一响,法律无声。——英国 2、任何法律的根本;不,不成文法本 身就是 讲道理 ……法 律,பைடு நூலகம் ----即 明示道 理。— —爱·科 克
3、法律是最保险的头盔。——爱·科 克 4、一个国家如果纲纪不正,其国风一 定颓败 。—— 塞内加 5、法律不能使人人平等,但是在法律 面前人 人是平 等的。 ——波 洛克
31、只有永远躺在泥坑里的人,才不会再掉进坑里。——黑格尔 32、希望的灯一旦熄灭,生活刹那间变成了一片黑暗。——普列姆昌德 33、希望是人生的乳母。——科策布 34、形成天才的决定因素应该是勤奋。——郭沫若 35、学到很多东西的诀窍,就是一下子不要学很多。——洛克
如何利用Matlab技术进行数据插值
![如何利用Matlab技术进行数据插值](https://img.taocdn.com/s3/m/46518b0b42323968011ca300a6c30c225901f0b0.png)
如何利用Matlab技术进行数据插值数据插值是一种常用的数学方法,用于根据已知数据点的信息,推断出未知位置的数据。
在各个学科领域,如地理学、环境科学、经济学等,数据插值都被广泛应用于实际问题的解决中。
在这篇文章中,我们将探讨如何利用Matlab技术进行数据插值。
数据插值的目标是根据已有的数据点,建立一个适当的函数模型,并利用该模型对未知位置处的数据进行估计。
Matlab作为一种功能强大的数学计算和可视化软件,提供了各种强大的函数和工具箱,使得数据插值变得更加便捷和高效。
首先,我们需要将已有的数据点导入到Matlab中。
一般来说,数据以文本文件的形式存储,每一行代表一个数据点,包含该点的横坐标和纵坐标。
我们可以使用Matlab内置的读取文本数据的函数,如`dlmread`或`importdata`来导入数据。
导入后,我们可以使用`plot`函数将数据点绘制出来,以便于观察数据的分布情况。
在进行数据插值之前,首先需要对数据进行预处理。
如果数据中存在异常值或者缺失值,我们可以使用Matlab提供的函数来进行数据清洗。
例如,可以使用`isnan`函数判断数据是否缺失,并使用`interp1`函数对缺失值进行插值处理。
接下来,我们将介绍几种常用的数据插值方法,并演示如何在Matlab中应用这些方法。
首先是最简单的线性插值方法。
线性插值基于已知数据点之间的直线拟合,通过求解直线方程,来推测未知位置处的数据值。
Matlab提供了`interp1`函数来实现线性插值,我们可以指定插值的方法为`'linear'`,并传入已知数据点的横坐标和纵坐标,以及待插值的位置进行插值计算。
此外,Matlab还提供了其他更高级的插值方法,如多项式插值、样条插值等。
多项式插值使用多项式函数拟合已知数据点,通过计算多项式函数的值来进行插值。
Matlab提供了`polyfit`函数来拟合多项式函数,以及`polyval`函数来计算多项式函数的值。
数值分析实验报告--实验2--插值法
![数值分析实验报告--实验2--插值法](https://img.taocdn.com/s3/m/c87eb55d6ad97f192279168884868762caaebbef.png)
1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
matlab插值实验报告
![matlab插值实验报告](https://img.taocdn.com/s3/m/aae6e713f11dc281e53a580216fc700abb6852d0.png)
matlab插值实验报告Matlab插值实验报告引言:在数学和工程领域中,插值是一种常见的数据处理方法。
它通过已知数据点之间的推断来填补数据的空缺部分,从而获得连续的函数或曲线。
Matlab是一种功能强大的数值计算软件,具备丰富的插值函数和工具包。
本实验旨在通过使用Matlab进行插值实验,探索插值方法的原理和应用。
实验步骤:1. 数据准备首先,我们需要准备一组实验数据。
以一个简单的二维函数为例,我们选择f(x) = sin(x),并在区间[0, 2π]上取若干个等间隔的点作为已知数据点。
2. 线性插值线性插值是插值方法中最简单的一种。
它假设函数在两个已知数据点之间是线性变化的。
在Matlab中,可以使用interp1函数进行线性插值。
我们将已知数据点和插值结果绘制在同一张图上,以比较它们之间的差异。
3. 多项式插值多项式插值是一种常用的插值方法,它通过已知数据点构造一个多项式函数来逼近原始函数。
在Matlab中,polyfit函数可以用来拟合多项式。
我们可以选择不同的多项式次数进行插值,并观察插值结果与原始函数之间的差异。
4. 样条插值样条插值是一种更为精确的插值方法,它通过在每个小区间内构造局部多项式函数来逼近原始函数。
在Matlab中,可以使用spline函数进行样条插值。
我们可以选择不同的插值节点数目,并比较插值结果的平滑程度和逼近效果。
5. 拉格朗日插值拉格朗日插值是一种基于多项式的插值方法,它通过构造插值多项式来逼近原始函数。
在Matlab中,可以使用polyval函数进行拉格朗日插值。
我们可以选择不同的插值节点数目,并观察插值结果与原始函数之间的差异。
实验结果:通过实验,我们得到了不同插值方法的结果,并将其与原始函数进行了比较。
在线性插值中,我们观察到插值结果与原始函数之间存在一定的误差,特别是在函数变化较快的区域。
而多项式插值和样条插值在逼近原始函数方面表现更好,特别是在插值节点数目较多的情况下。
matlab插值(详细 全面)范文
![matlab插值(详细 全面)范文](https://img.taocdn.com/s3/m/68f4aae1aa00b52acfc7ca64.png)
Matlab中插值函数汇总和使用说明MATLAB中的插值函数为interp1,其调用格式为:yi= interp1(x,y,xi,'method')其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。
例如:在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为12,9,9,10,18 ,24,28,27,25,20,18,15,13,推测中午12点(即13点)时的温度.x=0:2:24;y=[12 9 9 10 18 24 28 27 25 20 18 15 13];a=13;y1=interp1(x,y,a,'spline')结果为: 27.8725若要得到一天24小时的温度曲线,则:xi=0:1/3600:24;yi=interp1(x,y,xi, 'spline');plot(x,y,'o' ,xi,yi)命令1 interp1功能一维数据插值(表格查找)。
该命令对数据点之间计算内插值。
它找出一元函数f(x)在中间点的数值。
其中函数f(x)由所给数据决定。
x:原始数据点Y:原始数据点xi:插值点Yi:插值点格式(1)yi = interp1(x,Y,xi)返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。
参量x 指定数据Y 的点。
若Y 为一矩阵,则按Y 的每列计算。
yi 是阶数为length(xi)*size(Y,2)的输出矩阵。
函数的数值逼近-插值
![函数的数值逼近-插值](https://img.taocdn.com/s3/m/9e284b896529647d27285222.png)
课程名称计算方法实验项目名称函数的数值逼近-插值实验成绩指导老师(签名)日期2011-9-16一. 实验目的和要求1.掌握用Matlab计算Lagrange、分段线性、三次样条三种插值的方法,改变节点的数目,对三种插值结果进行初步分析。
2.通过实例学习如何用插值方法解决实际问题。
二. 实验内容和原理1)编程题2-1要求写出Matlab源程序(m文件),并对每一行语句加上适当的注释语句;2)分析应用题2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab源程序、运行结果和结果的解释、算法的分析等写在实验报告上。
2-1分析应用题用12y x=在0,1,4,9,16x=产生5个节点15,,P P。
用以下五种不同的节点构造Lagrange插值公式来计算5x=处的插值,与精确值比较并进行分析。
function y=lagr(x0,y0,x)n=length(x0);m=length(x);L=zeros(1,n);y=zeros(1,m);for k=1:ms=0;for i=1:nL(i)=1;for j=1:nif j~=iL(i)=L(i)*(x(k)-x0(j))/(x0(i)-x0(j));endends=s+y0(i)*L(i);endy(k)=s;end1) 用34,P P 构造;>> x0=[4,9]; >> y0=[2,3]; >> lagr(x0,y0,5) ans =2.20002) 用234,,P P P 构造;>> x0=[1,4,9]; >> y0=[1,2,3]; >> lagr(x0,y0,5) ans =2.26673) 用2345,,,P P P P 构造;>> x0=[1,4,9,16]; >> y0=[1,2,3,4]; >> lagr(x0,y0,5) ans =2.25404) 用1245,,,P P P P 构造;>> x0=[0,1,9,16]; >> y0=[0,1,3,4]; >> lagr(x0,y0,5) ans =2.95245) 用全部插值节点12345,,,,P P P P P 构造。
数据插值、函数逼近问题的Matlab求解解读
![数据插值、函数逼近问题的Matlab求解解读](https://img.taocdn.com/s3/m/3db8ff5ca8956bec0975e365.png)
第8 章数据插值、函数逼近问题的计算机求解⏹薛定宇、陈阳泉著《高等应用数学问题的MATLAB求解》,清华大学出版社2004⏹CAI课件开发:刘莹莹、薛定宇主要内容⏹插值与数据拟合⏹样条插值与数值微积分⏹由已知数据拟合数学模型⏹信号分析与数字信号处理基础8.1插值与数据拟合⏹一维数据的插值问题⏹已知样本点的定积分计算⏹二维网格数据的插值问题⏹二维一般分布数据的插值问题⏹高维插值问题8.1.1 一维数据的插值问题8.1.1.1 一维插值问题的求解【例8-1】已知的数据点来自函数根据生成的数据进行插值处理,得出较平滑的曲线直接生成数据。
【例8-2】编写一段程序,允许利用插值方法手工绘制一条光滑的曲线8.1.1.2 Lagrange 插值算法及应用【例8-3】8.1.2 已知样本点的定积分计算编写函数:【例8-4】比较梯形法和插值法:求解已知5 个不均匀分布的样本点:样条插值的结果与理论之间的比较:【例8-5】8.1.3 二维网格数据的插值问题【例8-6】8.1.4 二维一般分布数据的插值问题【例8-7】【例8-8】8.1.5 高维插值问题三维的网格数据:维网格数据的生成:【例8-9】8.2样条插值与数值微积分⏹样条插值的MATLAB 表示⏹基于样条插值的数值微积分运算8.2.1 样条插值的MATLAB表示8.2.1.1 三次样条函数及其MATLAB表示【例8-10】已知其中的150 个数据点,求此稀疏数据的三次样条插值结果【例8-11】点,用三次样条插值的方法对这些数据进行拟合分段多项式拟合结果处理多个自变量的网格数据三次样条插值类:【例8-12】8.2.1.2 B 样条函数及其MATLAB表示【例8-13】8.2.2 基于样条插值的数值微积分运算8.2.2.1 基于样条插值的数值微分运算【例8-14】【例8-15】8.2.2.2 基于样条插值的数值积分运算【例8-16】考虑中较稀疏的样本点,用样条积分的方式求出定积分及积分函数8.3由已知数据拟合数学模型⏹多项式拟合⏹连分式拟合⏹有理式拟合近似⏹函数线性组合的曲线拟合方法⏹最小二乘曲线拟合8.3.1 多项式拟合【例8-17】【例8-18】8.3.2 给定函数的连分式展开及基于连分式的有理近似连分式的一般形式Cauer II 型连分式⏹调用Maple的连分式展开函数⏹提取前n 级的分子、分母。
数据插值的matlab实现
![数据插值的matlab实现](https://img.taocdn.com/s3/m/dc3afdac3b3567ec112d8a65.png)
实验8 插值实验目的:1.了解插值的基本原理; 2.熟练掌握插值的Matlab 实现; 3.会用插值方法解决一些实际问题。
实验内容:在数学中,有时需要查表,如对数表.在具体查表时,需要的数据表中可能没有,这时一般可以先找出它相邻的数,再从表中查出其相应结果,然后按一定的关系把这些相邻的数以及它相应的结果加以修正,就可求出要查数的数据结果的近似值。
这个修正关系就是一种插值.在实践中,常常需要测量某些数据,但由于客观条件的限制,所测得的数据可能不够细密,满足不了实践的需要,这时便可以通过插值方法对数据进行加密处理.此外,对于给定的离散数据对,如果要找一个函数来近似描述其对应关系,常常也需要插值.8.1 插值简介《微积分》中,用函数)(x f y =描述一条平面曲线,但在实际问题中,此函数关系往往通过实验观测得到的一组数据给出,如表8—1。
表8-1怎样根据表8-1中的数据(,),0,1,,i i x y i n =,找出自变量x 与因变量y 之间的关系)(x f 的表达式?可以采用插值。
所谓插值,就是根据给定的数据表,寻找一个解析形式的函数)(x ϕ,来近似地代替实际关系)(x f ,并且满足),,1,0()(n i y x i i ==ϕ.对于解析函数)(x ϕ,可选择不同的类型,最常用的是代数多项式.不同的插值问题,构造插值多项式的方法有时也不相同,较为常用的有拉格朗日(Lagrange)插值、分段线性插值和样条插值.8。
2 一维插值的MATLAB 实现MA TLAB 中常用的一维插值指令为interp1(x,y,cx ,’method ’)其中,x ,y 分别表示数据点的横坐标和纵坐标向量;cx 为待插值的横坐标数据向量,它不能超出x 的范围;method 为插值的使用方法,包括:nearest (最近邻点插值)、linear (线性插值)、spline (三次样条插值)和cubic (三次插值)。
基于Matlab实现多次最佳一致的函数逼近(类似求渐进函数)
![基于Matlab实现多次最佳一致的函数逼近(类似求渐进函数)](https://img.taocdn.com/s3/m/1548fb02854769eae009581b6bd97f192279bffb.png)
基于Matlab实现多次最佳⼀致的函数逼近(类似求渐进函数)%%%做系统识别很重要,⽅法上完全符合系统识别最基础的理论function [sun]=main(n)fplot('1/(x+2)',[-1,1],'r');x=ones(n+2,1);for j=0:n+1x(j+1)=cos(pi*(n+1-j)/(n+1));endfirst=ones(n+2,1);f=1./(x+2); %原函数last=first;for j=2:n+2last(j)=(-1)*last(j-1);endA=ones(n+2,n+2);A(:,1)=first;A(:,n+2)=last;for j=2:n+1for t=2:jA(:,j)=x.*A(:,j);endende=(1e-15)*first; %精度控制条件sun=A\f;while (1)at='';for i=1:nfor t=1:iif (t==1)at=strcat('(',num2str(sun(t+1)),')');elseif (t>1)xt='t';j=2;while j<txt=strcat('t*',xt);j=j+1;endat=strcat(num2str(t),'*(',num2str(sun(t+1)),')*',xt,'+',at);endendend%以下得到逼近函数ap1=sun(1:n+1,[1]);for i=1:n+1ap(i)=ap1(n+2-i);endyt=strcat('-1/(t+2)^2=',at);[y]=solve(yt,'t');y=numeric(y);%以下得到⼀组新的交错点组for i=1:n+1if y(i) < 1 & y(i)>-1for j=2:n+2if y(i)<x(j)&y(i)>x(j-1)if (1/(x(j-1)+2)-polyval(ap,x(j-1)))*(1/(y(i)+2)-polyval(ap,y(i)))> 0x(j-1)=y(i);elseif (1/(x(j-1)+2)-polyval(ap,x(j-1)))*(1/(y(i)+2)-polyval(ap,y(i)))< 0x(j)=y(i);endendendendendA=ones(n+2,n+2);A(:,1)=first;A(:,n+2)=last;for j=2:n+1for t=2:jA(:,j)=x.*A(:,j);endendf=1./(x+2);sun1=A\f;if(abs(sun1-sun)<e)break;endsun=sun1;endhold on;funcion=poly2sym(ap);ezplot(funcion,[-1,1]);num=num2str(n);legend('原函数曲线',strcat(num,'次逼近函数曲线')); title('最佳逼近⽐较⽰意图');xlabel('x的取值');ylabel('f(x)的取值');grid on;end。
MATLAB数值实验一(数据的插值运算及其应用完整版)
![MATLAB数值实验一(数据的插值运算及其应用完整版)](https://img.taocdn.com/s3/m/8a80630dfad6195f312ba682.png)
佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 插值法与数据拟合 专业班级 机械工程 姓 名 余红杰 学 号 2111505010 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、学会Lagrange 插值、牛顿插值和三次样条插值等基本插值方法;2、讨论插值的Runge 现象3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。
二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、三次样条插值 三、实验步骤1、用MA TLAB 编写独立的拉格朗日插值多项式函数2、用MA TLAB 编写独立的牛顿插值多项式函数3、用MA TLAB 编写独立的三次样条函数(边界条件为第一、二种情形)4、已知函数在下列各点的值为:根据步骤1,2,3编好的程序,试分别用4次拉格朗日多项式4()L x 、牛顿插值多项式4()P x 以及三次样条函数()S x (自然边界条件)对数据进行插值,并用图给出 {(,),0.20.08,0,1,2,,10i i i x y x i i =+= },4()L x 、4()P x 和()S x 。
5、在区间[-1,1]上分别取10,2n =用两组等距节点对龙格函数21(),(11)125f x x x =-≤≤+作多项式插值,对不同n 值,分别画出插值函数及()f x 的图形。
6、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。
(1)用这9个点作8次多项式插值8()L x 。
(2)用三次样条(第一边界条件)程序求()S x 。
7、对于给函数21()125f x x =+在区间[-1,1]上取10.2(0,1,,10)i x i i =-+= ,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第5题的结果比较。
四、实验过程与结果:1、Lagrange 插值多项式源代码:function ya=lag(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 ya=0; mu=1; %初始化%循环方式求L 系数,并求和: for i = 1:length(y) for j = 1:length(x) if i ~= jmu = mu * (xa - x(j) ) / ( x(i) - x(j) ); else continue end endya = ya + y(i) * mu ; mu = 1; end2、Newton 源代码:function ya = newton(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 %建立系数零矩阵D 及初始化:D = zeros(length(x)-1);ya = y(1);xi = 1;%求出矩阵D,该矩阵第一行为牛顿插值多项式系数:for i=1:(length(x)-1)D(i,1) = (y(i+1) -y(i))/(x(i+1) -x(i));endfor j=2:(length(x)-1)for i=1:(length(x)-j)D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j) - x(i)); endend%xi为单个多项式(x-x(1))(x-x(2))...的值for i=1:(length(x)-1)for j=1:ixi = xi*(xa - x(j));endya = ya + D(1,i)*xi;xi = 1;end3、三次样条插值多项式(1)(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x) _____________(1)%第一类边界条件下三次样条插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0左端点一次导数值;%f_n右端点一次导数值;n = length(x0);z = length(y0);h = zeros(n-1,1);k=zeros(n-2,1);l=zeros(n-2,1);S=2*eye(n);for i=1:n-1h(i)= x0(i+1)-x0(i);endfor i=1:n-2k(i)= h(i+1)/(h(i+1)+h(i));l(i)= 1-k(i);end%对于第一种边界条件:k = [1;k]; _______________________(2)l = [l;1]; _______________________(3)%构建系数矩阵S:for i = 1:n-1S(i,i+1) = k(i);S(i+1,i) = l(i);end%建立均差表:F=zeros(n-1,2);for i = 1:n-1F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i));endD = zeros(n-2,1);for i = 1:n-2F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));D(i,1) = 6 * F(i,2);end%构建函数D:d0 = 6*(F(1,2)-f_0)/h(1); ___________(4)dn = 6*(f_n-F(n-1,2))/h(n-1); ___________(5)D = [d0;D;dn]; ______________(6)m= S\D;%寻找x所在位置,并求出对应插值:for i = 1:length(x)for j = 1:n-1if (x(i)<=x0(j+1))&(x(i)>=x0(j))y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+... (y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ; break;else continue;endendend(2)(自然边界条件)源代码:仅仅需要对上面部分标注的位置做如下修改:__(1):function y=yt2(x0,y0,x)__(2):k=[0;k]__(3):l=[l;0]__(4)+(5):删除—(6):D=[0:D:0]4、——————————————PS:另建了一个f 方程文件,后面有一题也有用到。
第二章 插值法及其matlab实现 (1)-文档资料
![第二章 插值法及其matlab实现 (1)-文档资料](https://img.taocdn.com/s3/m/ff658c155727a5e9856a6151.png)
主讲教师:牛晓颖
河北大学质监学院
第二章 插值(Interpolati物之间的数量关系:函数。 有两种情况: 一是表格形式——一组离散的数据来表示函数关系;另 一种是函数虽然有明显的表达式,但很复杂,不便于研究和 使用。 从实际需要出发:对于计算结果允许有一定的误差,可 以把函数关系用一个简单的便于计算和处理的近似表达式来 代替,从而使问题得到简化。 插值法就是一种基本方法 一般地,构造某种简单函数代替原来函数。
(x - xj ) li (x) = (xi - xj ) ji
n j=0
L ) = li (x )y n(x i
i= 0
n
与 节点 有关,而与 f 无关
拉格朗日 多项式
定理
(唯一性) 满足 P 的 n 阶插值 ( x ) = y = 0 , ... , n i i,i
L ) = li (x )y n(x i
然而,方程组的求解也并不是一件容易的事。
对于线性插值的两种形式解进行适当的分析, 从中寻求 规律而得到启发,就有了所谓的拉格朗日插值法(公式)和牛 顿插值(公式).
我们先来看看如何得到二次拉格朗日插值公式。
1.2.2 基函数法 首先, 线性插值的两点式可看作是两个特殊的一次式 的一种线性组合. 1 x - x0 x - x1 y0 + y1 = l i ( x ) y i 两点式 P1 ( x ) =
1 l0(x)= 0(x -x1)(x -x2), 0= (x0-x1)(x0-x2) 同理可得 1 l1(x)= 1(x -x0)(x -x2), 1= (x1-x0)(x1-x2) 1 l2(x)= 2(x -x0)(x -x1), 2= (x2-x0)(x2-x1) (x -x0)(x -x1) (x -x0)(x -x2) P2(x)= y0 + y1 + y2 (x0-x1)(x0-x2) (x2-x0)(x2-x1) (x1-x0)(x1-x2) 此即二次拉格朗日插值公式, 其中, l0(x), l1(x), l2(x)是满足 (2.1)的特殊(基本)二次插值多项式;称为二次插值基函数. (x -x1)(x -x2)
(完整word版)matlab插值法实例
![(完整word版)matlab插值法实例](https://img.taocdn.com/s3/m/2df08e08c8d376eeafaa31bf.png)
2021年7月30日星期五多云文档名称:《(完整word版)matlab插值法实例》文档作者:凯帆创作时间:2021.07.30Several Typical Interpolation in Matlab Lagrange InterpolationIf x=175, while y=?Solution:Lagrange Interpolation in Matlab:function y=lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endinput:x0=[144 169 225]y0=[12 13 15]y=lagrange(x0,y0,175)obtain the answer:x0 =144 169 225y0 =12 13 15y =13.2302Spline InterpolationResolve the cubic spline function s (x )Solution :Input x=[ 1 4 9 6];y=[ 1 4 9 6];x=[ 1 4 9 6];pp=spline(x,y)pp =form: 'pp'breaks: [1 4 6 9]coefs: [3x4 double]pieces: 3order: 4dim: 1output : pp.coefsans =-0.0500 0.5333 -0.8167 1.0000-0.0500 0.0833 1.0333 2.0000-0.0500 -0.2167 0.7667 4.0000It shows the coefficients of cubic spline polynomial , so:S (x )=,169,3)9(1484.0)9(0063.0)9(0008.0,94,2)4(2714.0)4(0183.0)4(0008.0,41,1)1(4024.0)1(0254.0)1(0008.0232323≥≤+-+---≥≤+-+---≥≤+-+---x x x x x x x x x x x xNewton’s InterpolationResolve 65Solution:Newton’s Interpolation in matlab :function yi=newint(x,y,xi);n=length(x);ny=length(y);if n~=nyerrorendY=zeros(n);Y(:,1)=y';for k=1:n-1for i=1:n-kif abs(x(i+k)-x(i))<epserrorendY(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));endendm=length(xi);yi=zeros(1,m);for i=1:n;z=ones(1,m);for k=1:i-1;z=z.*(xi-x(k));endyi=yi+Y(1,i)*z;endinput:x=[1 4 9];y=[1 2 3];xi=[5 6];yi=newint(x,y,xi);operate the program and obtain the answer :yi=2.2667 2.5000The difference between several One-dimensional Interpolations like `nearest`、`linear`、`spline`、`cubic`Supposing ()π4,0∈x ,y = sin(x).*exp(-x/5),plot the figure .Solution:program of MATLAB :x = 0:1:4*pi;y = sin(x).*exp(-x/5);xi = 0:0.1:4*pi;y1 = interp1(x, y, xi, 'nearest');y2 = interp1(x, y, xi, 'linear');y3 = interp1(x, y, xi, 'spline');y4 = interp1(x, y, xi, 'cubic');plot(x, y , 'o', xi ,y1 ,'g-' ,xi ,y2 ,'r:' ,xi ,y3 ,'k-.', xi, y4, 'b--'); legend('Original', 'Nearest', 'Linear', 'Spline', 'Cubic');operate the program and obtain the figure :(It shows that the smoothness of 'nearest' is the worst and `cubic` is the best.)。
第七讲matlab在插值与逼近中的应用【优质】
![第七讲matlab在插值与逼近中的应用【优质】](https://img.taocdn.com/s3/m/26efa693bdeb19e8b8f67c1cfad6195f312be81e.png)
第七讲 MATLAB 在插值与逼近中的应用1 插值与逼近 1.1 为什么要逼近数学上来讲,逼近就是在精度要求的范围内对要研究函数给出近似的函数值,甚至函数表达式。
为什么我们不直接计算要研究的函数或函值本身 ?理由如下:● 用给定函数表达式计算函值很困难甚至根本不可能。
如,sinx 、tgx 、Inx 等。
● 由实验与测量得到的变量间对应关系常常是一函数值表(今后我们也称为表列函数)。
但表所表示函在表某个中间位置的函数值却是无法知道的。
● 函数可能被隐含地定义,而事实上又不能用一个直接规律给出。
例如,由方程e y +y+sinx=0确定的隐含数。
● 计算逼近函数的值往往比计算函值本身更快。
特别地,当原来函数以无穷级数的形式给出,只能如此。
● 计算机存储量有限,而其计算量相对来说却很大,从某种意义上来讲,逼近实际上也是为了取长补短。
如,我们不可能将所有的sinx 的值都存在计算机内,但我们将会看到,利用琏近我们的却可以很方便地算出任一点的函数值。
● 实际应用中,只要函数值符合某一个精度要求也就够了。
1.2 逼近的分类逼近函数是为了更方便地计算函数,更简单地表达函数。
因此,常用一些简单函数或这些简单函数的线性组合来逼近。
通常的逼近形式有:我们称ф(x ),i =0,1,2,…,m 为逼近函数,f(x)称为逼近函数。
1.3 逼近的原则已知函数f(x)在n+1个点x i (i =0,1,2,…,n )的函数值为f(x i )(i =0,1,2,…,n )。
要求出f(x)的逼近函数g(x),则要选定逼近基函数,确定上式中的常数a i (i =0,1,2,…,m )。
基函数选定往往跟实际问题有关;而确定常数ai (I =0,1,2,…,m )以保证逼近函数g(x)能更近似地表示函数f(x),则是我们这里要解决的问题。
为此,就要首先给出一个准则,来描述“更近似”。
;)(,)()(/)(4]cos sin [32;p(x)100mk ∑∑∑∑======+=mj j j m n i ii n m n mk k k k k x b x p x a x p x p x p kx b kx a x a ,其中式之比.有理分式:两个多项;.三角多项式:项式来逼近;的区间上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据插值和函数逼近1数据插值由已知样本点,以数据更为平滑为目标,求出其他点处的函数值。
在信号处理与图像处理上应用广泛。
求解方法:yl=interpl (x, y, xl,'方法,)zl=in terp2 (x, y, z, xl, yl,'方法,)1. 1 一维数据的插值例:假设样本点来自/(兀)=(亍_3兀+ 50叫山兀,进行插值处理,得到平滑的曲线。
x二0:0. 1:1; y二(x・”2-3*x+5). *exp (-5*x). *sin(x); plot (x, y,' ; hold on ;xs二0:0. 01:1;yl= interpl (x, y, xs) ; % 线性插值y2= interpl (x, y, xs, 'cubic'、 % 分段 3 次Hermite 扌西值y3= interpl (x, y, xs, 'spline'、% 分段三次样条插值plot (xs, yl,,r , xs, y2,,g , xs, y3,,b,);例:草图样条曲线功能。
function sketch()x=[] ; y=[] ; gca;hold on; axis([0 1, 0 1]); while 1[xO, yO, button]二ginput (1);16sif (isempty (button)) break; end; x=[x xO]: y=[y yO]; plot (x, y,' ; end;xx 二[x(l) : (x(end)-x(1))/100:x(end)]; yy=interpl (x, y, xx,' spline'); plot (xx, yy, x, y ,‘*'); end 1.2二维网格数据的插值例3 :假设样本点来自2 = (/_2兀0宀宀卩,进行插值处理,得到平滑的曲 面。
[x, y]=meshgrid(-3:0. 6:3, -2:0. 4:2);z 二(x.八 2 2*x)・ * exp (-x ・"2—y. ^2~x ・ *y) ; mesh (x, y, z);[xl, yl]=meshgrid(-3:0. 2:3, -2:0. 2:2); zl=interp2 (x, y, z, xl, yl) ;mesh(xl, yl, zl);zl=interp2 (x, y, z, xl, yl,' cubic') ;mesh (xl, yl, zl); zl=interp2 (x, y, z,xl, yl, ' spline') ;mesh(xl, yl, zl);/4-1 2-2-41.5丫1 . 0.5, 0. •0.5、f ・K、1. 3二维一般分布数据的插值例4 :假设样本点来自z = (x 2-2兀)旷宀宀卩面。
x=-3+6*rand(200, 1); y=~2+4*rand(200, 1);z 二(x. ”2-2*x)・ *exp (-x. "2-y. 2-x. *y) ; plot3 (x, y, z,' ; [xl, yl]二meshgrid(-3:0・ 2:3, -2:0. 2:2); zl=griddata(x, y, z, xl, yl, ' cubic') ; mesh(xl, yl, zl) zl=griddata(x, y, z, xl, yl, ' v4') ; mesh(xl, yl, zl)2样条插值函数逼近由已知样本点,求能对其较好拟合的函数表达式。
求解方法: %定义一个三次样条函数类 %定义一个k 次E 样条函数类 %计算插值结果 %绘制插值结果例:从y = sin (Q 中取样本点,计算三次样条函数。
%准备样本点sin(t)~Illix 二[0, 0. 4, 1, 2, pi, 1. 5*pi, 2*pi]; 1y=si n(x);05-/ \ •%计算三次样条函数Oc>S=csapi (x, y);\ /); hold on;•0.5- \ /ezplotC sin(t)', [0 2*pi]);•111111fl,进行插值处理,得到平滑的曲 S=csapi (x, y); S=spapi (k, x, y); ys=fnval (S,xs);6个曲线段的参数方程的系数S・ coefs :-0. 1393 -0.0250 1. 0059 0-0. 1393 -0. 1923 0.9189 0.3894-0・ 0268 -0. 4431 0. 5377 0. 84150. 1766 -0. 5236 -0. 4289 0.90930. 0688 0. 0813 -0.9339 0.00000. 0688 0. 4053 -0. 1697 -1.0000第2个曲线段的参数方程:S2(x) = -0.1393(%一0・4尸-o」923(兀一0.4)2 + 0.9189(兀一0.4) + 0.3894练习:利用上例中的变量S,生成各个曲线段的参数方程,并绘制图形。
例:从y = sin(x)中取样本点,计算三次B样条函数。
3多项式的插值与函数逼近3. 1多项式的基本运算设多项式为:X4-12X3+25X +116直接输入系数向量创建多项式pl=[l -12 0 25 116]: y=poly2sym(pl);求多项式的根r^roots(pl);由多项式的根逆推多项式p2二poly (r) ; p2 和pl 等价求多项式的值polyval (pl, [1 2; 3 4]); %以数组为运算单位polyvalm(pl, [1 2; 3 4]); %以矩阵为运算单位求多项式的微积分q=polyder (p) ; % 导数r=polyint (q) ; % 积分设多项式为:F + 2x + 3与x + 2。
a=[l 2 3]: b二[1 2]: c=conv (a, b) ; % 乘积[q, r]=deconv(a, b) ; % 相除q=l 0 %商多项式r=0 0 3 %余多项式3. 2 Lagrange插值算法function ys二lagrange(xO,yO,xs)ii=l:length(xO); ys=zeros(size(xs));Q •••for 1=11ij二find (ii~=i); yl=ones (size(xs)); for j二l:length(ij) yl=yl. *(xs-xO(ij (j)));endys=ys+yl*yO(i)/prod( xO(i)-xO(ij));endx=0:0. 1:1; y 二(x.八2一3* x+5)・ * exp (一5 *x)・ * sin (x); xs=0:0. 01:1; ys二lagrange (x, y, xs);plot (x, y,,, xs, ys)3.3多项式函数逼近求去■p二polyfit(x, y, n);计算n次多项式的降幕排列的系数向量Y二polyval© x); 计算多项式的值主要用于针对实验数据,进行解析描述。
例:假设样本点来自f(x) = (x2-3x + 5)^ sinx f比较3次、5次多项式插值。
x=0:0. 1:1; y= (x. ”2-3*x+5). *exp (-5*x). *sin(x);plot (x, yhold on ;xs=0:0. 01:1;p3= polyfi方(x, y, 3) ; ys=p<?7yra7(p3, xs) ; plot (xs, ys,' r'); p5= polyfi t(x, y, 5) ; ys=po7yra7(p5, xs) ; plot (xs, ys,' b‘);4函数设计中的参数逼近4.1函数线性组合的参数逼近已知某函数是若干已知函数的组合,y = cj x{x) + c2f2(x) + -- + c n f n(x) = FC r已知数据CWi),(兀2,为),. (%,%),则有方程组:F・ C = YF =~ fiW flWf2MfnW'fnM,C -qC2,y =丿(无M)力(兀M)_有n个待求的未知系数,有M个方程,所以只能求方程的最小二乘解:C = F\Y例:已知函数原型为g(x) = + + c3 cos(-2x)^4^ + c4x2r已知以下数据,求待定系数C。
x二[0, 0. 2, 0. 4, 0. 7, 0. 9, 0. 92, 0. 99, 1. 2, 1. 4, 1. 4& 1. 5]'; y二[2. 88, 2. 2576, 1. 9683, 1. 9258, 2. 0862, 2. 109, 2. 1979, 2. 5409,2. 9627,3. 15 F二[ones(size(x)), exp(一3*x), cos(_2*x)・ *exp(_4*x), x. ”2];C=F\y; % 解:[1・ 2200 2. 3397 -0. 6797 0. 8700]WWxs二[0:0・01:l・5]‘ ;F二[ones(size(xs)), exp(一3*xs), cos(一2*xs). *exp(一4*xs), xs. ”2]; ys二F*C;plot (xs, ys, x, y,,*,);4.2函数中的参数逼近已知数据(壬,必),(x2, J2), . (X N QQ ,满足函数f(a,Q r其中a是待定系数的向量。
目标是求出仏N即定义最优化问题:7 = min^[x -f(^x/)]2/=![a, res] =1 sqcurvefi t (fun, aO, x, y)例:设采样点如下:x=0:1:10;y-O. Z岔exp(-0 213^x) +0. 5■合exp(-0 Z解x). *sin(Z 23^x);已知数据满足/(。
,无)=4*严"+。
3严7讹5无),求最佳拟合的参数。
4多项式运算。