资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,MATLAB SDU,*,数值微积分以及数值分析,1,MATLAB SDU,数值微分,数值微分的实现,两种方式计算函数,f(x,),在给定点的数值导数:,1.,用多项式或者样条函数,2.,利用数据的有限差分,在,MATLAB,中,没有直接提供求数值导数的函数,只有计算向前差分的函数,diff,,,其调用格式为:,DX=diff(X),:,计算向量,X,的向前差分,,DX(i)=X(i+1)-X(i),,,i=1,2,n-1,。,DX=diff(X,n),:,计算,X,的,n,阶向前差分。例如,,diff(X,2)=diff(diff(X),。,DX=diff(A,n,dim),:,计算矩阵,A,的,n,阶差分,,dim=1,时,(,缺省状态,),,按列计算差分;,dim=2,,,按行计算差分。,例子:,help diff,2,MATLAB SDU,拉普拉斯微分算子,MATLAB,中的离散拉普拉斯微分算子调用格式,dell2(U),H,elp dell2,3,MATLAB SDU,数值积分,数值积分基本原理,求解定积分的数值方法多种多样,如简单的梯形法、辛普生,(Simpson),法、牛顿柯特斯,(Newton-Cotes),法等都是经常采用的方法。它们的基本思想都是将整个积分区间,a,b,分成,n,个子区间,x,i,x,i+1,,,i=1,2,n,,,其中,x,1,=a,,,x,n+1,=b,。,这样求定积分问题就分解为求和问题。,4,MATLAB SDU,数值积分的实现方法,低阶法,-,自适应递推辛普生法,基于变步长辛普生法,,MATLAB,给出了,quad,函数来求定积分。该函数的调用格式为:,I=,quad(fname,a,b,tol,trace,),I,n,=,quad(fname,a,b,tol,trace,),其中,fname,是被积函数名。,a,和,b,分别是定积分的下限和上限。,tol,用来控制积分精度,缺省时取,tol,=0.001,。,trace,控制是否展现积分过程,若取非,0,则展现积分过程,取,0,则不展现,缺省时取,trace=0,。,返回参数,I,即定积分值,,n,为被积函数的调用次数。,5,MATLAB SDU,例 求,0.3pi,定积分,f=exp(-0.5*x)*sin(x+pi/6);,。,调用数值积分函数,quad,求定积分。,S,n=quad(exp(-0.5*x).*sin(x+pi/6),0,3*pi),S=,0.9008,n=,77,6,MATLAB SDU,2,高阶法:自适应牛顿柯特斯法,基于牛顿柯特斯法,,MATLAB,给出了,quadl,函数来求定积分。该函数的调用格式为:,I,n=,quadl(fname,a,b,tol,trace,),其中参数的含义和,quad,函数相似,只是用高阶自适应递推法,该函数可以更精确地求出定积分的值,且一般情况下函数调用的步数明显小于,quad,函数,从而保证能以更高的效率求出所需的定积分值。,7,MATLAB SDU,例:前一例子,分别用,quad,函数和,quadl,函数求定积分的近似值,并在相同的积分精度下,比较函数的调用次数,例:求,0,pi,定积分,f=x*sin(x)/(1+cos(x)*,cos(x,),调用函数,quadl,求定积分。,I=,quadl(x,.*sin(x)./(1+cos(x).*cos(x),0,pi),I=,2.4674,8,MATLAB SDU,3,T,rapz,:,计算梯形面积的和来计算定积分,在,MATLAB,中,对由表格形式定义的函数关系的求定积分问题用,trapz(X,Y,),函数。其中向量,X,Y,定义函数关系,Y=f(X),。,例,用,trapz,函数计算定积分。,命令如下:,X=1:0.01:2.5;,Y=exp(-X);%,生成函数关系数据向量,trapz(X,Y,),ans,=,0.28579682416393,9,MATLAB SDU,函数极值,MATLAB,中只存在处理极小值命令的函数,极大值的处理等价于,-,f(x,),的极小值,局域极值的函数调用:,x=fminbnd(fun,x1,x2,options),:一元函数的,x1,x2,范围内极小值,x=fminsearch(fun,x0,options):,单纯形法求函数极值,,x0,为向量,X=fminunc(fun,X0,options):,拟牛顿法多元函数极值点,10,MATLAB SDU,函数零点,Matlab,中用,fzero,来寻找单变量函数值为零的自变量的值,调用格式:,x=fzero(fun,x0),x0,指定搜索的点,注意:,fzero,并不一定能找到零点,搜索方法:,先猜测一个初时零点所在的区间;然后通过一些计算,使得猜测值不断精确,或者使得猜测区间不断收缩,直至达到预先指定的精度,终止计算。,help,fzero,11,MATLAB SDU,函数曲线绘制,绘制函数曲线的专用函数,fplot,的调用,FPLOT(FUN,LIMS),特点:绘图数据由函数在指定范围内自适应产生,根据函数曲线的平滑程度自动调整数据点的密度,绘制函数曲线的一般方法,计算出函数在某一区间值,然后根据两组数据值绘制出函数曲线,但是如果函数在某些区间是平坦无激励的,某些区间却是失控的,传统方法无法表达函数的真正特性,12,MATLAB SDU,离散傅立叶变换,信号处理中的频谱分析,一维离散傅立叶变换函数,其调用格式与功能为:,(1),fft(X,),:返回向量,X,的离散傅立叶变换。设,X,的长度,(,即元素个数,),为,N,,若,N,为,2,的幂次,则为以,2,为基数的快速傅立叶变换,否则为运算速度很慢的非,2,幂次的算法。对于矩阵,X,,,fft(X,),应用于矩阵的每一列。,13,MATLAB SDU,(2),fft(X,N,),:计算,N,点离散傅立叶变换。它限定向量的长度为,N,,若,X,的长度小于,N,,则不足部分补上零;若大于,N,,则删去超出,N,的那些元素。对于矩阵,X,,它同样应用于矩阵的每一列,只是限定了向量的长度为,N,。,(3),fft(X,dim,),或,fft(X,N,dim,),:这是对于矩阵而言的函数调用格式,前者的功能与,FFT(X),基本相同,而后者则与,FFT(X,N),基本相同。只是当参数,dim=1,时,该函数作用于,X,的每一列;当,dim=2,时,则作用于,X,的每一行。,14,MATLAB SDU,值得一提的是,当已知给出的样本数,N0,不是,2,的幂次时,可以取一个,N,使它大于,N0,且是,2,的幂次,然后利用函数格式,fft(X,N,),或,fft(X,N,dim,),便可进行快速傅立叶变换。这样,计算速度将大大加快。,相应地,一维离散傅立叶逆变换函数是,ifft,。,ifft(F,),返回,F,的一维离散傅立叶逆变换;,ifft(F,N,),为,N,点逆变换;,ifft(F,dim,),或,ifft(F,N,dim,),则由,N,或,dim,确定逆变换的点数或操作方向。,15,MATLAB SDU,例,给定数学函数,x(t,)=12sin(210t+/4)+5cos(240t),取,N=128,,试对,t,从,01,秒采样,用,fft,作快速傅立叶变换,绘制相应的振幅,-,频率图。,在,01,秒时间范围内采样,128,点,从而可以确定采样周期和采样频率。由于离散傅立叶变换时的下标应是从,0,到,N-1,,故在实际应用时下标应该前移,1,。又考虑到对离散傅立叶变换来说,其振幅,|,F(k,)|,是关于,N/2,对称的,故只须使,k,从,0,到,N/2,即可。,16,MATLAB SDU,程序如下:,N=128;%,采样点数,T=1;%,采样时间终点,t=linspace(0,T,N);%,给出,N,个采样时间,ti(I,=1:N),x=12*sin(2*pi*10*t+pi/4)+5*cos(2*pi*40*t);%,求各采样点样本值,x,dt,=t(2)-t(1);%,采样周期,f=1/dt;%,采样频率,(Hz),X=,fft(x,);%,计算,x,的快速傅立叶变换,X,F=X(1:N/2+1);%,F(k,)=,X(k)(k,=1:N/2+1),f=f*(0:N/2)/N;%,使频率轴,f,从零开始,plot(f,abs(F,),-*)%,绘制振幅,-,频率图,xlabel(Frequency,);,ylabel(|F(k,)|),17,MATLAB SDU,
展开阅读全文