资源描述
2024/8/30 周五13.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,按行计算差分。2024/8/30 周五2例例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 0 0 0 0 02024/8/30 周五32.梯度和偏导数 二元及多元函数F(x,y,)的求导FX=gradient(F)FX,FY=gradient(F)=gradient(F,h)2024/8/30 周五4例例2 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 onquiver(v,v,px,py)%绘制矢量场图,小箭头表示梯度小箭头表示梯度hold off 2024/8/30 周五5数值积分数值积分数值积分基本原理数值积分基本原理 求解定积分的数值方法多种多样,如简单的梯形梯形法、辛普生法、辛普生(Simpson)法、牛顿柯特斯法、牛顿柯特斯(Newton-Cotes)法等都是经常采用的方法。它们的基本思想都是将整个积分区间都是将整个积分区间a,b分成分成n个个子区间子区间xi,xi+1,i=1,2,n,其中,其中x1=a,xn+1=b。这样求定积分问题就分解为求和问题。2024/8/30 周五63.7.2 一元函数的数值积分数值积分的实现方法数值积分的实现方法1变步长辛普生(变步长辛普生(Simpson)法)法(精度较高,较常使用)(精度较高,较常使用)基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为:I,n=quad(fname,a,b,tol,trace)其中fname是被积函数名。a和和b分别是定积分的下限和上限。分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数返回参数I即定积分值,即定积分值,n为被积函数的为被积函数的调用次数调用次数。2024/8/30 周五7函数部分function f=quad1(x)f=1./(x.3-2*x-5);%编制函数m文件调用命令Q=quad(quad1,0,2)%在同一目录下,计算积分值Q=-0.4605 2024/8/30 周五8求定积分。求定积分。(1)建立被积函数文件建立被积函数文件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=772024/8/30 周五92.自适应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)%求取积分值Q=3.1416训练任务:请采用编制m函数求该函数积分 2024/8/30 周五103.7.3 多重数值积分多重数值积分使用MATLAB提供的dblquad函数就可以直接求出上述二重定积分的数值解。该函数的调用格式为:I=dblquad(f,a,b,c,d,tol,trace)该函数求f(x,y)在a,bc,d区域上的二区域上的二重定积分重定积分。参数tol,trace的用法与函数quad完全相同。2024/8/30 周五11计算二重定积分计算二重定积分(1)建立一个函数文件建立一个函数文件fxy.m:function f=fxy(x,y)global ki;ki=ki+1;%ki用于统计被积函数的调用次数用于统计被积函数的调用次数f=exp(-x.2/2).*sin(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)%计算二重积分2024/8/30 周五123.8 多项式3.8.1 多项式的构造 使用行向量表示多项式的系数,行向量中各元素按多项式次数从高到低排列。即多项式P(x)=anxn+an-1xn-1+a1x+a0的系数向量P为an an-1a1 a0。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。2024/8/30 周五13例3-29求多项式r=1 2 3;%生成向量rP1=poly(r)%计算根为r的多项式 P1=1 -6 11 -6S1=poly2str(P1,x)%转换成变量为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+3602024/8/30 周五143.8.2多项式的运算1.多项式的根R=roots(P):求多项式向量P的根p=1-6-72-27;%多项式向量pr=roots(p)%求多项式的根2024/8/30 周五152.多项式的值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 12412024/8/30 周五163.多项式的乘法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)2024/8/30 周五173.conv,convs多项式乘运算例: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)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+182024/8/30 周五184.多项式的除法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=deconv(c,v)%求商,整除r1为0,商多项式与u相同 q1=1 2 3r1=0 0 0 0 0 0q2,r2=deconv(v,u)%多项式求商,带余数2024/8/30 周五194.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.00d,r=deconv(c,a)余数余数c除除a后的整数后的整数2024/8/30 周五205.多项式微分matlab提供了polyder函数多项式的微分。命令格式:polyder(p):求p的微分polyder(a,b):求多项式a,b乘积的微分p,q=polyder(a,b):求多项式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+42024/8/30 周五215.多项式微分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)
展开阅读全文