第六讲 数值计算讲课教案
第六讲 数值计算,MATLAB提供大量具有强大数值计算功能的函数。 本章着重介绍关于数值计算的函数。,目录,6.1 多项式运算 6.2 插 值 运 算 6.3 有限差分 6.4 功 能 函 数 6.5 微分方程组数值解,6.1 多项式运算,1多项式表示法 2多项式求值 3多项式乘法和除法 4多项式的微积分 5多项式的根和由根创建多项式 6多项式曲线拟合,多项式函数,1多项式表示法,MATLAB采用行向量表示多项式系数,多项式系数按降幂排列。 函数poly2str()将多项式系数向量转换为完整形式。格式: s,len=POLY2STR(P,x) P-多项式系数行向量 x-多项式变量符号 len-字符串s的长度,2多项式求值,函数polyval()计算多项式的值,其具体使用方法如下: y = polyval(p,x),p为多项式系数行向量,x代入多项式的值。这里x为数值,向量或矩阵(对其每个元素求多项式的值)。 Y = polyvalm(p,X),把矩阵X代入多项式p中进行计算。这里要求X为方阵。,3多项式乘法和除法,函数conv()和deconv()进行多项式乘法和除法,其具体使用方法如下: w = conv(u,v),实现多项式乘法,返回结果多项式的系数行向量; q,r = deconv(u, v),实现多项式除法。,4多项式的微积分,(1)多项式的微分 函数polyder()计算多项式的微分,其具体使用方法如下: k = polyder(p),返回多项式p微分的系数向量; k = polyder(a,b),返回多项式a*b微分的系数向量;,q,d = polyder(b,a),返回多项式b/a微分的系数向量。,(2)多项式的积分,函数polyint()计算多项式的不定积分,其具体使用方法如下: s=polyint(p,k),返回多项式p不定积分的系数向量。,5多项式的根和由根创建多项式,(1)多项式的根 函数roots()求多项式的根,其具体使用方法如下: r = roots(c),返回多项式c的所有根r。,(2)由根创建多项式 函数poly()实现由根创建多项式,其具体使用方法如下: p = poly(r),输入r是多项式所有根,返回值为多项式的系数向量; p = poly(A),输入A是方阵,返回值为A的特征多项式的系数向量。,6多项式曲线拟合,函数polyfit()采用最小二乘法对给定数据进行多项式拟合,其具体使用方法如下: p = polyfit(x,y,n),采用n次多项式p来拟合数据x和y。,运行结果如下图所示。,6.2 插 值 运 算,6.2.1 一维插值 6.2.2 二维插值,插值是根据已知输入/输出数据集和当前输入估计输出值。MATLAB提供大量的插值函数,如下表所示。,插值函数,6.2.1 一维插值,一维插值就是对函数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用于指定插值的方法。,运行结果如下图所示。,6.2.2 二维插值,二维插值是对两变量的函数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 有限差分,函数diff()计算差分,其具体使用方法如下: Y = diff(X) ,X可以是向量或矩阵; Y = diff(X,n) ,返回n阶差分 ; Y = diff(X,n,dim) ,返回在dim维上的n阶差分 。,运行结果如下图所示。,6.4 功 能 函 数,1函数的表示 2函数画图 3函数最小值和零点 4数值积分,函数可以通过以下方式来表示: M文件; 匿名函数; 函数inline()。,1函数的表示,2函数画图,MATLAB提供函数画图的函数如下表所示。,函数画图的函数,以函数fplot()为例介绍画图函数的用法,其具体使用方法如下: fplot(function,limits),function为待画图的函数,limits是横坐标数值范围或横纵坐标数值范围;,fplot(function,limits,LineSpec),LineSpec指定画图的线条属性; fplot(function,limits,tol),tol指定画图相对精度; fplot(function,limits,tol,LineSpec),指定画图的线条属性和画图相对精度。,运行结果如下图所示。,3函数最小值和零点,求函数的最小值和零点的函数,如下表所示。,求函数最小值和零点,(1)求一元函数最小值,函数fminbnd()求一元函数在给定区间内的最小值,其具体使用方法如下: x = fminbnd(fun, ,x1,x2),在区间x1 x2内寻找函数最小值;,x = fminbnd(fun,x1,x2,options),使用options选项来指定的优化器的参数; x,fval = fminbnd(.),附加返回函数最小值。,(2)求多元函数的最小值,函数fminsearch()求多元函数的最小值。其具体使用方法如下: x = fminsearch(fun,x0),在初始x0附近寻找局部最小值; x = fminsearch(fun,x0,options),使用options选项来指定优化器的参数;,x,fval = fminsearch(.),附加返回函数最小值。,(3)求一元函数的零点,函数fzero()求一元函数的零点,其具体使用方法如下: x = fzero(fun,x0),在x0点附近寻找函数的零点; x = fzero(fun,x0,x1),在x0,x1区间内寻找函数的零点;,x = fzero(fun,x0,options),用options指定寻找零点的优化器参数; x,fval = fzero(.),附加自变量为x时的函数值。,4数值积分,MATLAB提供一些的数值积分函数,如 下表所示。,数值积分函数,(1)一元函数的数值积分,函数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为非零值时,显示迭代过程的中间值。,(2)矢量数值积分,矢量数值积分等价于多个一元定积分。,(3)二重积分,函数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指定计算一维积分时采用的函数。,6.5 微分方程组数值解,6.5.1 常微分方程组的初值问题 6.5.2 延迟微分方程的问题 6.5.3 常微分方程组的边界问题,在MATLAB中,可以计算微分方程数值解,如: 常微分方程组的初值问题; 延迟微分方程的问题; 常微分方程组的边界问题。,6.5.1 常微分方程组的初值问题,1显式常微分方程组 2设置解法器参数 3线性隐式常微分方程组 4完全隐式常微分方程组,在MATLAB中可以计算以下初值问题的数值解。 显式常微分方程组; 线性隐式常微分方程组; 完全隐式常微分方程组。,1显式常微分方程组,在MATLAB中,用函数实现不同的解法,如下表所示。,常微分方程组解法对比,2设置解法器参数,函数odeset()设定解法器参数,其具体使用方法如下: options= odeset(name1,value1,name2, value2,),用参数名和相应参数值设定解法器的参数;,options= odeset(oldopts,name1, value1,),修改原来的解法器options结构体oldopts; options = odeset(oldopts,newopts),合并两个解法器options结构体oldopts和newopts; odeset,显示所有的参数值和它们的默认值。,常微分方程组解法器参数,3线性隐式常微分方程组,线性隐式常微分方程组可以利用解法器参数options来求解。,运行结果如下图所示。,4完全隐式常微分方程组,函数ode15i()求解完全隐式常微分方程组,其具体使用方法如下: t,Y = ode15i(odefun,tspan,y0,yp0) ; t,Y= ode15i(odefun,tspan,y0,yp0,options) 。,函数decic()得到自洽初始值,其具体使用方法如下: y0mod,yp0mod = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0); y0mod,yp0mod = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,options) 。,运行结果如下图所示。,6.5.2 延迟微分方程的问题,函数dde23()求解延迟微分方程组,其具体使用方法如下: sol= dde23(ddefun,lags,history,tspan); sol= 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)。,6.5.3 常微分方程组的边界问题,函数bvp4c()的具体使用方法如下: sol = bvp4c(odefun,bcfun,solinit),odefun代表常微分方程组的函数,bcfun是描述边界条件的函数,solinit是对方程解的猜测解; sol = bvp4c(odefun,bcfun,solinit,options),使用options结构体来设定解法器的参数。,运行结果如下图所示。,End,