您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 求职简历 > Matlab多项式插值与曲线拟合(有源代码)
Matlab多项式插值与曲线拟合一、基本统计处理1、查取最大值MAX函数的命令格式有:[Y,I]=max(X):将max(X)返回矩阵X的各列中的最大元素值及其该元素的位置赋予行向量Y与I;当X为向量时,则Y与I为单变量。[Y,I]=max(X,[],DIM):当DIM=1时按数组X的各列查取其最大的元素值及其该元素的位置赋予向量Y与I;当DIM=2时按数组X的各行查取其最大的元素值及其该元素的位置赋予向量Y与I.max(A,B):返回一个与A,B同维的数组,其每一个元素是由A,B同位置上的元素的最大值组成。【例1】查找下面数列x的最大值。x=[359618]%产生数列xx=359618y=max(x)%查出数列x中的最大值赋予yy=9[y,l]=max(x)%查出数列x中的最大值及其该元素的位置赋予y,ly=9l=3【例2】分别查找下面3×4的二维数组x中各列和各行元素中的最大值。x=[1842;9625;3671]%产生二维数组xx=184296253671y=max(x)%查出二维数组x中各列元素的最大值产生赋予行向量yy=9875[y,l]=max(x)%查出二维数组x中各列元素的最大值及其这些%元素的行下标赋予y,ly=9875l=2132[y,l]=max(x,[],1)%本命令的执行结果与上面命令完全相同y=9875l=2132[y,l]=max(x,[],2)%由于本命令中DIM=2,故查找操作在各行中进行y=897l=213[y,l]=max(x)%查出二维数组x中各列元素的最大值及其这些%元素的行下标赋予y,ly=9875l=2132[y,l]=max(x,[],1)%本命令的执行结果与上面命令完全相同y=9875l=2132[y,l]=max(x,[],2)%由于本命令中DIM=2,故查找操作在各行中进行y=897l=2132、查取最小值MIN函数用来查取数据序列的最小值。它的用法与命令格式与MAX函数完全一样,所不同的是执行的结果是最小值。3、求中值所谓中值,是指在数据序列中其值的大小恰好在中间。例如,数据序列9,-2,5,7,12的中值为7。如果为偶数个时,则中值等于中间的两项之平均值。MEDIAN函数调用的命令格式有:Y=median(X):将median(X)返回矩阵X各列元素的中值赋予行向量Y。若X为向量,则Y为单变量。Y=median(X,DIM):按数组X的第DIM维方向的元素求其中值赋予向量Y。若DIM=1,为按列操作;若DIM=2,为按行操作。若X为二维数组,Y为一个向量;若X为一维数组,则Y为单变量。【例4】试分别求下面数列x1与x2的中值。x1=[9-25712];%奇数个元素y1=median(x)y1=7x2=[9-256712];%偶数个元素y2=median(x)y2=6.5000【例5】对下面二维数组x,试从不同维方向求出其中值。x=[1842;9625;3671]%产生一个二维数组xx=184296253671y0=median(x)%按列操作y0=3642y1=median(x,1)%此时DIM=1,故按列操作,结果y1为行向量y1=3642y2=median(x,2)%此时DIM=2,故按行操作,结果y2为列向量y2=3.00005.50004.50004、求和命令格式有:Y=sum(X):将sum(X)返回矩阵X各列元素之和赋予行向量Y;若X为向量,则Y为单变量。Y=sum(X,DIM):按数组X的第DIM维的方向的元素求其和赋予Y。若DIM=1,为按列操作;若DIM=2,为按行操作。若X为二维数组,Y为一个向量;若X为一维数组,则Y为单变量。例如:x=[456;148]x=456148y=sum(x,1)y=5914y=sum(x,2)y=15135、求平均值MEAN函数调用的命令格式有:Y=mean(X):将mean(X)返回矩阵X各列元素之的平均值赋予行向量Y。若X为向量,则Y为单变量。Y=mean(X,DIM):按数组X的第DIM维的方向的元素求其平均值赋予向量Y。若DIM=1,为按列操作;若DIM=2,为按行操作。若X为二维数组,Y为一个向量;若X为一维数组,则Y为单变量。6、求积命令格式有:Y=prod(X):将prod(X)返回矩阵X各列元素之积赋予行向量Y。若X为向量,则Y为单变量。Y=prod(X,DIM):按数组X的第DIM维的方向的元素求其积赋予向量Y。若DIM=1,为按列操作;若DIM=2,为按行操作。若X为二维数组,Y为一个向量;若X为一维数组,则Y为单变量。7、求累计和、累积积、标准方差与升序排序MATLAB提供的求累计和、累积积、标准方差与升序排序等函数分别为CUMSUM、CUMPROD、STD和SORT,这里仅STD函数为MATLAB程序,其余均为内部函数。这些函数调用的参数与操作方式都与上小节的MEDIAN(中值)函数基本上一样,因此不作详细的介绍。二、插值与曲线拟合1.多项式的曲线拟合对于实验或统计数据,为了描述不同变量之间的关系,经常采用拟合曲线的办法。拟合曲线,就是要根据已知数据找出相应函数的系数。通常情况下,已知数据往往多于未知系数的个数,所以曲线拟合实质上是解超线性方程组。曲线拟合涉及回答两个基本问题:最佳拟合意味着什么?应该用什么样的曲线?可用许多不同的方法定义最佳拟合,并存在无穷数目的曲线。所以,从这里开始,我们走向何方?正如它证实的那样,当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的。数学上,称为多项式的最小二乘曲线拟合。如果这种描述使你混淆,再研究图11.1。虚线和标志的数据点之间的垂直距离是在该点的误差。对各数据点距离求平方,并把平方距离全加起来,就是误差平方和。这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合。最小二乘这个术语仅仅是使误差平方和最小的省略说法。命令格式:p=polyfit(x,y,n):在向量p中返回多项式的系数。其中x和y为已知数据的横坐标和纵坐标向量,n为多项式的次数;[p,s]=polyfit(x,y,n):同时还返回一个误差估计数组s。Matlabpolyval函数功能多项式的估值运算使用方法y=polyval(p,x)返回n次多项式在x处的值。输入变量p是一个长度为n+1的向量,其元素为按降幂排列的多项式系数。y=p1*x^n+p2*x^(n-1)+...+pn*x+p(n+1)x可以是一个矩阵或者一个向量,在这两种情况下,polyval计算在X中任意元素处的多项式p的估值。举例对多项式p(x)=3*x^2+2*x+1,计算在x=5,7,9的值。p=[321];x=[5,7,9];polyval(p,[579])%结果为ans=8616226212345x=(0:0.1:2.5);%x轴是0.5,只不过每隔0.1显示一个点(图中的圈)y=erf(x);%误差函数,非初等函数p=polyfit(x,y,6);f=polyval(p,x);plot(x,y,'o',x,f,'-');2.一维插值插值定义为对数据点之间函数的估值方法,这些数据点是由某些集合给定。当人们不能很快地求出所需中间点的函数值时,插值是一个有价值的工具。例如,当数据点是某些实验测量的结果或是过长的计算过程时,就有这种情况。差值在信号和图像处理方面有很重要的应用。命令格式:yi=interp1(x,Y,xi)yi=interp1(x,Y,xi,method)其中,xi为需要插值的位置所组成的向量,yi为根据插值算法求得的值所组成的向量。x和Y为已知的数据点向量。参量用于确定具体的插值方法,包括:‘linear’:表示采用线性插值方法‘cubic’:表示采用三次插值方法‘nearest’:表示采用最近点插值方法‘spline’:表示采用三次样条插值方法这四种方法都要求把已知数据按x作升序或降序排列在选择插值方法时,应该考虑速度、内存需要和光滑问题。在上述四种方法中,最近点插值法最快,但它的插值很粗糙。线性插值较最近点插值法需要更多的内存和计算时间,但插值曲线连续,并且导数连续。样条插值法虽然比三次插值法所需的内存少,但耗时多,不过插值曲线最光滑。需要说明的是,由于样条插值的特性,当已知数据分布不均匀时,插值结果不太理想。【例12】下面两个向量分别包括了1900到1990年间美国人口普查的年代和相应的人口数(单位为百万)t=[1900191019201930194019501960197019801990]p=[75.995091.9720105.7110123.2030131.6690150.6970179.3230203.2120226.5050249.6330]估计1975年的人口数interpl(t,p,1975)估计1900到2000年每一年的人口数x=1900:1:2000;y=interp1(t,p,x,'spline');plot(t,p,'o',x,y)三.离散傅立叶变换例给定数学函数x(t)=12sin(2π×10t+π/4)+5cos(2π×40t)取N=128,试对t从0~1秒采样,用fft作快速傅立叶变换,绘制相应的振幅-频率图。在0~1秒时间范围内采样128点,从而可以确定采样周期和采样频率。由于离散傅立叶变换时的下标应是从0到N-1,故在实际应用时下标应该前移1。又考虑到对离散傅立叶变换来说,其振幅|F(k)|是关于N/2对称的,故只须使k从0到N/2即可。1N=128;%采样点数2T=1;%采样时间终点3t=linspace(0,T,N);%给出N个采样时间ti(I=1:N)4x=12*sin(2*pi*10*t+pi/4)+5*cos(2*pi*40*t);%求各采样点样本值x5dt=t(2)-t(1);%采样周期6f=1/dt;%采样频率(Hz)7X=fft(x);%计算x的快速傅立叶变换X,ifft是逆变换8F=X(1:N/2+1);%F(k)=X(k)(k=1:N/2+1)9f=f*(0:N/2)/N;%使频率轴f从零开始10plot(f,abs(F),'-*')%绘制振幅-频率图11xlabel('Frequency');12ylabel('|F(k)|')四.多项式计算1多项式的四则运算1.多项式的加减运算2.多项式乘法运算函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量。例求多项式x4+8x3-10与多项式2x2-x+3的乘积。3.多项式除法函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。这里,Q和r仍是多项式系数向量。deconv是conv的逆函数,即有P1=conv(P2,Q)+r。2多项式的导函数(和diff不同的是polyder中p为向量而diff中是符号表达式)对多项式求导数的函数是:p=polyder(P):求多项式P的导函数p=polyder(P,Q):求P·Q的导函数[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。3多项式的求值MATLAB提供了两种求多项式值的函数:polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。1.代数多项式求值polyval函数用来求代数多项式的值,其调用格式为:Y=polyval(P,x)若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。例已知多项式x4+8x3-10,分别取x=1.2和一个2×3矩阵为自变量计算该多项式的值。2.矩阵多项式求值rank(A)求秩,eig(A)求特征值。polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。polyva
本文标题:Matlab多项式插值与曲线拟合(有源代码)
链接地址:https://www.777doc.com/doc-2887337 .html