MATLAB运用第十一章.ppt
大学计算机基础系统工具与环境系统工具与环境(理工科用)(理工科用)赵 欢 肖德贵 李丽娟 洪跃山 编著第三部分第三部分 仿真及计算工具仿真及计算工具第第11 11章章 MATLABMATLAB应用应用大学计算机基础系统工具与环境(理工科用)本章内容提要11.1 MATLAB11.1 MATLAB11.1 MATLAB11.1 MATLAB在高等数学中的应用在高等数学中的应用在高等数学中的应用在高等数学中的应用11.2 MATLAB11.2 MATLAB11.2 MATLAB11.2 MATLAB绘图绘图绘图绘图11.3 MATLAB11.3 MATLAB11.3 MATLAB11.3 MATLAB图像处理图像处理图像处理图像处理11.4 11.4 11.4 11.4 小结小结小结小结11.1 MATLAB在高等数学中的在高等数学中的应用用符号运算符号运算1.定义符号常量 符号数学工具箱中的函数sym()可以将一个数值常量A 定义成一个符号常量。其一般的使用形式为 sym(A)例如 将一组数值常量定义成符号常量。x=sym(sin(15)x=sin(15)y=sym(3*4-2)/5+1)y=(3*4-2)/5+111.1 MATLAB在高等数学中的在高等数学中的应用用2.定义符号变量 定义符号变量可以有两种方法:使用函数sym()或命令syms。其使用形式为 sym(x)或 syms x y 例如 定义符号变量及其表达式 a=sym(x)a=x b=sym(y)b=y f=a2+b2 f=x2+y2 11.1 MATLAB在高等数学中的在高等数学中的应用用 在该例中,定义符号x并赋值到符号变量a,同时利用a定义解析式f。需要注意的是,使用函数sym()每次只能定义一个符号变量,而使用syms一次可以定义多个符号变量。例如 定义符号变量及表达式 syms x y f=x2+y2 f=x2+y211.1 MATLAB在高等数学中的在高等数学中的应用用3.表达式求值 通过符号变量定义符号表达式以后,可以通过函数eval来求表达式的值。例如 符号常量表达式求值。x=sym(sin(15);eval(x)ans=0.6503 包含符号变量的表达式求值时,应对符号变量赋初值。11.1 MATLAB在高等数学中的在高等数学中的应用用包含符号变量的表达式求值时,应对符号变量赋初值。例如 符号变量表达式求值。syms x y f=x2+y2 f=x2+y2 x=5;y=4;eval(f)ans=4111.1 MATLAB在高等数学中的在高等数学中的应用用4.表达式化简 MATLAB 提供了化简和美化符号表达式的各种函数,具体有:合并同类项(collect)、多项式展开(expand)、因式分解(factor)等。(1).合并同类项(collect):函数collect()调用的格式有两种。R=collect(S):对于多项式S 按默认独立变量的幂次降幂排列。R=collect(S,v):对指定的对象v 计算,操作同上。11.1 MATLAB在高等数学中的在高等数学中的应用用11.1 MATLAB在高等数学中的在高等数学中的应用用(2).表达式展开(expand)利用函数expand()来展开符号表达式。其命令格式如下:R=expand(S)对符号表达式S 中每个因式的乘积进行展开计算。该命令通常用于计算多项式函数、三角函数、指数函数与对数函数等表达式的展开式。11.1 MATLAB在高等数学中的在高等数学中的应用用 syms x y a b c te1=expand(x-2)*(x-4)*(y-t)e1=8*y-8*t+6*t*x-6*x*y-t*x2+x2*y e2=expand(cos(x+y)e2=cos(x)*cos(y)-sin(x)*sin(y)e3=expand(exp(a+b)3)e3=exp(3*a*b2)*exp(3*a2*b)*exp(a3)*exp(b3)11.1 MATLAB在高等数学中的在高等数学中的应用用e4=expand(log(a*b/sqrt(c)e4=log(a*b)/c(1/2)e5=expand(sin(2*t),cos(2*t)e5=2*cos(t)*sin(t),cos(t)2-sin(t)2 e6=expand(x+1)3)e6=x3+3*x2+3*x+111.1 MATLAB在高等数学中的在高等数学中的应用用(3).因式分解(factor)利用函数factor()来进行符号表达式的因式分解。其使用格式为:factor(X)factor(X)参量X 可以是正整数、符号表达式矩阵。若X 为一正整数,则factor(X)返回X 的质数分解式。若X 为多项式或整数矩阵,则factor(X)分解矩阵的每一元素。例如 因式分解示例。syms a b x y f1=factor(x4-y4)f1=(x-y)*(x+y)*(x2+y2)f2=factor(a2-b2,x3+y3)f2=(a-b)*(a+b),(x+y)*(x2-x*y+y2)11.1 MATLAB在高等数学中的在高等数学中的应用用符号运算符号运算1.多项式表示 在 MATLAB 中,多项式被表示成行向量的形式,它的系数是按降幂排列的,即按降幂次序将多项式的系数组成行向量,就可以在MATLAB 中建立一个多项式。例如,多项式 在MATLAB 中,按下面方式组成一个行向量 f=-4 3 18 5 1 MATLAB 会将长度为n+1 的向量解释成一个n 次多项式。因此,若多项式某些项系数为零,则必须在向量中相应位置补零。2.2.多多项式求式求值 在MATLAB中多项式被表示为一个行向量,因此任何一个行向量都可当作一个多项式,可以通过调用函数polyval来求多项式的值,使用格式为:y=polyval(p,x)其中,p为行向量,x作为参数,计算前必须赋值。11.1 MATLAB在高等数学中的在高等数学中的应用用3.多项式求根 多项式求根的函数是roots,返回结果可能是复数根。其使用格式为 y=roots(p)其中p为行向量,用于表示一个多项式。11.1 MATLAB在高等数学中的在高等数学中的应用用4.符号多项式 当已知多项式的系数时,可以利用函数poly2sym来构造符号多项式。例如 对于多项式系数向量p=-4 3 18 5 1构造符号多项式并求值。p=-4 3 18 5 1;f=poly2sym(p)f=-4*x4+3*x3+18*x2+5*x+1 x=5;y=eval(f)y=-164911.1 MATLAB在高等数学中的在高等数学中的应用用5.从根创建多项式 假定已知多项式的根,则可以使用函数poly函数来求多项式向量,这个函数与roots是互逆函数。例如 已知多项式的根为2、5、1,求多项式。r=2;5;1;s=poly(r)s=1 -8 17 -10 这里创建了多项式,根分别为2、5、1。11.1 MATLAB在高等数学中的在高等数学中的应用用函数极限函数极限 1.一元函数的极限 假设已知函数,则极限问题一般描述为 其中L 可以是一个确定的值,也可以不是,对于某些问题来说,还可以是左右极限,在MATLAB中,直接调用函数limit来求极限,格式如下 (1)limit(expr,x,x0),其中expr为函数表达式,一般为符号表达式,x是变量,x0为极限点。(2)limit(expr,x,x0,left),expr、x、x0与上面格式相同,如果为左极限,则最后一个参数为left,否则为right。在上面格式中,极限点x0可以是inf或-inf,表示正、负无穷大。11.1 MATLAB在高等数学中的在高等数学中的应用用11.1 MATLAB在高等数学中的在高等数学中的应用用2.多元函数的极限 多元函数极限一般可表示为 在MATLAB中,同样是通过调用函数limit来实现,格式如下 (1)limit(limit(expr,x,x0),y,y0)(2)limit(limit(expr,y,y0),x,x0)如果x0或y0不是确定的值,而是另外一个变量的函数,则顺序不能改变。11.1 MATLAB在高等数学中的在高等数学中的应用用11.1 MATLAB在高等数学中的在高等数学中的应用用函数求函数求导1.函数的导数和高阶导数 如果函数和自变量都已知,则可以调用函数diff来求各阶导数,使用格式如下 (1)y=diff(expr,x),expr为函数表达式,x为自变量,求一阶导数 (2)y=diff(expr,x,n),求函数的n阶导数11.1 MATLAB在高等数学中的在高等数学中的应用用2.多元函数偏导数 多元函数偏导数仍然是通过调用diff来实现的,使用格式为 f=diff(diff(expr,x,m),y,n)或者 f=diff(diff(expr,y,n),x,m)11.1 MATLAB在高等数学中的在高等数学中的应用用函数函数积分分1.不定积分 在MATLAB中,调用int函数直接求出符号函数表达式的不定积分解析式,使用格式为 F=int(expr,x),expr为函数的表达式,x为积分变量。11.1 MATLAB在高等数学中的在高等数学中的应用用2.定积分 在MATLAB中,函数int同样可以用于求定积分,使用格式为F=int(expr,x,a,b),expr为函数的表达式,x为积分变量,a,b为积分区间。级数运算数运算 1.泰勒(Taylor)展开式 根据泰勒定理,函数f(x)在x0的展开形式为:其中R,为截断误差,也称为拉格朗日余项。如果,上式又称为麦克劳林(Maclaurin)公式。事实上,要使用泰勒公式求函数的近似值是一件非常困难的事情,因为需要计算多项,特别是要计算高阶导数,调用MATLAB中的函数taylor可以直接导出泰勒公式,其使用格式为 (1)taylor(expr,x,k),expr为函数符号表达式,x为自变量,该方式为将函数在 0处做泰勒展开,k为展开项数。(2)taylor(expr,x,k,a),该方式为将函数在a 处做泰勒展开。11.1 MATLAB在高等数学中的在高等数学中的应用用11.1 MATLAB在高等数学中的在高等数学中的应用用2.级数求和 对于具有通项公式的级数,MATLAB提供了函数symsum来计算级数和,具体使用格式为 symsum(expr,n,a,b)symsum(expr,n,a,b)expr为通项公式表达式,n为级数变量,a和b分别表示开始项和结束项。11.1 MATLAB在高等数学中的在高等数学中的应用用矩阵及线性方程组 1.零矩阵、幺矩阵和单位矩阵 在矩阵理论中,将所有元素全为0的矩阵称为零矩阵,把所有元素全为1的矩阵称为幺矩阵,而将对角线元素全为1而其余元素全为0的矩阵称为单位矩阵。使用格式分别如下:(1)A=zeros(m),B=ones(m),C=eye(m),分别生成mm阶零矩阵A、幺矩阵B和单位矩阵C。(2)A=zeros(m,n),B=ones(m,n),C=eye(m,n),分别生成mn阶零矩阵A、幺矩阵B和单位矩阵C。11.1 MATLAB在高等数学中的在高等数学中的应用用例如 下面分别生成零矩阵、幺矩阵和单位矩阵。A=zeros(3)A=0 0 0 0 0 0 0 0 0 B=ones(3)B=1 1 1 1 1 1 1 1 1 C=eye(3)C=1 0 0 0 1 0 0 0 1 D=zeros(2,3)D=0 0 0 0 0 0 E=ones(2,3)E=1 1 1 1 1 1 F=eye(2,3)F=1 0 0 0 1 011.1 MATLAB在高等数学中的在高等数学中的应用用2.随机矩阵和魔方矩阵 使用函数rand()可以生成一个01之间的随机数,而使用rand(m,n)则可以生成一个mn阶随机矩阵,使用rand(m)生成的是mm阶随机方阵 魔方矩阵是指生成的方阵行、列、对角线之和相等的矩阵,通过函数magic(m)来实现。例如 生成23阶随机方阵以及5阶魔方矩阵。rand(2,3)ans=0.7655 0.1869 0.4456 0.7952 0.4898 0.6463 magic(3)ans=8 1 6 3 5 7 4 9 211.1 MATLAB在高等数学中的在高等数学中的应用用3.对角矩阵 对角矩阵的生成是通过调用函数diag来实现的,其基本格式为 (1)diag(p),生成以向量p的元素构成的对角矩阵,矩阵大小由p的元素个数决定。(2)diag(p,k),将向量p的元素分布在对角线偏上或偏下的斜列上,k0,代表上部,kx=0:0.2:8;y1=0.2+sin(-2*x);y2=sin(x.0.5);figureplot(x,y1,g-+,x,y2,r-d);曲线y1 采用绿色、实线、加号标记,曲线y2 采用红色、虚线、菱形标记,结果如图11.3所示。11.2 Matlab绘图 MATLAB 在绘图时会根据数据的分布范围自动选择坐标轴的刻度范围,通过调用函数axis指定坐标轴的刻度范围的格式为:axis(xmin,xmax,ymin,ymax),其中 xmin,xmax,ymin,ymax 分别表示x轴的起点、终点,y 轴的起点、终点;使用函数xlabel(option)和ylabel(option)来实现x轴y轴加标签;使用函数title(option)为图形加标题;使用函数legend(option)加标注;使用命令grid on/off添加或取消网格线;调用text(x,y,string)在指定的坐标(x,y)处加上文字。例如 添加坐标标注、标题、网格以及标注的图形。x=0:0.05:5;figurey1=exp(0.4.x)-1.5;y2=sin(x*4);plot(x,y1,x,y2,r-.)xlabel(Input);ylabel(Output);title(My Graphics);legend(y1=exp(0.4.x)-1.5,y2=sin(x*4)grid on例如 为图形加上文字标注。plot(0:pi/20:2*pi,sin(0:pi/20:2*pi)text(pi,0,leftarrow sin(pi),FontSize,18)使用text加标注时,可以增加符号,如上面的leftarrow表示左前头,同时可以设定字体大小,如图11.5所示。11.2 Matlab绘图三三维曲曲线图 用函数 plot3 可以绘制三维图形,其调用格式主要有以下几种:(1)plot3(X1,Y1,Z1,.):X1、Y1、Z1 为向量或矩阵,表示图形的三维坐标。该函数可以在同一图形窗口一次画出多条三维曲线,以X1,Y1,Z1,.Xn,Yn,Zn 指定各条曲线的三维坐标。(2)plot3(X1,Y1,Z1,LineSpec,.):以LineSpec 指定的属性绘制三维图形。(3)plot3(.,PropertyName,PropertyValue,.):对以函数plot3 绘制的图形对象设置属性。例如:绘制三维曲线图(sin(x),cos(x),x)。x=0:0.05:20;figureplot3(sin(x),cos(x),x);grid;text(0,0,0,0);title(Three Dimension);xlabel(sin(x);ylabel(cos(x);zlabel(z);这里,以向量组(sin(x),cos(x),x)绘制三维曲线,如图11.6所示。11.2 Matlab绘图三维曲面图 在MATLAB中,可以通过调用函数surf来绘制三维曲面图,其使用格式为 (1)surf(X,Y,Z):以Z 确定的曲面高度和颜色,按照X、Y 形成的“格点”矩阵,创建一渐变的三维曲面。X、Y 可以为向量或矩阵,若X、Y 为向量,则必须满足m=size(X),n=size(Y),m,n=size(Z)。(2)surf(X,Y,Z,C):以Z 确定的曲面高度,C 确定的曲面颜色,按照X、Y 形成的“格点”矩阵,创建一渐变的三维曲面。例如 绘制球面图figureX,Y,Z=sphere(50);surf(X,Y,Z);%绘制球体的三维图形xlabel(x),ylabel(y),zlabel(z);title(Globle);这里调用了函数sphere(n)来生成球体坐标,其中n表示将整个球体坐标划分的网络数,即生成的向量组(x,y,z)的大小。如图11.7所示。可以通过函数表达式来绘制三维曲面图。例如 绘制方程,其中 的曲面图。x,y=meshgrid(-2:.2:2,-2:.2:2);z=x.*exp(-x.2-y.2);surf(x,y,z)这里meshigrid(x,y)的作用是产生一个以向量x为行,向量y为列的矩阵,而x、y是从-2开始到2,每间隔0.2记下一个数据。如图11.8的图形,网格就是利用meshgrid完成的。还可以调用函数surfl来绘制亮度曲面图,如将上例改为x,y=meshgrid(-2:.2:2,-2:.2:2);z=x.*exp(-x.2-y.2);surfl(x,y,z)shading interp;colormap(gray)则可产生如图11.9的光亮效果。隐函数绘图 利用符号函数,可以通过函数 ezplot 绘制任意一元函数,其调用格式为(1)ezplot(f):按照x 的默认取值范围(-2*pix2*pi)绘制f=f(x)的图形。对于f=f(x,y),x、y 的默认取值范围:-2*pi x 2*pi,、-2*pi y2*p,绘制f(x,y)=0 的图形。(2)ezplot(f,min,max):按照x的指定取值范围(minxmax)绘制函数f=f(x)的图形。而对于二元隐函数,则可以调用函数ezmesh来绘图,使用格式为(1)ezmesh(f):按照x、y 的默认取值范围(-2*pix2*pi,-2*piy2*pi)绘制函数f(x,y)的图形。(2)ezmesh(f,domain):按照domain 指定的取值范围绘制函数f(x,y)的图形,domain 可以是14的向量:xmin,xmax,ymin,ymax;也可以是12的向量:min,max,此时,minxmax,min y I=imread(moon.tif);imshow(I);这个例子中,使用imread函数将图像文件读入到矩阵I中,原始图像大小可以使用size(I)来求得,然后通过调用imshow显示图像,如图11.12所示。例如 显示RGB真彩图辣椒(peppers.png)I=imread(pappers.png);imshow(I);结果如图11.13所示。11.3 Matlab图像像处理理例如 将图像辣椒保存为灰度图像,并显示。I=imread(peppers.png);I=rgb2gray(I);imwrite(I,mypepper.tif);imshow(I);本例中,函数rgb2gray的作用是将矩阵I所表示的图像转换为灰度图像,在MATLAB中有许多图像类型转换的函数,读者可进一步参考相关资料。