1Matlab简介西南交通大学峨眉校区基础课部数学教研室2MATLAB的发展史MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的CleveMoler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。1984年由Little、Moler、SteveBangert合作成立MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。1997年仲春,MATLAB5.0版问世,紧接着是5.1、5.2,以及和1999年春的5.3版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。前一页后一页返回3MATLAB语言的主要特点(1)具有丰富的数学功能包括矩阵各种运算。如:正交变换、三角分解、特征值、常见的特殊矩阵等。包括各种特殊函数。如:贝塞尔函数、勒让德函数、伽码函数、贝塔函数、椭圆函数等。包括各种数学运算功能。如:数值微分、数值积分、插值、求极值、方程求根、FFT、常微分方程的数值解等。(2)具有很好的图视系统可方便地画出两维和三维图形。图形用户界面GUI制作工具,可以制作用户菜单和控件。使用者可以根据自己的需求编写出满意的图形界面。高级图形处理。如:色彩控制、句柄图形、动画等。前一页后一页4MATLAB语言的主要特点(续)(3)可以直接处理声言和图形文件。(4)具有若干功能强大的应用工具箱。(5)使用方便,具有很好的扩张功能。声言文件。如:WAV文件(例:wavread,sound等)。图形文件。如:bmp、gif、pcx、tif、jpeg等文件。如:SIMULINK、COMM、DSP、SIGNAL等16种工具箱。(6)具有很好的帮助功能可以M文件转变为独立于平台的EXE可执行文件。使用MATLAB语言编写的程序可以直接运行,无需编译。提供十分详细的帮助文件(PDF、HTML、demo文件)。联机查询指令:help指令(例:helpelfun,helpexp,helpsimulink),lookfor关键词(例:lookforfourier)。MATLAB的应用接口程序API是MATLAB提供的十分重要的组件,由一系列接口指令组成。用户就可在FORTRAN或C中,把MATLAB当作计算引擎使用。前一页后一页5MATLAB简介1MATLAB的计算功能(1)MATLAB的数据类型现有四种基本数据类型:双精度数组、字符串数组、元胞数组、构架数组。元胞数组(CellArray)如同银行里的保险箱库一样。•该数组的基本组分是元胞(Cell),以下标来区分。•元胞可以存放任何类型、任何大小的数组。构架数组(StructureArray)也能存放各类数据。•该数组的基本组分是构架(Structure),以下标来区分。•构架必须在划分“域”后才能使用。•数据不能存放于构架,只能存放在域中。•构架的域可以存放任何类型、任何大小的数组。•不同构架的同名域中存放的内容可不同。(例1_2_2)•同一个元胞数组中各元胞的内容可以不同。(例1_2_1)前一页后一页6一.矩阵:1.矩阵的建立与表示法:在命令窗口中输入:A=[1,2,3;4,5,6;7,8,9]可以得到:A=123456789若要显示整行或整列,则可以用(:)冒号来表示。冒(:)代表矩阵中行(ROWS)或列(COLUMNS)的全部。例如执行命令:A(:,2),就会显示第2列的全部,结果为:ans=258前一页后一页7其他特殊矩阵的生成方法:1)、eye(m,n)或eye(m)产生m*n或m*m的单位矩阵。例如:eye(3,4)与eye(3)分别产生如下矩阵:1000100010001000100012)、zeros(m,n)或zeros(m)产生m*n或m*m的零矩阵。例如:zeros(3,4)与zeros(3)分别产生如下矩阵:000000000000000000000前一页后一页83)、ones(m,n)或ones(m)产生m*n或m*m的全部元素为1的矩阵。例如:ones(3,4)与ones(3)分别产生如下矩阵:1111111111111111111112.常用矩阵函数:1)、d=eig(A)返回矩阵A的特征值所组成的列向量;[v,d]=eig(A)返回分别由矩阵A的特征向量和特征值(以其为主对角线元素,其余元素为零)的两个矩阵。例如执行命令:[v,d]=eig(A)结果为:前一页后一页9v=d=0.23200.78580.408216.1168000.52530.0868-0.81650-1.116800.8187-0.61230.408200-0.0000其中v(:,i)为d(i,i)所对应的特征向量。2)、det(A)计算行列式A的值。例如:det(A)结果为:ans=0前一页后一页103)、expm(A)对矩阵A求幂。例如:expm(A)结果为:ans=1.0e+006*1.11891.37481.63072.53393.11343.69293.94894.85205.75524)、inv(A)求矩阵A的逆。例如:inv(A)结果为:Warning:Matrixisclosetosingularorbadlyscaled.Resultsmaybeinaccurate.RCOND=2.055969e-018.ans=1.0e+016*-0.45040.9007-0.45040.9007-1.80140.9007-0.45040.9007-0.4504前一页后一页115)、orth(A)返回对应于A的正交化矩阵。例如:orth(A)结果为:ans=0.21480.88720.52060.24960.8263-0.38796)、poly(A)若A为一矩阵,则返回A的特征多项式。例如:poly(A)结果为:ans=1.0000-15.0000-18.0000-0.0000若A为一向量,则返回以A的元素为根的特征多项式。例如:r=[1,2,3];p=poly(r)结果为:p=1-611-67)、rank(A)计算矩阵A的秩。例如:r=rank(A)结果为:r=2前一页后一页123.矩阵的四则运算符号:加“+”减“—”乘“*”除“/”共轭转置“’”非共轭转置“.’”例如:b=[1+2i;3+4i]b=1.0000+2.0000i3.0000+4.0000ib'ans=1.0000-2.0000i3.0000-4.0000ib.'ans=1.0000+2.0000i3.0000+4.0000i前一页后一页134.矩阵分解:1)、[q,r]=qr(A)将矩阵A做正交化分解,使得A=q*r。q为单位矩阵(unitarymatrix),其范数(norm)为1。r为对角化的上三角矩阵。例如:[q,r]=qr(A)q=-0.12310.90450.4082-0.49240.3015-0.8165-0.8616-0.30150.4082r=-8.1240-9.6011-11.078200.90451.809100-0.0000norm(q)ans=1.0000前一页后一页142)、[L,U]=lu(A)将矩阵A做对角线分解,使得A=L*U,L为下三角矩阵(lowertriangularmatrix),U为上三角矩阵(uppertriangularmatrix)。例如:[L,U]=lu(A)L=0.14291.000000.57140.50001.00001.000000U=7.00008.00009.000000.85711.7143000.0000前一页后一页15二、多项式:多项式是用向量形式来表示,从最右边算起,第一个为0阶系数,第二个为1阶系数,依次类推。例如一个一元三次多项式:4x^3+3x^2+2x+1用[4321]来表示。1.多项式的运算:1)、乘:conv指令执行多项式的相乘运算,指令格式为:z=conv(x,y)例如:x=[135];y=[246];z=conv(x,y)z=210283830前一页后一页16如果要对两个以上的多项式进行相乘,可以重复使用conv指令,例如:(x,y同上)conv(conv(x,y),x)ans=216681722842801502)、分解:与1)相反,用deconv指令,其指令格式为:[z,r]=deconv(x,y)表示x除以y商为z,余数为r。例如:[z,r]=deconv(z,x)z=246r=00000前一页后一页173)、求根:roots指令用于求多项式的根。例如:fx=[132];rootoffx=roots(fx)rootoffx=-2-14)、polyval(p,x)计算多项式p在x出的值,其中x可以是点或向量或矩阵。例如:p=[1-611-6];x=1;p1=polyval(p,x)结果为:p1=0x=[1,2,3];p2=polyval(p,x)结果为:p2=000前一页后一页18x=A;p3=polyval(p,x)结果为:p3=000624601202103365)、polyder(p)求p的微分多项式。例如:p=[1-611-6];dp=polyder(p)dp=3-1211前一页后一页196)、[r,p,k]=residue(x,y)求x/y的部分因式分解。若多项式x,y都没有重根,则可把x/y的比值表示为x/y=r1/(s-p1)+r2/(s-p2)+...+rn/(s-pn)+ks例如用residue指令求x/(x^2+3x+2)的部分因式分解:x=[10];y=[132];[r,p,k]=residue(x,y)r=2-1p=-2-1k=[]前一页后一页20当输入三个参数r,p,k时,该函数又会生成原来的函数。例如:?[x,y]=residue(r,p,k)x=10y=132前一页后一页21三符号变量、符号表达式、抽象函数:函数sym用于生成符号变量和符号表达式,如:x=sym(‘x’)a=sym(‘alpha’)分别创建变量x,alphaf=sym(‘a*x^2+b*x+c’)创建变量表达式f,但要注意此式并没有自动创建变量a,b,c,x。可以用函数syms对多个变量同时定义,如:symsabcx函数sym也可以用来表示确定的函数,如f=sym(‘f(x)’)生成函数f(x)。前一页后一页22四常见符号计算:1.微分:diff是求微分最常用的函数。其输入参数既可以是函数表达式,也可以是符号矩阵。Diff(f,x,n)表示对f关于x求n阶导数。例如:1).下面程序段将生成表达式sin(ax),并分别对其中的x和a求导。?symsax?f=sin(a*x);?df=diff(f,x)df=cos(a*x)*a?dfa=diff(f,a)dfa=cos(a*x)*x前一页后一页232)、若输入参数为矩阵,将对矩阵中的每个元素求导。?symsax?A=[-sin(a*x),sin(a*x);cos(a*x),cos(a*x)]A=[-sin(a*x),sin(a*x)][cos(a*x),cos(a*x)]?dy=diff(A,x)dy=[-cos(a*x)*a,cos(a*x)*a][-sin(a*x)*a,-sin(a*x)*a]前一页后一页243)、可用函数jacobian来计算Jacobi矩阵。?symsrlf?x=r*cos(l)*cos(f);?y=r*cos(l)*sin(f);?z=r*sin(l);?J=jacobian([x;y;z],[rlf])J=[cos(l)*cos(f),-r*sin(l)*cos(f),-r*cos(l)*sin(f)][cos(l)*sin(f)