第2章基本语法_第1页
第2章基本语法_第2页
第2章基本语法_第3页
第2章基本语法_第4页
第2章基本语法_第5页
已阅读5页,还剩150页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章MATLAB基本语法2.1.1变量命名规则变量名由字母、数字和下划线组成,字母间不可留空格,而且第一个字符必须为字母。变量名中的英文字母大小写是有区别的。(A1B和a1b是有区别的)变量名的上限是19个字母。第1节变量及常用函数变量名意义ans如果用户没有定义变量名,系统用于计算结果存储的默认变量名。pi圆周率л(=3.1415926…)Inf无穷大∞值,如1/0eps浮点数的精度,也是系统运算时所确定的极小值(=2.2204e-16)realmin最小浮点数,2.2251e-308matlab7.0realmax最大浮点数,1.7977e+308matlab7.0NaN不定量,如0/0或inf/infi或j虚数i=j=sqrt(-1)nargin函数的输入变量数目nargout函数的输出变量数目保留特殊变量名变量名的查看与删除直接键入变量名使用who和whos命令可以查看所有定义的变量的情况,其中who命令可以查看当前工作区内的变量,whos用来查看当前工作区内的变量和详细信息。使用clear命令来删除所有定义过的变量,如果只是要去除其中的某几个变量,则应在clear命令后面指明要删除的变量名称。变量显示格式(表1-1)MATLAB中所有的数值量为双字长浮点数,显示按下面显示规则:在缺省情况下,当结果为整数,作为整数显示;当结果为实数,以小数后4位的精度近似显示。

如果结果中的有效数字超出了这一范围,以科学计数法显示结果。format命令改变显示格式,常用的的格式有long(16位)bank(2个十进制位)hex(十六进制)short(缺省)shorte(5位加指数)+(符号)longe(16位加指数)rat(有理数近似)x=[4/31.2345e–6]formatshort 1.33330.0000

formatshorte 1.3333e+0001.2345e–006

formatshortg1.33331.2345e–006

formatlong 1.33333333333333 0.00000123450000

formatlonge 1.333333333333333e+000 1.234500000000000e–006

formatlongg 1.333333333333331.2345e–006

formatbank 1.330.00

formatrat 4/31/810045

formathex 3ff5555555555555 3eb4b6231abfd2712.1.2基本运算MATLAB基本运算符运算符号范例加+1+2减-1-2乘*1*2除/或\1/2或1\2幂次方^1^22.1.3、常用函数1、调用格式:变量名=函数名(参数)函数名解释Matlab函数命令幂函数x^asqrt(x)=x^(1/2)指数函数a^xexp(x)对数函数log(x)log2(x)log10(x)函数名解释Matlab函数命令三角函数sin(x)cos(x)tan(x)cot(x)sec(x)csc(x)函数名解释Matlab函数命令反三角函数asin(x)acos(x)atan(x)acot(x)asec(x)acsc(x)绝对值函数abs(x)2.1.4、其他函数fix朝零方向取整ceil朝正无穷大取整floor朝负无穷大取整rem除后取余数round四舍五入angle复数相角imag复数虚部lcm(x,y)整数x和y的最小公倍数gcd(x,y)整数x和y的最大公约数

real复数实部conj复数共轭exp指数sqrt平方根lcm(x,y)整数x和y的最小公倍数gcd(x,y)整数x和y的最大公约数函数一定是出现在等式的右边。每个函数对其自变量的个数和格式都有一定的要求,如使用三角函数时要注意角度的单位是“弧度”而非“度”。例如sin(1)表示的不是sin1°而是sin57.28578°函数允许嵌套,例如:可使用形如sqrt(abs(sin(225*pi/180)))的形式。2.1.5、使用函数注意事项例1:设两个复数a=1+2i,b=3-4i,计算a+b,a-b,a×b,a/b。a=1+2i;b=3-4i;a+bans=4.0000-2.0000ia-bans=-2.0000+6.0000ia*bans=11.0000+2.0000ia/bans=-0.2000+0.4000i例2:计算下式的结果,其中x=-3.5°,y=6.7°。x=pi/180*(-3.5);y=pi/180*6.7;z=sin(abs(x)+abs(y))/sqrt(cos(abs(x+y)))z=1772

例3:我国人口按2000年第五次全国人口普查的结果为12.9533亿,如果年增长率为1.07%,求公元2010年末的人口数。计算人口的公式为:p1=p0(1+r)n,其中:p1为几年后的人口,p0为人口初值,r为年增长率,n为年数。r=0.0107;n=2010-2000;p0=12.9533e8;p1=p0*(1.0+r)^np1=1.4408e+009例4:求解方程ax2+bx+c=0的根,其中a=1,b=2,c=3。a=1;b=2;c=3;d=sqrt(b*b-4*a*c);x1=(-b+d)/(2*a)x1=-1.0000+1.4142ix2=(-b-d)/(2*a)x2=-1.0000-1.4142i2.1.6习题习题1:设A=1.2,B=-4.6,C=8.0,D=3.5,E=-4.0,计算习题2:设a=5.67,b=7.811,计算习题3:已知圆的半径为15,求其直径,周长及面积。习题4:已知三角形三边a=8.5,b=14.6,c=18.4,求三角形面积。提示

其中:s=(a+b+c)/2。例5:计算1996/18的结果例6:计算:例7:已知y=x2,求x=π时的y值。第2、3节MATLAB的矩阵计算2.2.1、矩阵矩阵的构造要用MATLAB做矩阵运算,必须要将矩阵直接输入到MATLAB中去,其中最方便的是将矩阵直接输入。须遵循以下规则:⑴用中括号[]把所有矩阵元素括起来。⑵同一行的不同元素之间数据元素用空格或逗号间隔。⑶用分号(;)指定一行结束。⑷也可分成几行输入,用回车代替分号。⑸数据元素可是表达式,系统将自动计算。方法1:直接输入A=[1,2,3,4;5678;9101112;13141516]A=12345678910111213141516注意逗号、分号和空格的用法。方法2:利用表达式输入B=[1,sqrt(25),9,132,6,10,7*23+sin(pi),7,11,154abs(-8)1216]B=15913261014371115481216注意回车键的用法。方法3:利用内部函数产生矩阵内部函数列表如下:函数功能eye产生单位矩阵zeros产生全部元素为0的矩阵ones产生全部元素为1的矩阵[]产生空矩阵rand产生随机元素的矩阵linspace产生线性等分的矩阵compan产生伴随矩阵x=linspace(2,12,6)x=24681012ones(3)ones(3,4)F=5*ones(3)z=zeros(2,4)R=rand(4,4)x=0:0.5:2y=linspace(0,2,7)z=[0x1]u=[y;z]2.2.2、矩阵元素采用下标来表示矩阵元素,同时可用下标对矩阵元素进行修改A=[1,2,3;4,5,6;7,8,9]A=123456789A(1,1)ans=1A(2,3)ans=6A(1,1)=0;A(2,3)=A(1,2)+A(3,2);AA=02345107892.2.3、矩阵运算MATLAB对矩阵的运算类似于线性代数。矩阵的加减运算运算符+-对应元素的加减适用于两矩阵同阶或其一是标量的情况。例:已知矩阵A和B,计算C=A+B,D=A-B和E=A+3。A=[21,2,4;7,13,19;1,8,17];B=[122524;11139;681];C=A+BC=33272818262871618D=A-BD=9-23-20-4010-5016E=A+3E=245710162241120矩阵乘法运算符*适用于前一矩阵的列数和后一矩阵行数相同或者其中为标量的情况。例:矩阵A和B同上例,试求C=A*B和D=A*3。C=A*BC=298583526341496304202265113D=A*3D=6361221395732451矩阵除法运算符\左除/右除若A矩阵是非奇异方阵,则A\B和B/A运算均可以实现,且左除和右除一般不同,这是因为:A\B=inv(A)*bB/A=B*inv(A)其中inv函数用来求某一个矩阵的逆阵。例:已知矩阵A和B,试计算A\B和A/B。A\Bans=0.50811.11681.14290.3216-0.61860.28570.17170.6960-0.1429A/Bans=-1.83365.6985-3.28010.55350.7891-1.38710.74960.0478-1.4201矩阵的乘方运算符:^例:已知A是一方阵,P是一个正整数,则A^P表示A自乘P次。A=[1234;5678;9101112;13141516];A^1A^2ans=90100110120202228254280314356398440426484542600A^3矩阵的点运算(元素群运算)为实现与矩阵相关的标量运算而设计的。运算符:.与矩阵的常规运算不同,是针对于矩阵中的元素定义的。分类:点乘.*点乘方.^点除./元素群函数见书p23例:已知矩阵A和B,试求A*B,A.*B和A.^3.A=[12;34];B=[56;78];C=A*BC=19224350D=A.*BD=E=5121821322764矩阵转置运算符:'例:已知矩阵A,求其转置矩阵。A=[1234;5678;9101112;13141516]A=12345678910111213141516A‘ans=15913261014371115481216同上例(验证复数转置后为它的复共轭)D=A*iD=

0+1.0000i0+2.0000i0+3.0000i0+4.0000i0+5.0000i0+6.0000i0+7.0000i0+8.0000i0+9.0000i0+10.0000i0+11.0000i0+12.0000i0+13.0000i0+14.0000i0+15.0000i0+16.0000iD'ans=

0-1.0000i0-5.0000i0-9.0000i0-13.0000i0-2.0000i0-6.0000i0-10.0000i0-14.0000i0-3.0000i0-7.0000i0-11.0000i0-15.0000i0-4.0000i0-8.0000i0-12.0000i0-16.0000i求逆矩阵矩阵A可逆,则矩阵A的逆矩阵是唯一的。例:求一矩阵的逆矩阵,并验证所得结果。G=[120;25-1;410-1];X=inv(G)X=52-2-2-110-21I=inv(G)*GI=100010001求特征值设A为n阶矩阵,λ是一个数,如果方程Ax=λx存在非零解向量,则称λ为A的一个特征值,相应的非零向量x称为特征值λ对应的特征向量。例:已知矩阵G,求其特征值。G=[120;25-1;410-1];eig(G)ans=3.73210.26791.0000求特征多项式MATLAB提供了求特征多项式的函数poly。例:根据一向量的值,构造一多项式。G=[120;25-1;410-1];poly(G)ans=1.0000-5.00005.0000-1.0000round(poly(G))ans=1-55-1求方阵的行列式若将矩阵看做是行列式,可求相应的行列式值,函数为det。例:已知矩阵G,求其对应的行列式值。G=[120;25-1;410-1]G=12025-1410-1det(G)求解线性方程组线性方程组的一般矩阵形式表示如下:AX=B(XA=B)若方程组有解,则X=A\B(X=B/A)。例:求下列线性方程组的根要解上述的联立方程式,可以使用“\”,即X=A\B。A=[21-3;3-22;5-3-1];B=[5;5;16];X=A\BX=1-3-2向量矩阵在一定的程度上可以看作是向量的组合,因而,矩阵运算可看作是向量的计算。向量的产生类似于矩阵,也可采用“:”生成。例:x=1:5%初值=1,终值=5,步长=1x=12345y=1:2:9%初值=1,终值=9,步长=2y=13579z=9:-2:1%初值=9,终值=1,步长=-2z=97531常用的矩阵函数函数功能det计算矩阵所对应的行列式值inv求矩阵的逆矩阵rank求矩阵的秩eig求特征值和特征向量orth正交化poly求特征多项式lu用高斯消元法所得的系数矩阵qr正交三角矩阵分解2.2.4矩阵的操作在MATLAB命令行中,使用whos命令可以察看到所有变量的大小。为了获得矩阵或者向量的大小,MATLAB还提供了两个有用的函数size和length。size按照下面的形式使用:[m,n]=size(a,x)。一般的,函数的输入参量x不是用,这是当只有一个输出变量时,size返回一个行向量,第一个数为行数,第二个数为列数;如果有两个输出变量,第一个返回量为行数,第二个返回数为列数。当使用x时,x=1返回行数,x=2返回列数,这时只有一个返回值。length返回行数或者列数的最大值,即length(a)=max(size(a))。矩阵的大小矩阵旋转MATLAB提供了一组执行矩阵操作的函数,例如flipud(a)使得矩阵上下翻转,fliplr(a)使得矩阵左右翻转,rot90(a)使得矩阵逆时针翻转90°等等。逻辑矩阵概念逻辑矩阵是大小和对应矩阵相同,而元素为0或者1的数组。逻辑数组一般由关系算子创建。可以使用逻辑矩阵来取得矩阵的部分元素值,得到矩阵中所有大于3的值。使用逻辑矩阵也可以对矩阵的部分赋值。矩阵查找和排序子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如:»a=10:20;»find(a>15)ans=7891011矩阵的排序使用sort函数,它将矩阵按照升序排列。5矩阵的查找和排序子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。矩阵的排序使用sort函数,它将矩阵按照升序排列。应用:去奇异点:a(find(a<std(a)*3))嵌入数据:在指定大小的数据后加入数据替换:替换指定大小的数据段2.2.5、应用举例例1:矩阵相乘已知求:C=A×B。A=[123;-200;101;-12-3]A=123-200101-12-3B=[-1,3;-22;21]B=-13-2221C=A*BC=1102-614-9-2例2:设矩阵A和B满足关系式AB=A+2B。已知求矩阵B。提示:由AB=A+2B可得(A-2E)B=A,故B=(A-2E)-1AA=[423;110;-123];B=inv(A-2*eye(3))*AB=3.0000-8.0000-6.00002.0000-9.0000-6.0000-2.000012.00009.0000例3:求解线性方程组。提示:将该线性方程组变换为AX=B形式。其中:A=[2-13;31-5;4-11]A=2-1331-54-11B=[5;5;9];X=A\BX=2-102.2.6、习题习题1:已知矩阵A和B求(1)2A+B(2)4A2-3B2(3)AB(4)BA(5)AB-BA习题2:设三阶矩阵A、B,满足A-1BA=6A+BA其中求矩阵B。习题3:设(2E-C-1B)AT=C-1,其中E是4阶单位矩阵,AT是4阶矩阵A的转置。求矩阵A习题4:设二阶矩阵A,B,X,满足X-2A=B-X其中求矩阵X。习题5:求解线性方程组第4节逻辑判断及流程控制2.4.1、关系运算关系运算结果只有两种可能:0或1它是对矩阵的各个元素进行运算A=magic(6)p=rem(A,3)p=(rem(A,3)==0)[j,k]=find(p)find(p)lp=find(p)<<=>>===~=小于小于等于大于大于等于等于不等于2.4.2、逻辑运算与(&);或(|);非(~); 异或(xor)all(全为真);any(不全为真)输入量为矩阵,按列进行运算u=p|~pall(p)all(u)any(p)2.4.3、流程控制语句 Matlab提供了三种常用控制结构:顺序结构、分支结构和循环结构。由于这些结构经常包含大量的Matlab命令,故经常出现在命令文件中,而不是直接出现在Matlab提示符后面。做为一名Matlab使用者来说,编程序的一个主要内容就是如何解决一个应用问题所使用的算法用Matlab的语言和函数来描述。换句话说,也就是组织Matlab程序的结构。(1)顺序结构顺序结构是由多个程序结构串联而成的,每一个程序模块可以是一条语句、一段程序、一个函数等。由顺序结构编写的程序,命令执行时是从前至后依次完成的,严格遵循一定的规则:依次执行。在用MATLAB编写程序时,实现顺序结构的方法非常简单:只需将多个要执行的命令段(程序模块)顺序即可(2)选择结构 选择结构又称分支结构。在实际编程过程中,并不能仅仅依靠顺序结构。在求解实际问题时,常常要根据输入数据的实际情况进行逻辑叛断,对不同的结果分别进行不同的处理;或者需要反复执行某些程序段落,以避免重复编写结构相似的程序段落带来的程序结构上的臃肿。这就需要在程序中引入选择结构和循环结构。所有的程序都是由这三种基本程序结构交替综合而实现的。很多情况下,命令的序列必须根据关系的检验有条件地执行。在MATLAB语言中,这种判断主要由If-Else-End结构和Switch-Case-End结构来完成。If-Else-End结构最简单的If-Else-End结构是:

ifexpression commands… end如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}。较复杂的If-Else-End结构具体结构如下:

ifexpressioncommandsevaluatedifTrueelsecommandsevaluatedifFalseend如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。结构If-Else-End在使用过程中也程序嵌套,具体应用格式如下所示:ifexpression1commandsevaluatedifexpression1isTrueelseifexpression2commandsevaluatedifexpression2isTrueelseifexpression3commandsevaluatedifexpression3isTrue

...elsecommandsevaluatedifnootherexpressionisTrueend例:输入一个数,小于100大于0就打印这个数,否则就打印“n>100”或“n<0”。%Thisprogramcanprintanumber%whenitislesserthan100and%largerthan0.n=input('enteranumber,n=')ifn<=100&n>0nelseifn>100sprintf('n>100')elsesprintf('n<0')endendSwitch-Case-End结构Switch-Case-End结构用于实现多重选择,其应用格式如下:

switch<expression>case<number1>command1case<number2>command2……otherwise……end其中的otherwise模块可以省略;switch语句的执行过程是:首先计算表达式的值,然后将其结果与每一个case后面的数值常量依次进行比较,如果相等则执行该case模块中的语句,在执行完该case模块以后就跳出switch语句。如果表达式的值与所有case模块的进入值无一相同,则执行otherwise模块中的语句。Switch也可以在一个case语句中,处理多值情况,通过将多值用大括号扩起来作为一个单元实现。例:编写一个函数,将百分制的学生成绩转换为五级制的成绩。functionf=TranGrade(x)switchfix(x/10)case{10,9}f='A';case8f='B';case7f='C';case6f='D';otherwisef='E';end(3)循环结构在三种常用的控制结构中,还有一种是循环结构。与其它高级一样,循环结构又分为For语句和While语句两种,首先介绍一下For结构。For循环

For循环允许一组命令以固定的和预定的次数重复。For循环的一般形式是: forx=array {commands} end在for和end语句之间的{commands}按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n)。例:forn=1:10 x(n)=sin(n*pi/10); endx=Columns1through7

0.30900.58780.80900.95111.00000.95110.8090Columns8through10

0.58780.30900.0000分析:换句话,第一语句是说:对n等于1到10,求所有语句的值,直至下一个end语句。第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。在n=10以后,For循环结束,然后求end语句后面的任何命令值,在这种情况下显示所计算的x的元素。例:求1+2+3+…+100的和。s=0;fori=1:100s=s+i;endsFor

循环使用过程中的注意事项:For循环不能用For循环内重新赋值循环变量n来终止。例:forn=1:10

x(n)=sin(n*pi/10); n=10;Endx=Columns1through70.30900.58780.80900.95111.00000.95110.8090Columns8through100.58780.30900.0000(2)语句1:10是一个标准的MATLAB数组创建语句。在For循环内接受任何有效的MATLAB数组。data=[39456;716-15] data= 39456 716-15

forn=data x=n(1)-n(2)Endx=-4 x=-7x=46x=1(3)For循环可按需要嵌套。forn=1:5 form=5:-1:1 A(n,m)=n^2+m^2; enddisp(n)end

(4)当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为n=1:10;x=sin(n*pi/10)两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。(5)为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为x=zeros(1,10);%preallocatedmemoryforxforn=1:10x(n)=sin(n*pi/10);end现在,只有x(n)的值需要改变。当循环(While循环)与For循环以固定次数求一组命令的值相反,While循环以不定的次数求一组语句的值。While循环的一般形式是:whileexpression commandsend

只要在表达式里的所有元素为真,就执行while和end语句之间的{commands}。通常,表达式的求值给出一个标量值,但数组值也同样有效。存在:死循环问题例:矩阵指数的幂级数展开式如下式所示,试利用while循环求矩阵的指数.functionf=myexpm(a)e=eye(size(a));f=zeros(size(a));k=1;whilenorm(e,1)>0f=f+e;e=a*e/k;k=k+1;end分析:本例的计算结果可通过MATLAB函数expm(a)进行验证。程序思想是逐项求和,直到第n项趋于零为止。例:求1+2+3+…+100的和。i=0;s=0;whilei<100i=i+1;s=s+i;endstry语句语句格式为:try

语句组1catch

语句组2endtry语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。try例矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示出错原因2.4.4、应用举例例1:Fibonacci数组满足Fibonacci规则:ak+2=ak+ak+1,(k=1,2…);且a1=a2=1。要求该数组中第一个大于10000的元素。a(1)=1;a(2)=1;s=2;whilea(s)<=10000a(s+1)=a(s-1)+a(s);s=s+1;endi,a(i)第5节基本绘图方法在科学研究和工程实践中经常会遇到大批量复杂的数据,如果不借助图表来表现它们之间的关系,一般很难看出这些数据的意义。因此,数据的可视化是进行这方面工作不可缺少的有效手段。但可视化并不像我们想像的那么简单,如果采用传统的编程语言,要想在程序中产生一个图形是相当复杂的过程,完成它不仅需要用户掌握一定的编程技巧,同时也要耗费大量的时间和精力(这一点对任何使用过C或Fortran编程的人都应该有所体会),这必然会影响用户对数据本身的注意力,导致一些不必要的人力资源浪费。一个好的科技应用软件不但能提供给用户功能完善的数值计算能力,而且应该具备操作简单、内容完善的图形绘制功能,这样就能使用户高效地进行数据处理。2.5.0简介MATLAB正是完全考虑了这方面因素的一个成功的软件,它不仅在数值和符号运算方面功能强大,而且在数据可视化方面的表现能力也极为突出。它具有对线型、曲面、视角、色彩、光线阴影等丰富的处理能力,并能以二维、三维乃至多维的形式显示图形数据,可以将数据的各方面特征表现出来。MATLAB的图形处理充分考虑了高低不同层次用户的不同需求。系统具有两个层次的绘图指令:一个层次是直接对图形句柄进行操作的低层绘图指令,它具有控制和表现数据图形能力强,控制灵活多变等优点,对于有较高或特殊需求的用户而言,该层次能够完全满足他们的要求;另一个层次是在底层指令基础上建立起的高层绘图指令,它的指令简单明了,易于掌握,适用于普通用户。2.5.1二维平面图形基本图形函数绘制二维图形的最基本函数是plot,它是针对向量或矩阵的列来绘制曲线的。也就是说,使用plot函数之前,必须首先定义好曲线上每一点的x及y坐标,常用格式有:⑴plot(x)当x为一向量时,以x元素的值为纵坐标,x的序号为横坐标值绘制曲线。⑵plot(x,y)以x元素为横坐标值,y元素为纵坐标值绘制曲线。⑶plot(x,y1,x,y2,…)以公共的x元素为横坐标值,以y1,y2…等为纵坐标值,绘制多条曲线。例:画出一条正弦曲线和一条余弦曲线。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,x,y2)一般绘制曲线图形时,人们常常采用多种颜色或线型来区分不同的数据组,MATLAB系统中专门提供了这方面的参数选项(表2.12)。色彩字符所定颜色线型字符线型格式y黄-实线m紫:点线c青-.点划线r红--虚线g绿b蓝w白k黑标记符号数据点形式标记符号数据点形式.点<小于号o圆s正方形x叉号d菱形+加号h六角形*星号p五角星v向下的三角形^向上的三角形>大于号例:x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,‘r+-’,x,y2,‘k*:’)%组1曲线采用红色实线并用+号显示数据点位置%组2曲线采用黑色点线并用*号显示数据点位置。图形修饰MATLAB为用户提供了一些图形修饰函数,详细情况见下表。(表2.13)函数意义gridon(/off)给当前图形标记添加(取消)网格xlabel(‘string’)标记横坐标ylabel(‘string’)标记纵坐标title(‘string’)给图形添加标题text(x,y,‘string’)在图形的任意位置添加说明性文本gtext(‘string’)利用鼠标添加说明性文本信息axis([xminxmaxyminymax])设置坐标轴的最小最大值特殊符号的输入转义符号\ \alpha \Gamma \beta \Delta \gamma \Theta \delta \Lambda \epsilon \Xi \zeta \Pi \eta \omega \theta …

标注的显示控制

\bf黑体

\it斜体

\rm标准形式

\fontname{fontname}字体名

\fontsize(fontsize)字体大小特殊符号如”\”、”{“、”^“等,用”\”来引导。\bfBoldface\itItalics\rmRestorenormalfont\fontname{fontname}Specifythefontnametouse\fontsize{fontsize}Specifyfontsize_{xxx}Thecharactersinsidethebracesaresubscripts.^{xxx}ThecharactersinsidethebracesaresuperscriptsCharacterSequenceSymbolCharacterSequence

SymbolCharacterSequenceSymbol\alphaα\int∫\betaβ\cong≌\gammaγ\GammaΓ\sim~\deltaδ\DeltaΔ\infty∞\epsilonε\pm±\etaη\leq≤\thetaθ\geq≥\lamdaλ\LamdaΛ\neg≠\muμ\propto∝\nuν\div÷\piπ\PiΠ\circ°\phiφ\leftrightarrow↔\rhoρ\leftarrow←\sigmaσ\SigmaΣ\rightarrow→\tauτ\uparrow↑\omegaω\OmegaΩ\downarrow↓

Ifoneofthespecialescapecharacters\,{,},_or^mustbeprinted,precedeitbybackslashcharacter.StringResult\tau_{ind}versus\omega_{\itm}τindversusωm

\thetavariesfrom0\circto90\circθvariesfrom0oto90o

\bf{B}_{\itS}BS

例:x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,x,y2)gridon%添加网格xlabel('IndependentVariableX')ylabel('DependentVariableY1&Y2')title('SinandCosineCurve')text(1.5,0.3,'cos(x)')gtext('sin(x)')axis([02*pi-0.90.9])使用了图形修饰的正弦、余弦曲线设置坐标轴最大最小值的正弦、余弦曲线图形屏幕控制默认情况下,MATLAB每一次使用plot函数进行图形绘制,将重新产生一个图形窗口。但有时希望后续的图形能够和前面所绘制的图形进行比较。MATLAB提供了两种方法:⑴采用holdon(/off)指令,将新产生的图形曲线叠加到已有的图形上。⑵采用subplot(n,m,k)函数,将函数窗口进行分割,然后在同一个视图窗口中画出多个小图形。(3)figure(n)打开多个窗口(4)clf清除当前窗口内容例:在同一窗口中绘制线段。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);y3=x;plot(x,y1,x,y2)holdon%plot(x,y3)plot(x,y2+y1)%holdoff例:在多个窗口中绘制图形。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);y3=exp(x);y4=y1+y2;subplot(2,2,1)%plot(x,y1)subplot(2,2,2)%plot(x,y2)subplot(2,2,3)%plot(x,y3)subplot(2,2,4)%plot(x,y4)2.5.2三维立体图形和二维图形相对应,MATLAB提供了plot3函数,可以在三维空间中绘制三维曲线,它的格式类似于plot,不过多了z方向的数据。llot3使用格式如下:

plot3(x1,y1,z1,x2,y2,z2…)其中x1,y1,z1,x2,y2,z2…等分别为维数相同的向量,分别存储着曲线的三个坐标值,该函数的使用方式和plot类似,也可以采用多种颜色或线型来区分不同的数据组,只需在每组变量后面加上相关字符串即可实现该功能。例:绘制下面方程在t=[02π]的空间图形。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot3(y1,y2,x,'m:p')gridonxlabel('DependentVariableY1')ylabel('DependentVariableY2')zlabel('DependentVariableX')title('SineandCosineCurve')三维曲面图在MATLAB中要绘制三维曲面,可以使用mesh(x,y,z)或surf(x,y,z)函数来实现。函数mesh为数据点绘制网格线,图形中的每一个已知点和其附近的点用直线连接。函数surf和函数mesh的用法类似,但它可以着色表面图,图形中的每一个已知点和其相邻点用平面连接。为了方便测试立体绘图,系统提供了一个peaks函数,它可以产生一个N×N的高斯分布矩阵,其对应的图形是一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。利用peaks函数可以比较mesh和surf的区别。例:分别用mesh和surf函数绘制高斯矩阵的曲面。z=peaks(40);mesh(z);%以z矩阵元素和其下标为数据点绘制网格线surf(z);%着色表面图在曲面绘图中,另外一个重要的函数是函数meshgrid,其一般使用格式为:[X,Y]=meshgrid(x,y)其中x和y是向量,通过该函数可将x和y指定的区域转换成为矩阵X和Y。这样我们在绘图时就可以先用meshgrid函数产生在x-y平面上的二维的网格数据,再以一组z轴的数据对应到这个二维的网格,即可画出三维的曲面。例:绘制一面方程在x∈[-7.57.5],y∈[-7.57.5]的图形。x=-7.5:0.5:7.5;y=x;%产生x和y两个变量

[X,Y]=meshgrid(x,y);%形成二维网格数据R=sqrt(X.^2+Y.^2)+eps;%加上eps可避免当R为分母时趋近于零时会无法定义Z=sin(R)./R;%产生z轴数据。surf(X,Y,Z)2.5.3其它图形函数MATLAB除了提供前面所讲的绘图函数plot以外,还提供了其它常用的绘图函数。常用的绘图函数见下表:函数意义loglog使用对数坐标系绘图。semilogx横坐标轴为对数坐标轴,纵坐标轴为线性坐标轴。semilogy横坐标轴为线性坐标轴,纵坐标轴为对数坐标轴。polar绘制极坐标图x=0:pi/10:2*pi;y1=sin(x);subplot(2,2,1)plot(x,y1)函数意义fill绘制实心图bar绘制直方图pie绘制饼图area绘制面积图quiver绘制向量场图stairs绘制阶梯图stem绘制火柴杆图subplot(2,2,2)bar(x,y1)subplot(2,2,3)fill(x,y1,'g')subplot(2,2,4)stairs(x,y1)2.5.4动画MATLAB支持动画的制作和放映,其制作过程比单纯制作静态图形复杂得多,也需要更多的函数来支持。只举一例(通过改变观察点实现)!例:z=peaks(40);surf(z);d=20;[azimuth,elevation]=view;rot=0:1:d;for

i=1:length(rot)view([azimuth+rot(i)elevation])drawnowend2.5.5符号表达式绘图利用可视化技术,可以将表达式进行图形显示,更好的理解表达式含义。MATLAB提供了两个函数ezplot和fplot。函数fplot用来绘制数学函数,其调用格式为fplot(fun,lims),其中fun就是所要绘制的函数,可以是定义函数的M文件名,也可以是以x为变量的可计算字符串;其中的lims如下:lims=[XMINXMAXYMINYMAX]限定了x、y轴上的绘图空间。例:subplot(2,2,1),fplot('humps',[01])subplot(2,2,2),fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[02*pi])subplot(2,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-11-11])subplot(2,2,4),fplot('sin(1./x)',[0.010.1],1e-3)函数ezplot无需数据准备,直接画出函数图形,其基本格式为ezplot(f),其中f是字符串或代表数学函数的符号表达式,只有一个符号变量,可以是x,缺省情况下x轴的绘图区域为[-2*pi,2*pi],但我们可用ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])来明确给出x的范围,而不使用缺省值[-2*pi,2*pi]。例:y='x^2';ezplot(y)y='sin(x)';ezplot(y,[0,2*pi])2.5.6应用举例例1:画出下面函数形成的立体图。clearx=-2:0.2:2;y=-2:0.2:2;[xx,yy]=meshgrid(x,y);zz=xx.*exp(-xx.^2-yy.^2);surf(xx,yy,zz)例2:已知实验数据如下表所示,试绘图表示。时间数据1数据2数据3112.519.8710.11213.5420.548.14315.6032.2114.17415.9240.5010.14520.6448.3140.50624.5364.5139.45730.2472.3260.11850.0085.9870.13936.3489.7740.90cleart=1:9;d1=[12.5113.5415.6015.9220.6424.5330.2450.0036.34];d2=[9.8720.5432.2140.5048.3164.5172.3285.9889.77];d3=[10.118.1414.1710.1440.5039.4560.1170.1340.90];plot(t,d1,'r.-',t,d2,'gx:',t,d3,'m*-');title('time&data');xlabel('time');ylabel('data');axis([0100100]);text(6.5,25.5,'\leftarrowdata1');text(3,43.8,'data2\rightarrow');text(4.8,30.5,'\leftarrowdata3');2.5.7习题习题1:已知向量[1,2,4,0,5,10,11,21,3,1],请绘图表示。习题2:绘制单位圆提示:使用axis(‘square’)命令保证图形的纵横坐标刻度比例相同。习题3:设R分别为1,5,10和20,试绘制伏安特性曲线,U=RI。习题4:绘制的三维立体图。习题5:绘制由函数形成的立体图。习题6:某地区一年中每月的平均气温和平均降雨量如表所示,试画出其图形,要求标注出坐标轴、数据点的位置、数据点大小等。月份温度降雨量10.24.622.33.638.72.1418.52.9524.63.0632.12.7736.82.2837.12.5928.34.31017.83.4116.42.112-3.23.7第6节M文件及程序调试2.6.0简介 计算机编程语言和可编程计算器提供许多功能,它允许你根据决策结构控制命令执行流程。与其它高级语言如C,Fortran相比,MATLAB语言更加简洁,编程效率更高,更加易于移植和维护。MATLAB提供了两种源程序格式:命令文件和函数文件。这两种具有相同的扩展名,均为“.m”又称M文件。2.6.1命令文件命令文件类似于DOS下的批处理文件,它的执行方式很简单,用户只需在MATLAB的提示符下键入该文件的文件名,这样MATLAB就会自动执行该命令文件中的各条语句。命令文件能对MATLAB空间中的数据进行处理,文件中所有语句的执行结果也完全返回到工作中。命令文件格式适用于用户做的需要立即得到结果的小规模运算。需介绍一下MATLAB调试器的使用方法。MATLABEditor/Debugger命令文件的创建与执行(1)在FILE菜单下点击NEW生成一个新的M文件;(2)点击OPEN打开已存在的M文件;(3)点击FILE菜单中的Save将编辑好的M文件保存;(4)在命令窗口中直接输入待执行文件的文件名或点击FILE菜单中的RunM-file执行已编辑好的M文件。例:显示条形图的程序Y=[512;837;968;555;423];bar(Y,'stack');gridonset(gca,'Layer','top')2.6.2函数文件函数文件是另一种格式的M文件,它是Matlab程序设计的主流。一般情况下,使用函数文件格式编程。新建、打开、保存与命令文件相同,在执行时需要传递参数;函数文件的第一行书写格式为:

function变量名=函数名(输入变量名和符号表达式)例:计算单变量代数式对给定自变量的值。

利用命令输入:

s=‘3*x+2’;y=subs(s,‘x’,2);vpa(y)

程序编写:functiony=num(s,x,a)ab=subs(s,x,a);y=vpa(ab);从上面的分析过程中,可以知道编制M函数必须遵循一定的原则,其基本格式如下:

function[返回变量列表]=函数名(输入变量列表)注释说明语句段,由%引导输入、返回变量格式的检测函数体语句例:已知两个实数a,b和一个正整数n,给出k=1,2…n时的所有(a+b)n和(a-b)n。(1)建立函数文件mypower.mFunction[x,y]=mypower(a,b,n)%mypower.m计算(a+b)n和(a-b)nx=(a+b)^n;y=(a-b)^n;(2)建立调用上述函数文件的命令文件abc.mfunction[x,y]=abca=input(‘Pleaseinputa=’);b=input(‘Pleaseinputb=’);x=zeros(1,10);%1*10的矩阵y=zeros(1,10);%1*10的矩阵fork=1:10[x(k),y(k)]=mypower(a,b,k);endx,y运行:abc

分析(1)上例中,命令文件abc对函数mypower每做一次调用,就传入三个参数,送出两个结果x和y。(2)返回变量如果多于1个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论