MATLAB运用第十一章.ppt
,大学计算机基础系统工具与环境(理工科用),赵 欢 肖德贵 李丽娟 洪跃山 编著,第三部分 仿真及计算工具第11章 MATLAB应用,大学计算机基础系统工具与环境(理工科用),本章内容提要,11.1 MATLAB在高等数学中的应用11.2 MATLAB绘图11.3 MATLAB图像处理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+1,11.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+y2,11.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=41,11.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+1,11.1 MATLAB在高等数学中的应用,(3).因式分解(factor)利用函数factor()来进行符号表达式的因式分解。其使用格式为: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.多项式求值 在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=-1649,11.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在高等数学中的应用,函数积分不定积分 在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)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 0,11.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 2,11.1 MATLAB在高等数学中的应用,3.对角矩阵 对角矩阵的生成是通过调用函数diag来实现的,其基本格式为(1)diag(p),生成以向量p的元素构成的对角矩阵,矩阵大小由p的元素个数决定。(2)diag(p,k),将向量p的元素分布在对角线偏上或偏下的斜列上,k0,代表上部,k0代表下部,k=0时与(1)相同,生成的矩阵阶数=p的元素个数+k。,11.1 MATLAB在高等数学中的应用,3、矩阵行列式、秩、逆和条件数 在MATLAB中,通过调用函数det、rank、inv、cond即可分别求的矩阵的行列式的值、秩、矩阵的逆和条件数。,11.1 MATLAB在高等数学中的应用,4.线性方程组求解 考虑线性方程组,很显然,利用矩阵的逆可以直接求解线性方程组:这也称为直接法;也可以直接利用之前介绍的反除,即。,5.矩阵的三角分解 根据线性代数理论,如果矩阵A是非奇异矩阵,则它一定可以分解为一个非奇异的单位下三角矩阵和非奇异上三角矩阵,使得 成立,但由于需要涉及到选主元来交换某些行,因此还需要增加一个置换矩阵P来构成完整的三角分解,在MATLAB中,通过调用函数lu来实现上述过程。,6.矩阵特征多项式和特征值 求矩阵特征多项式和特征值是线性代数中经常遇到的问题,在MATLAB中通过调用函数eig来实现,其调用格式为(1)v=eig(A),求矩阵A的特征值,返回形式为由特征值组成的列向量。(2)b,v=eig(A),返回结果b是由特征向量组成的矩阵,而v为以特征值为对角线的对角矩阵。,11.1 MATLAB在高等数学中的应用,方程求根 1.函数零点 罗尔(Role)零点定理证明了对于,且,则必存在区间 内的一点,使得,就是函数的零点。在MATLAB中使用函数fzero很容易求得零点,使用方式为(1)fzero(myfun,x0),表示求函数fun在x0附近的零点,其中fun为函数句柄。(2)fzero(myfun,a b),表示求函数fun在区间a,b上的零点。,11.1 MATLAB在高等数学中的应用,11.1 MATLAB在高等数学中的应用,11.2 Matlab绘图,二维图形在 MATLAB 中,plot是最基本的二维绘图函数,其调用格式有:(1)plot(Y):若Y为实向量,则以该向量元素的下标为横坐标,以Y的各元素值为纵坐标,绘制二维曲线;若Y为复数向量,则等效于plot(real(Y),imag(Y);若Y为实矩阵,则按列绘制每列元素值相对其下标的二维曲线,曲线的条数等于Y的列数;若Y为复数矩阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条二维曲线。(2)plot(X,Y):若X、Y为长度相等的向量,则绘制以X和Y为横、纵坐标的二维曲线;若X 为向量,Y是有一维与Y同维的矩阵,则以X为横坐标绘制出多条不同色彩的曲线,曲线的条数与Y的另一维相同;若X、Y为同维矩阵,则绘制以X和Y对应的列元素为横、纵坐标的多条二维曲线,曲线的条数与矩阵的列数相同。,11.2 Matlab绘图,(3)plot(X1,Y1,X2,Y2,Xn,Yn):其中的每一对参数Xi 和 Yi(i=1,2,.,n)的取值和所绘图形与(2)中相同。(4)plot(X1,Y1,LineSpec,.):以LineSpec 指定的属性,绘制 所有Xn、Yn 对应的曲线。(5)plot(.,PropertyName,PropertyValue,.):对于由plot 绘制的所有曲线,按照设置的属性值进行绘制,PropertyName 为属性名,PropertyValue 为对应的属性 值。,11.2 Matlab绘图,例如 按不同颜色和线型绘图。x=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 max。,11.3 Matlab图像处理,图像基础1.图像及其类型 MATLAB 图像处理工具箱支持4种基本图像类型:索引图像、灰度图像、二进制图像和真色彩(RGB)图像。(1)索引图像 索引图像包括图像矩阵和色图矩阵。其中色图是按图像中颜色值进行排序后的矩阵。对于每个像素图像矩阵包含一个值,这个值就是色图矩阵中的索引。色图为m3的双精度值矩阵,各行分别指定红绿蓝(RGB)的单色值,RGB 为值域是0,1的实数值,0代表最暗,1 代表最亮。,(2)灰度图像 灰度图像保存在一个矩阵中,矩阵的每个元素代表一个像素点。矩阵可以是双精度类型,值域为0,1;也可以为unit8类型,值域为0,255。矩阵的每个元素值代表不同的亮度或灰度级,0 表示黑色,1(或unit8的255)代表白色。(3)二进制图像 表示二进制图像的二维矩阵仅由0和1构成。二进制图像可以看作一个仅包括黑与白的特殊灰度图像,也可以看作共有两种颜色的索引图像。二进制图像可以保存为双精度或unit8 类型的数组,显然,用unit8 类型可以节省空间。在图像处理工具箱中,任何一个返回二进制图像的函数都是以unit8 类型逻辑数组来返回的。,(4)真彩色(RGB)图像 真彩色图像用RGB这3个亮度值表示一个像素的颜色,真彩色(RGB)图像各像素的亮度值直接存在图像数组中,图像数组为mn3,m、n表示图像像素的行数和列数。2.数字图像格式 计算机数字图像文件常用格式有:BMP(Windows 位图文件)、HDF(层次数据格式图像文件)、JPEG(联合图像专家组压缩图像文件)、PCX(Windows 画笔图像文件)、TIF(标签图像格式文件)、XWD(X Windows Dump 图像格式文件)等。,11.3 Matlab图像处理,图像的读和写1.读入图像从图像文件中读入图像数据用函数imread,常用格式如下:(1)A=imread(filename,fmt):将文件名指定的图像文件读入A,如果读入的是灰度图像,则返回MN 的矩阵;如果读入的是彩色图像,则返回MN3 的矩阵。fmt 为代表图像格式的字符串,常见的有bmp、hdf、jpg、gif、png、pcx 等。(2)X,map=imread(filename,fmt):将文件名指定的索引图像读入到矩阵X,其返回色图到map。,11.3 Matlab图像处理,2.写图像文件 用函数imwrite 可以将图像写入文件,其命令格式如下:(1)imwrite(A,filename,fmt):将A中的图像按fmt指定的格式写入文件filename 中。(2)imwrite(X,map,filename,fmt):将矩阵X中的索引图像及其色图map按fmt指定的格式写入文件filename 中。,11.3 Matlab图像处理,图像的显示MATLAB 的图像处理工具箱提供了函数imshow 显示图像。(1)imshow(I,n):用n个灰度级显示灰度图像,n默认时使用256级灰度或64级灰度显示图像。(2)imshow(I,low,high):将I显示为灰度图像,并指定灰度级为范围low,high。(3)imshow(BW):显示二进制图像。(4)imshow(X,map):使用色图map 显示索引图像X。(5)imshow(RGB):显示真彩色(RGB)图像。(6)imshow(filename):显示filename 所指定的图像文件。,11.3 Matlab图像处理,例如 显示灰度图像月亮(moon.tif)。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中有许多图像类型转换的函数,读者可进一步参考相关资料。,