1、2018/3/28,1,MATLAB编程基础之,数值微积分、多项式,第六讲,2018/3/28,2,3.7 MATLAB数值积分与微分,3.7.1 差分和偏导数1. 差分在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,按行计算差分。,2018/3
2、/28,3,例1 差分运算示例命令如下:A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18;% 生成1维矩阵A1 = reshape(A,6,3)% 转换为36维矩阵 A1 = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18B1 = diff(A1)% 求1维1阶差分 B1 = 6 6 6 6 6 6 6 6 6 6 6 6B2 = diff(A1,1,2)% 求2维1阶差分 B2 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1B3 = diff(A1,2)% 求1维2阶差分 B3 = 0
3、0 0 0 0 0,2018/3/28,4,2. 梯度和偏导数 二元及多元函数F(x,y,)的求导FX=gradient(F)FX,FY=gradient(F)=gradient(F,h),2018/3/28,5,例2求二元函数的偏导数,% 生成二元函数v = -2:0.2:2;x,y = meshgrid(v);z = x .* exp(-x.2 - y.2);% 绘制曲面,如图3-4所示figure(1)mesh(x,y,z);px,py = gradient(z,.2,.2);% 求偏导数figure(2)contour(v,v,z)% 绘制等高线,如图3-5所示hold onquive
4、r(v,v,px,py)% 绘制矢量场图,小箭头表示梯度hold off,2018/3/28,6,数值积分数值积分基本原理 求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)法、牛顿柯特斯(Newton-Cotes)法等都是经常采用的方法。 它们的基本思想都是将整个积分区间a,b分成n个子区间xi,xi+1,i=1,2,n,其中x1=a,xn+1=b。这样求定积分问题就分解为求和问题。,2018/3/28,7,3.7.2 一元函数的数值积分数值积分的实现方法1变步长辛普生(Simpson)法(精度较高,较常使用)基于变步长辛普生法,MATLAB给出了quad函数来求定积分。
5、该函数的调用格式为: I,n=quad(fname,a,b,tol,trace)其中fname是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数I即定积分值,n为被积函数的调用次数。,2018/3/28,8,函数部分function f=quad1(x)f=1./(x.3-2*x-5);%编制函数m文件调用命令Q = quad(quad1,0,2)% 在同一目录下,计算积分值Q = -0.4605,2018/3/28,9,求定积分。 (1) 建立
6、被积函数文件fesin.m。function f=fesin(x)f=exp(-0.5*x).*sin(x+pi/6); (2) 调用数值积分函数quad求定积分。S,n=quad(fesin,0,3*pi)S = 0.9008n = 77,2018/3/28,10,2. 自适应Lobatto法(精度较高,最常使用)q=quadl(fun,a,b)q=quadl(fun,a,b,tol) % 采用内联函数形式,第二个参数为变量例3-25求Q=sin2x+cosx从2*pi到0的定积分f = inline(sin(2*x)+cos(x).2,x);Q = quadl(f,0,2*pi)% 求取积
7、分值Q = 3.1416训练任务:请采用编制m函数求该函数积分,2018/3/28,11,3.7.3 多重数值积分使用MATLAB提供的dblquad函数就可以直接求出上述二重定积分的数值解。该函数的调用格式为:I=dblquad(f,a,b,c,d,tol,trace)该函数求f(x,y)在a,bc,d区域上的二重定积分。参数tol,trace的用法与函数quad完全相同。,2018/3/28,12,计算二重定积分(1) 建立一个函数文件fxy.m:function f=fxy(x,y)global ki;ki=ki+1; %ki用于统计被积函数的调用次数f=exp(-x.2/2).*sin
8、(x.2+y);(2) 调用dblquad函数求解。global ki;ki=0;I=dblquad(fxy,-2,2,-1,1)kiI = 1.57449318974494ki = 1038(3)匿名函数方法f = (x,y)y*sin(x)+x*cos(y);% 编写匿名函数,将句柄赋给fS = dblquad(f,pi,2*pi,0,pi)% 计算二重积分,2018/3/28,13,3.8 多项式,3.8.1 多项式的构造 使用行向量表示多项式的系数,行向量中各元素按多项式次数从高到低排列。即多项式P(x)=anxn+an-1xn-1+a1x+a0的系数向量P为an an-1a1 a0。
9、P=poly(A):通过n阶方阵A生成特征多项式p,A为特征多项式的根,满足 P(A)=anAn+an-1An-1+a1A+a0P=poly(r):通过向量r= r1 r2 rn方阵A生成多项式,向量元素为多项式的根,即满足(x-r1) (x-r2)(x-rn)= anxn+an-1xn-1+a1x+a0S=poly2str(P,s):将多项式系数行向量表达形式P转换成变量为s的标准多项式形式S。,2018/3/28,14,例3-29求多项式,r = 1 2 3;% 生成向量rP1 = poly(r)% 计算根为r的多项式 P1 = 1 -6 11 -6S1 = poly2str(P1,x)%
10、 转换成变量为x的标准形式 S1 = x3 - 6 x2 + 11 x - 6A = magic(3)% 创建3阶魔方矩阵 P2 = poly(A)% 计算方阵的特征多项式 P2 = 1.0000 -15.0000 -24.0000 360.0000S2 = poly2str(P2,s)% 转换成变量为s的标准形式S2 = s3 - 15 s2 - 24 s + 360,2018/3/28,15,3.8.2多项式的运算1.多项式的根R=roots(P):求多项式向量P的根p = 1 -6 -72 -27; % 多项式向量pr = roots(p)% 求多项式的根,2018/3/28,16,2.
11、多项式的值y=polyval(p,x):计算多项式向量为p变量为x时的数值y,x可以是向量也可以是矩阵例3-31计算多项式的值p = 3 2 1;% 创建一个多项式向量x = 5,7,9;% 变量为向量形式yx = polyval(p,x)% 计算多项式的值 yx = 86 162 262A = pascal(4)% 变量为矩阵形式 A = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20ya = polyval(p,A)% 计算多项式的值ya = 6 6 6 6 6 17 34 57 6 34 121 321 6 57 321 1241,2018/3/28,17,3.多项
12、式的乘法c=conv(u,v):求向量为u的多项式与向量为v的多项式的乘积c。例3-32求(x2+2x+6)(x3+2)的乘积a = 1 2 6;b = 1 0 0 2;% 生成多项式向量c = conv(a,b)% 计算乘积 s = poly2str(c,x)% 标准形式表示c = 1 2 6 2 4 12s = x5 + 2 x4 + 6 x3 + 2 x2 + 4 x + 12训练任务: (x4+2x+6)(x3+2x+6),2018/3/28,18,3.conv,convs多项式乘运算,例:a(x)=x2+2x+3; b(x)=4x2+5x+6;c = (x2+2x+3)(4x2+5x
13、+6)a=1 2 3;b=4 5 6;c=conv(a,b) or =conv(1 2 3,4 5 6)c = 4.00 13.00 28.00 27.00 18.00p=poly2str(c,x)p = 4 x4 + 13 x3 + 28 x2 + 27 x + 18,2018/3/28,19,4.多项式的除法c=deconv(v, u):v为被除数,u为除数,q返回商,余数为r。例3-33求(2x3+4x2+8x+3)(x2+2x+3)v = 2 4 8 3;u = 1 2 3;% 生成多项式向量c = conv(v,u)% 计算多项式乘积 c = 2 8 22 31 30 9q1,r1
14、= deconv(c,v)% 求商,整除r1为0,商多项式与u相同 q1 = 1 2 3r1 = 0 0 0 0 0 0q2,r2 = deconv(v,u)% 多项式求商,带余数,2018/3/28,20,4.deconv多项式除运算,a=1 2 3; c = 4.00 13.00 28.00 27.00 18.00d=deconv(c,a)d =4.00 5.00 6.00,2018/3/28,21,5.多项式微分,matlab提供了polyder函数多项式的微分。命令格式:polyder(p): 求p的微分polyder(a,b): 求多项式a,b乘积的微分p,q=polyder(a,b
15、): 求多项式a,b商的微分例:a=1 2 3 4 5; poly2str(a,x)ans = x4 + 2 x3 + 3 x2 + 4 x + 5b=polyder(a)b = 4 6 6 4poly2str(b,x)ans =4 x3 + 6 x2 + 6 x + 4,2018/3/28,22,5.多项式微分,polyder(p): 求p的微分polyder(a,b): 求多项式a,b乘积的微分p,q=polyder(a,b): 求多项式a,b商的微分例: a(x)=x2+2x+3; b(x)=4x2+5x+6;c = (x2+2x+3)(4x2+5x+6)a=1 2 3;b=4 5 6;c=conv(a,b)X1=polyder(a,b)X2=polyder(c),