第1章基础准备及入门1.1最简单的计算器使用法为易于学习,本节以算例方式叙述,并通过算例归纳一些MATLAB最基本的规则和语法结构。建议读者,在深入学习之前,先读一读本节。【例1.3-1】求[122(74)]3的算术运算结果。本例演示:最初步的指令输入形式和必需的操作步骤。(1)用键盘在MATLAB指令窗中输入以下内容(12+2*(7-4))/3^2(2)在上述表达式输入完成后,按[Enter]键,该指令被执行,并显示如下结果。ans=2〖说明〗本例在指令窗中实际运行的情况参见图1.3-1。指令行“头首”的“”是“指令输入提示符”,它是自动生成的。本书在此后的输入指令前将不再带提示符“”。理由是:(A)为使本书简洁;(B)本书用MATLAB的M-book写成,而在M-book中运行的指令前是没有提示符的。52MATLAB的运算符(如+、-等)都是各种计算程序中常见的习惯符号。一条指令输入结束后,必须按[Enter]键,那指令才被执行。由于本例输入指令是“不含赋值号的表达式”,所以计算结果被赋给MATLAB的一个默认变量“ans”。它是英文“answer”的缩写。【例1.3-2】“续行输入”法。本例演示:或由于指令太长,或出于某种需要,输入指令行必须多行书写时,该如何处理。S=1-1/2+1/3-1/4+...1/5-1/6+1/7-1/8S=0.6345〖说明〗MATLAB用3个或3个以上的连续黑点表示“续行”,即表示下一行是上一行的继续。本例指令中包含“赋值号”,因此表达式的计算结果被赋给了变量S。指令执行后,变量S被保存在MATLAB的工作空间(Workspace)中,以备后用。如果用户不用clear指令清除它,或对它重新赋值,那么该变量会一直保存在工作空间中,直到本MATLAB指令窗被关闭为止。1.3.3数值、变量和表达式前节算例只是表演了“计算器”功能,那仅是MATLAB全部功能中小小一角。为深入学习MATLAB,有必要系统介绍一些基本规定。本节先介绍关于变量的若干规定。一数值的记述MATLAB的数值采用习惯的十进制表示,可以带小数点或负号。以下记述都合法。3-990.0019.4561.3e-34.5e33在采用IEEE浮点算法的计算机上,数值通常采用“占用64位内存的双精度”表示。其相对精度是eps(MATLAB的一个预定义变量),大约保持有效数字16位。数值范围大致从10到10。二变量命名规则变量名、函数名是对字母大小写敏感的。如变量myvar和MyVar表示两个不同的变量。sin是MATLAB定义的正弦函数名,但SIN,Sin等都不是。变量名的第一个字符必须是英文字母,最多可包含63个字符(英文、数字和下连符)。如myvar201是合法的变量名。变量名中不得包含空格、标点、运算符,但可以包含下连符。如变量名my_var_201是合法的,且读起来更方便。而my,var201由于逗号的分隔,表示的就不是一个变量名。6308308三在MATLAB默认的预定义变量MATLAB中有一些所谓的预定义变量(PredefinedVariable),见表1.3-1。每当MATLAB启动,这些变量就被产生。这些变量都有特殊含义和用途。建议:用户在编写指令和程序时,应尽可能不对表1.3-1所列预定义变量名重新赋值,以免产生混淆。表1.3-1MATLAB中最常用的预定义变量预定义变量ansepsInf或infi或jpi含义计算结果的默认变量名机器零阈值无穷大,如1/0虚单元ij1圆周率预定义变量NaN或nannarginnargoutrealmaxrealmin含义不是一个数(NotaNumber),如0/0,/函数输入宗量数目函数输出宗量数目最大正实数最小正实数〖说明〗假如用户对表中任何一个预定义变量中进行赋值,则那个变量的默认值将被用户新赋的值“临时”覆盖。所谓“临时”是指:假如使用clear指令清除MATLAB内存中的变量,或MATLAB指令窗被关闭后重新启动,那么所有的预定义变量将被重置为默认值,不管这些预定义变量曾被用户赋过什么值。在遵循IEEE算法规则的机器上,被0除是允许的。它不会导致程序执行的中断,只是在给出警告信息的同时,用一个特殊名称(如Inf,NaN)记述。这个特殊名称将在以后的计算中以合理的形式发挥作用。【例1.3-3】运用以下指令,以便初步了解预定义变量。本例演示:预定义变量已经存在的事实;若干预定义变量的数量级概念。formatlongrealmaxans=1.797693134862316e+308realminans=2.225073858507201e-308epsans=2.220446049250313e-016pians=3.141592653589797四运算符和表达式(1)经典教科书上的算术运算符在MATLAB中的表达方式,见表1.3-2。表1.3-2MATLAB表达式的基本运算符〖说明〗因为MATLAB面向复数设计,其所有运算定义在复数域上。所以对于方根问题,运算只返还一个“主解”。要得复数的全部方根,必须专门编写程序(见例1.3-6)。因为MATLAB面向矩阵/数组设计,标量被看作(11)的矩阵/数组。数组运算的“乘、除、幂”规则与相应矩阵运算根本不同。前者的算符比后者多一个“小黑点”。(参见例1.3-9,例1.3-10。更详细说明请看第3章)MATLAB用左斜杠或右斜杠分别表示“左除”或“右除”运算。对标量而言,“左除”和“右除”的作用结果相同。但对矩阵来说,“左除”和“右除”将产生不同的结果。(2)MATLAB书写表达式的规则与“手写算式”几乎完全相同。表达式由变量名、运算符和函数名组成。表达式将按与常规相同的优先级自左至右执行运算。优先级的规定是:指数运算级别最高,乘除运算次之,加减运算级别最低。括号可以改变运算的次序。书写表达式时,赋值符“=”和运算符两侧允许有空格,以增加可读性。五面向复数设计的运算——MATLAB特点之一MATLAB的所有运算都是定义在复数域上的。这样设计的好处是:在进行运算时,不必像其他程序语言那样把实部、虚部分开处理。为描述复数,虚数单位用预定义变量i或j表示。复数zabire直角坐标表示和极坐标表示之间转换的MATLAB指令如下。real(z)给出复数z的实部arcos。imag(z)给出复数z的虚部brsin。abs(z)给出复数z的模ab。a8数学表达式矩阵运算符数组运算符加aba+ba+b减aba-ba-b乘aba*ba.*b除aba/b或b\aa./b或b.\a幂aba^ba.^b圆括号()()()i22bangle(z)以弧度为单位给出复数z的幅角arctan。【例1.3-4】复数z134i,z212i,z32e6i表达,及计算zz1zz32。本例演示:正确的复数输入法;涉及复数表示方式的基本指令。(1)经典教科书的直角坐标表示法z1=4+3i%合法,但建议少用或不用z1=4.0000+3.0000i〖说明〗本书建议读者不要使用这种输入格式。因为这种书写格式,只适用于“数值标量”复数,而不适用于“数值矩阵”。在这种书写格式中,4i是一个完整的虚数,在4和i之间不许“空格”存在。(2)采用运算符构成的直角坐标表示法和极坐标表示法z2=1+2*i%运算符构成的直角坐标表示法z3=2*exp(i*pi/6)%运算符构成的极坐标表示法z=z1*z2/z3z2=1.0000+2.0000iz3=1.7321+1.0000iz=1.8840+5.2631i(3)复数的实虚部、模和幅角计算real_z=real(z)image_z=imag(z)magnitude_z=abs(z)angle_z_radian=angle(z)angle_z_degree=angle(z)*180/pireal_z=1.8840image_z=5.2631magnitude_z=5.5902angle_z_radian=1.2271angle_z_degree=70.3048%弧度单位%度数单位【例1.3-5】图示复数z143i,z212i的和(配图1.3-2)。本例演示:MATLAB的运9算在复数域上进行;指令后“分号”的作用;复数加法的几何意义;展示MATLAB的可视化能力(让读者感受,但不要求理解)。z1=4+3*i;z2=1+2*i;%在一个物理行中,允许输入多条指令。%但各指令间要用“分号”或“逗号”分开。%指令后采用“分号”,使运算结果不显示。z12=z1+z2%以下用于绘图clf,holdon%clf清空图形窗。逗号用来分隔两个指令。plot([0,z1,z12],'-b','LineWidth',3)plot([0,z12],'-r','LineWidth',3)plot([z1,z12],'ob','MarkerSize',8)holdoff,gridon,axisequalaxis([0,6,0,6])text(3.5,2.3,'z1')text(5,4.5,'z2')text(2.5,3.5,'z12')xlabel('real')ylabel('image')shgz12=5.0000+5.0000i图1.3-2两个复数相加【例1.3-6】用MATLAB计算38能得到–2吗(配图1.3-3)?本例演示:MATLAB运10算定义在复数域的实质;指令后“分号”抑制运算结果的显示;MATLAB的方根运算规则;更复杂指令的表示方式;展现MATLAB的图形表现力。(对于本例指令,读者能有体验就可,不必强求理解。)(1)直接计算时,得到处于第一象限的方根。a=-8;r_a=a^(1/3)%求3次根r_a=1.0000+1.7321i(2)38的全部方根计算如下3%先构造一个多项式p(r)rap=[1,0,0,-a];%p是多项式p(r)的系数向量%指令末尾的“英文状态分号”使该指令运行后,不显示结果。R=roots(p)%求多项式的根R=-2.00001.0000+1.7321i1.0000-1.7321i(3)图形表示MR=abs(R(1));t=0:pi/20:2*pi;x=MR*sin(t);y=MR*cos(t);%计算复根的模%产生参变量在0到2*pi间的一组采样点plot(x,y,'b:'),gridonholdon%画一个半径为R的圆%注意“英文状态逗号”在不同位置的作用plot(R(2),'.','MarkerSize',30,'Color','r')%画第一象限的方根plot(R([1,3]),'o','MarkerSize',15,'Color','b')%画另两个方根axis([-3,3,-3,3]),axissquare%保证屏幕显示呈真圆holdoff11〖说明〗图1.3-3(-8)的全部三次方根分布本例有助于理解MATLAB的计算特点。对复数进行方根运算时,MATLAB只给出处于“第一象限”的那个根。六面向数组设计的运算——MATLAB特点之二在MATLAB中,标量数据被看作(11)的数组(Array)数据。所有的数据都被存放在适当大小的数组中。为加快计算速度(运算的向量化处理),MATLAB对以数组形式存储的数据设计了两种基本运算:一种是所谓的数组运算;另一种是所谓的矩阵运算。在此仅以算例展示MATLAB的计算特点,更详细的叙述请见第3章。24常用输入法;二维数组输入的三大要素。(1)在键盘上输入下列内容AR=[1,3;2,4](2)按[Enter]键,指令被执行。(3)在指令执行后,MATLAB指令窗中将显示以下结果:AR=1324〖说明〗在MATLAB中,不必事先对数组维数及大小做任何说明,内存将自动配置。二维数组输入的三大要素:数组标识符“[]”;元素分隔符空格或逗号“,”;数组行间分隔符分号“;”或“回车键”。注意:所有标点符号都是“