资源描述
MATLAB提供大量具有强大数值计算功能的函数。本章着重介绍关于数值计算的函数。 1多项式表示法 2多项式求值 3多项式乘法和除法 4多项式的微积分 5多项式的根和由根创建多 6多项式部分分式展开 7多项式曲线拟合 8多曲线拟合图形用户接口 MATLAB提供了关于多项式的函数: 多项式的值; 多项式的根和微分; 多项式拟合曲线; 部分分式。 多项式函数 MATLAB采用行向量表示多项式系数,多项式系数按降幂排列。 函数poly2str()将多项式系数向量转换为完整形式。 函数polyval()计算多项式的值,其具体使用方法如下: y = polyval(p,x),p为多项式系数行向量,x代入多项式的值; Y = polyvalm(p,X),把矩阵X代入多项式p中进行计算。 函数conv()和deconv()进行多项式乘法和除法,其具体使用方法如下: w = conv(u,v),实现多项式乘法,返回结果多项式的系数行向量; q,r = deconv(u, v),实现多项式除法。 (1)多项式的微分 函数polyder()计算多项式的微分,其具体使用方法如下: k = polyder(p),返回多项式p微分的系数向量; k = polyder(a,b),返回多项式a b乘积微分的系数向量; q,d = polyder(b,a),返回多项式b/a微分的系数向量。 函数polyint()计算多项式的不定积分,其具体使用方法如下: s=polyint(p,k),返回多项式p不定积分的系数向量。 (1)多项式的根 函数roots()求多项式的根,其具体使用方法如下: r = roots(c),返回多项式c的所有根r。 (2)由根创建多项式 函数poly()实现由根创建多项式,其具体使用方法如下: p = poly(r),输入r是多项式所有根,返回值为多项式的系数向量; p = poly(A),输入A是方阵,返回值为A的特征多项式的系数向量。 函数residue()将多项式之比按部分分式展开,其具体使用方法如下: r,p,k = residue(b,a),求多项式b/a的部分分式展开; b,a = residue(r,p,k),从部分分式得到多项式向量。 函数polyfit()采用最小二乘法对给定数据进行多项式拟合,其具体使用方法如下: p = polyfit(x,y,n),采用n次多项式p来拟合数据x和y。 运行结果如下图所示。 曲线拟合的图形用户接口可通过图形窗口的【Tools】菜单中【Basic Fitting】选项启动。 运行结果如下图所示。 6.2.1 一维插值6.2.2 二维插值 插值是根据已知输入/输出数据集和当前输入估计输出值。MATLAB提供大量的插值函数,如下表所示。插值函数 一维插值就是对函数y=f(x)进行插值,一维插值的原理如下图所示。 函数interp1()实现一维插值,其具体使用方法如下: yi=interp1(x,y,xi),x,y是已知数据集且具有相同长度的向量; yi = interp1(y,xi),默认x为1:n,其中n为向量y的长度; yi = interp1(x,y,xi,method),method用于指定插值的方法。 运行结果如下图所示。 二维插值是对两变量的函数z=f(x,y)进行插值,二维插值的原理如下图所示: 函数interp2()实现二维插值,其具体使用方法如下: zi = interp2(x,y,z,xi,yi),x,y,z为原始数据,返回值zi是插值结果; zi = interp2(z,xi,yi),若z=nm,则x=1:n,y=1:m; zi = interp2(x,y,z,xi,yi,method),method用于指定插值的方法 。 运行结果如下图所示。 6.3.1 基本数据分析函数 6.3.2 协方差和相关系数矩阵 6.3.3 有限差分和梯度 6.3.4 信号滤波和卷积 6.3.5 傅立叶变换 MATLAB提供大量数据分析的函数,首先给出如下约定: 一维数据分析时,数据可以用行向量或者列向量来表示; 二维数据分析时,数据可以用多个向量或者二维矩阵来表示。 1最大值、最小值、平均值、 中间值、元素求和 2标准差和方差 3元素排序 续表 运行结果如下,并如下图所示。 MATLAB提供对实数、复数和字符串的排序函数。 函数sort()实现数值的排序; 函数sortrows()实现对行的排序。 函数cov()计算随机变量的协方差矩阵,其具体使用方法如下: C = cov(X),计算X代表的随机变量的协方差矩阵; C = cov(x,y),x和y必须是具有相同长度的向量; C = cov(X,1),计算X代表的随机变量的协方差矩阵; C = cov(x,y,1),x和y必须是具有相同长度的向量。 函数corrcoef()计算随机变量的相关系数矩阵,其具体使用方法如下: R = corrcoef(X),返回X代表的随机变量的相关系数矩阵; R = corrcoef(x,y),x和y必须是具有相同长度的向量。 函数diff()计算差分,其具体使用方法如下: Y = diff(X) ,X可以是向量或矩阵; Y = diff(X,n) ,返回n阶差分 ; Y = diff(X,n,dim) ,返回在dim维上的n阶差分 。 运行结果如下图所示。 函数gradient()计算梯度,其具体使用方法如下: FX = gradient(F),返回F在x方向上的梯度; FX,FY = gradient(F),FX是F在x方向的近似偏导数,FY是F在y方向的近似偏导数; Fx,Fy,Fz,. = gradient(F),返回N个方向的近似偏导数; . = gradient(F,h),h用于指定所有方向上自变量的间距; . = gradient(F,h1,h2,.),用多个标量来指定各个方向上自变量的间距。 运行结果如下图所示。 1一维数字滤波 2信号卷积 3去除信号直流或线性成分 MATLAB提供如下表所示的信号滤波和卷积的函数。信号滤波和卷积函数 函数filter()实现一维数字滤波,该函数的具体使用方法如下: y = filter(b,a,X),X为用于滤波的数据,Y为数据X通过滤波器之后的值; y,zf = filter(b,a,X),附加返回一个表示数据延迟时间的量zf; y,zf = filter(b,a,X,zi),zi为初始数据延迟,zf等于最终数据延迟; y = filter(b,a,X,zi,dim),在dim维上进行数据滤波。 函数conv()计算卷积。 运行结果如下图所示。 detrend()函数实现去除信号中的直流或者线性成分,其具体使用方法如下: y = detrend(x),如果x是一个向量,从信号x中减去线性成分;如果x是一个矩阵,去除x所有列中的线性成分; y = detrend(x,constant),如果x是一个向量,减去信号中的直流成分;如果x是一个矩阵,去除所有列中的直流成分; y = detrend(x,linear,bp),从信号x中减去分段线性函数。 1一维傅立叶变换和逆变换2二维傅立叶变换和逆变换 傅立叶变换既可以对连续信号进行变换,也可以对离散信号进行变换。本小节只介绍离散傅立叶变换。 函数fft()实现一维离散傅立叶变换,其具体使用方法如下: Y = fft(X),如果X是向量,返回向量X的傅立叶变换;如果X是矩阵,函数对矩阵X的每一列进行傅立叶变换; Y = fft(X,n),用输入n指定傅立叶变换的长度; Y = fft(X,dim),在dim维上进行傅立叶变换; Y = fft(X,n,dim),在dim维上进行傅立叶变换,并指定傅立叶变换的长度。 函数ifft()实现一维离散傅立叶逆变换,其具体使用方法与函数fft()类似,只是添加一个选项。 y = ifft(., symmetric); y = ifft(., nonsymmetric) 。 函数fft2()实现二维傅立叶变换,用函数ifft2来实现二维傅立叶逆变换。函数fft2()的具体使用方法如下: Y = fft2(X),X是矩阵,对矩阵X进行二维傅立叶变换; Y = fft2(X,m,n),m和n指定傅立叶变换的长度。 1函数的表示 2函数画图 3函数最小值和零点 4数值积分 5在功能函数中使用含参函数 函数可以通过以下方式来表示: M文件; 匿名函数; 函数inline()。 MATLAB提供函数画图的函数如下表所示。函数画图的函数 以函数fplot()为例介绍画图函数的用法,其具体使用方法如下: fplot(function,limits),function为待画图的函数,limits是横坐标数值范围或横纵坐标数值范围; fplot(function,limits,LineSpec),LineSpec指定画图的线条属性; fplot(function,limits,tol),tol指定画图相对精度; fplot(function,limits,tol,LineSpec),指定画图的线条属性和画图相对精度。 运行结果如下图所示。 -5 -4 -3 -2 -1 0 1 2 3 4 5 0.4 0.5 0.6 0.7 0.8 0.9 1 函数y=cos(x+1)/(x2+1) x y 求函数的最小值和零点的函数,如下表所示。求函数最小值和零点 函数fminbnd()求一元函数在给定区间内的最小值,其具体使用方法如下: x = fminbnd(fun, ,x1,x2),在区间x1 x2内寻找函数最小值; x = fminbnd(fun,x1,x2,options),使用options选项来指定的优化器的参数; x,fval = fminbnd(.),附加返回函数最小值。 函数fminsearch()求多元函数的最小值。其具体使用方法如下: x = fminsearch(fun,x0),在初始x0附近寻找局部最小值; x = fminsearch(fun,x0,options),使用options选项来指定优化器的参数; x,fval = fminsearch(.),附加返回函数最小值。 函数fzero()求一元函数的零点,其具体使用方法如下: x = fzero(fun,x0),在x0点附近寻找函数的零点; x = fzero(fun,x0,x1),在x0,x1区间内寻找函数的零点; x = fzero(fun,x0,options),用options指定寻找零点的优化器参数; x,fval = fzero(.),附加自变量为x时的函数值。 函数optimset()设定优化器参数,其具体使用方法如下: o p t i o n s = optimset(param1,value1,param2,value2,.),用参数名和对应的参数值设定优化器的参数; optimset,显示优化器的所有参数名和有效的参数值; options = optimset,返回一个优化器的结构体; options = optimset(optimfun),返回函数optimfun()对应的优化器参数; o p t i o n s = optimset(oldopts,param1,value1,.),在原优化器参数oldopts的基础上,改动指定优化器参数; options = optimset(oldopts,newopts),用newopts的所有非空参数覆盖oldopts中的值。 在函数optimset()中常用的优化器参数如下表所示。优化器参数 函数optimget()得到目前优化器的参数,其具体使用方法如下: val = optimget(options,param),返回优化器参数param的值; v a l = optimget(options,param,default),返回优化器参数param的值。 MATLAB提供一些的数值积分函数,如下表所示。数值积分函数 函数quad()和函数quadl()来计算一元函数的积分。函数quad()的具体使用方法如下: q = quad(fun,a,b),计算函数fun在a b区间内的定积分; q = quad(fun,a,b,tol),以绝对误差容限tol计算函数fun在a b区间内的定积分; q = quad(fun,a,b,tol,trace),当trace为非零值时,显示迭代过程的中间值。 矢量数值积分等价于多个一元定积分。 函数dblquad()计算二重积分。其具体使用方法如下: q = dblquad(fun,xmin,xmax,ymin,ymax),计算二元函数的二重积分; q = dblquad(fun,xmin,xmax,ymin,ymax,tol),用tol指定绝对计算精度; q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method),用method指定计算一维积分时采用的函数。 功能函数中的含参函数的两种解决方法:嵌套函数匿名函数 编写M文件的函数时: 首先将含参函数的参数作为输入; 其次在其中调用功能函数,形成嵌套; 最后通过调用该函数进行计算。 运行结果如下图所示。 -10 -8 -6 -4 -2 0 2 4 6 8 10-12 -10 -8 -6 -4 -2 0 2 4 b 零 点 用匿名函数提供函数参数的具体步骤如下: 创建一个含参函数,并保存为M文件格式; 调用功能函数的M文件中给参数赋值; 用含参函数创建匿名函数; 把匿名函数句柄传递给功能函数计算。 6.5.1 常微分方程组的初值问题 6.5.2 延迟微分方程的问题 6.5.3 常微分方程组的边界问题 在MATLAB中,可以计算微分方程数值解,如: 常微分方程组的初值问题; 延迟微分方程的问题; 常微分方程组的边界问题。 1显式常微分方程组 2设置解法器参数 3线性隐式常微分方程组 4完全隐式常微分方程组 在MATLAB中可以计算以下初值问题的数值解。显式常微分方程组;线性隐式常微分方程组;完全隐式常微分方程组。 在MATLAB中,用函数实现不同的解法,如下表所示。 函数odeset()设定解法器参数,其具体使用方法如下: o p t i o n s = odeset(name1,value1,name2, value2,),用参数名和相应参数值设定解法器的参数; options= odeset(oldopts,name1, value1,),修改原来的解法器options结构体oldopts; options = odeset(oldopts,newopts),合并两个解法器options结构体oldopts和newopts; odeset,显示所有的参数值和它们的默认值。 常微分方程组解法器参数 线性隐式常微分方程组可以利用解法器参数options来求解。 运行结果如下图所示。 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2 4 6 8 10 12 14 16 18 t y 函数ode15i()求解完全隐式常微分方程组,其具体使用方法如下: t,Y = ode15i(odefun,tspan,y0,yp0) ; t , Y = ode15i(odefun,tspan,y0,yp0,options) 。 函数decic()得到自洽初始值,其具体使用方法如下: y 0 m o d , y p 0 m o d = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0); y 0 m o d , y p 0 m o d = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,options) 。 运行结果如下图所示。 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 t y 函数dde23()求解延迟微分方程组,其具体使用方法如下: s o l = dde23(ddefun,lags,history,tspan); s o l = dde23(ddefun,lags,history,tspan,option),option结构体用于设置解法器的参数。 函数dde23()的返回值是一个结构体,它包含7个属性,其中重要的5个属性如下: sol.x,dde23选择计算的时间点; sol.y,在时间点x上的解y(x); sol.yp,在时间点x上解的一阶导数y(x); sol.history,方程初始值; sol.solver,解法器的名字dde23; 若需得到tint时刻的解,可以使用函数deval,即yint = deval(sol,tint)。 函数bvp4c()的具体使用方法如下: sol = bvp4c(odefun,bcfun,solinit),odefun代表常微分方程组的函数,bcfun是描述边界条件的函数,solinit是对方程解的猜测解; s o l = bvp4c(odefun,bcfun,solinit,options),使用options结构体来设定解法器的参数。 运行结果如下图所示。 0 0.5 1 1.5 2 2.5 3 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 Mathieu方程在边界条件下的解 x y 4阶Mathieu方程的特征值 = 17.0973
展开阅读全文