MATLAB编程.doc_第1页
MATLAB编程.doc_第2页
MATLAB编程.doc_第3页
MATLAB编程.doc_第4页
MATLAB编程.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第1章 入门MATLAB的灵活性和平台独立性是通过将MATLAB代码编译成设备独立的P代码,然后在运行时解释P代码来实现的。但MATLAB是解释型语言不是编译型语言,产生的程序执行速度慢。MATLAB有两个基本的缺点:1. 是解释型语言,其执行速度要比编译型语言慢得多。这个问题可以通过合理的MATLAB结构得到缓解,也可以在发行广泛使用前编译出MATLAB程序2. 费用高MATLAB的开发环境任何一个MATLAB程序的基本组成单元是数组。数组是一组数据值得集合,这些数据被遍上行号和列号,拥有唯一的名称。数组中的单个数据是可以通过带有小括号的数组名访问的,括号内有这个数据的行标和列标,中间用逗号隔开。标量也被MATLAB当作数组,只不过只有一行和一列。如果一个语句在一行内书写太长了,可能要另起一行接着写,这种情况需要在第一行末打上半个省略号(),再开始第二行的书写。历史命令窗口(The history command window)顺序是按逆序排列的,双击这些命令可以再次执行。启动平台(The launch pad)是一个特殊工具,为MATLAB和其工具箱提供帮助、demo、其他相关文件和应用程序等参考资料。编辑调试器,一般用于创造M文件或者修改已存在的M文件,当打开或修改一个M文件编辑调试器会被自动调用。M文件中的评论用绿色表示,变量和数字用黑色来表示,字符变量用紫色表示,语言的关键字用蓝色表示。当一个专门的命令、M文件或函数运行时,工作区是MATLAB所需要的所有变量和数组的集合。所有在命令窗口中执行的命令和所有在命令窗口执行的脚本文件(Script files)都会被分配一个普通的分配空间,所以它们能共享变量。MATLAB函数拥有独立的工作区,这是函数区别于脚本文件的一个重要特征。Who命令会产生一个在当前工作区内的所有变量和数组状况表一些重要命令Clc、clf、clear!的特殊作用是给计算机操作系统发送一个命令。在!后的字符会发送给计算机并且执行,和在计算机的命令行提示符中输入字符是一样的。这种特性使系统命令更容易植入MATLAB程序中。Diary命令记录在MATLAB中运行过程中每个线程所做的事。命令格式为:diary filename,当这个命令被执行后,所有在命令窗口中的输入和输出将会被记录在diary文件中。这是一个非常重要的工具,当MATLAB发生错误而中断时,利用它可以重建重要的事。Diary off命令终止写入diary文件,diary on命令重新开始写入。MATLAB搜索路径。在MATLAB提示符后输入一个名字,那么MATLAB在解释器将按以下顺序寻找这个名字:先查看是否是个变量名,如果是一个变量,MATLAB将会显示出这个变量的值;然后查看是否是内建函数或命令。如果是,则执行对应的函数或命令;查看是不是在当前目录下的一个M文件,如果是,则执行对应的函数或命令;查看是不是在MATLAB搜索路径的所有目录下的一个M文件。如果是,则执行对应的函数或命令;注意:如果首先检测到的是变量名,且这个变量名与MATLAB的某一个函数或命令同名,那么这个函数或命令将变得无法访问。常见错误1. 如果变量与MATLAB中的函数或命令重名,那么这个函数或命令将不能被访问;2. 如果有多个函数或命令重名,那么MATLAB将会执行在搜索路径中找到的第一个,其他的将不会被执行。3. Which命令能帮助我们找到正在执行的文件版本和它的路径。在检查文件名冲突方面非常有用。我们可以在启动平台中的路径工具随时检查和修改这个路径。小结1. 编辑/调试器经常用于创建和修改M文件。它用于显示M文件内容,内容用不同颜色显示出来。2. MATLAB用户可以通过帮助空间窗口、help命令和lookfor命令三种方式得到帮助。帮助空间窗口可以帮助用户访问所有MATLAB文件设置。而help命令是一个在命令窗口内显示帮助的方法,但需要知道所需帮助的函数名。只要MATLAB函数评论的第一评论句中的单词与搜索词相对应,那么用lookfor命令就可找到,并显示出来。3. 当用户在命令窗口键入一个命令,MATLAB按照MATLAB路径特殊编排而成的目录搜索这个命令。当MATLAB执行了路径中第一个与之对应的M文件,其他拥有相同名字的M文件将会被忽略。4. 路径工具允许使用者添加、删除路径和改变在目录中的顺序。第二章 MATLAB基础1.变量和数组MATLAB程序的基本数据单元是数组。一个数组是以行和列组织起来的数据集合,并且拥有一个数组名。数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据对应行标和列标。标量在MATLAB中也被当作数组来处理-被看作只有一行一列的数组。数组可以定义为向量或矩阵。向量一般来描述一维数组,而矩阵往往来描述二维或多维数组。数组的大小(size)由数组的行数和列数共同决定,行数在前。一个数组所包含数据的多少可由行数乘列数得到。数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据的行标和列标。如果数组是一个行向量或列向量,则只需要一个下标。一个MATLAB变量是一段包含一个数组的内存区,并且拥有一个用户指定的变量名。通过适当的命令和它的变量名随时可以调用和修改它。MATLAB的变量名必须以字母开头,后面可以跟字母、数字、下划线。只有前31个字符是有效的;如果超过了31个字符,其余的将被忽略。如果声明两个变量,两个变量只有第32个字符不同,则被当做同一个变量处理。当编写程序时给变量起一个有意义的名字非常重要,有意义的名字极大提高了程序的可读性和可维护性,可以用下划线(_)代替空格。在编写程序的开头列出一个数据字典(data dictionary)十分重要,数据字典列举了在程序中用到的所有变量的定义。它的定义应包括本条目的所要描述的内容和它在执行时所在的单元。在MATLAB语言中是区分字母大小的,大写字母和小写字母代表不同的东西。在每次用到一个变量时,要确保变量名的大小写的精确匹配。两个最常见的变量类型是char型和double型。Double型的变量包括由64位双精浮点构成的标量或数组,这种变量可以代表实数、虚数和复数。每个值的实部和虚部的变化范围为正负10308,拥有15到16位有效数字。无论何时,你将一个数值赋值于一个变量名,那么MATLAB将自动建立一个double型变量;char型的变量包括由16位数值构成的标量或数组,每一个16位数代表一个字符。这个类型经常用于字符串操作,当一个字符或字符串赋值于一个变量名时,系统会自动建立一个char型变量。像c语言这样的语言中,变量类型和变量在使用前必须强制声明,这种语言我们叫强类型语言。相对的MATLAB这样的叫弱类型语言,通过简单的赋值形式就可以创建变量,变量类型取决于创建时的类型。2. MATLAB变量的初始化当变量初始化时,MATLAB将会自动建立变量,有三种方式初始化MATLAB中的变量:A. 用赋值语句初始化边量B. 用input函数从键盘输入初始化边量C. 从文件读取一个数据最简单的创建和初始化一个变量的方法是用赋值语句赋予变量一个或多个值。赋值语句的一般形式为:var = expression。var是变量名,expression可以是一个标量、一个数组或常量、其他变量和数学运算符号的联合。这个表达式的值是通过一般的数学运算法则计算出来的,然后将产生的结果存储到变量var中。如果在赋值语句执行时变量已经存在,那么这个变量原有的值将被覆盖。数据数组也可以初始化变量,我们可以用和分号建立数组,所有元素按行阶排序,即每一行的值从左向右,顶部的行置于最前,底部的行置于最后。在一行内单个数值可用空格或逗号隔开,而行与行之间则用分号隔开或另起一行书写。每一行每一列的元素个数必须相同。用于初始化数组的表达式可以包括代数符号或事先已经定义好的数组。当我们创建一个数组时,不是每一个元素都必须定义。如果要定义一个特殊的数组或只有一个或几个元素没有定义,那么前面的那些元素将会自动创建,并初始化为0。例如:如果数组c事先没有定义,语句c(2,3)=5将会创建一个矩阵c=0 0 0;0 0 5.相似的,指定一个赋值予一个存在的数组,但超过了这个数组的大小。例如,假设存在一数组d=1 2,这个语句d(4)=4将会制造出数组d=1 2 0 4;每个赋值语句末的分号有特殊的目的:无论在何时一个表达式在赋值语句中被赋值,分号将会中止变量值的重复。如果句末没有分号,变量将会自动显示在命令窗口中。如果在赋值语句末有分号,这种重复将会消失,重复虽可以起到检查工作的作用但降低了运行的速度,由于这个原因,在一般情况下总是禁止重复。用捷径表达式(short expression)来赋值MATLAB提供一种专门的捷径标记法,这种方法用克隆运算符(Colon operator)适用于一些情况。一般顺序为:first:incr:last。Frist代表数组的每一个值,incr代表步增量,last代表这个数组的最后一个值。如果步增量为1则可以省略。捷径表达式(short expression)可以联合调换运算符()来初始化行向量或更加复杂的矩阵。调换运算符可以在需要的情况下完成行和列的转换。用内置函数来初始化数组也可以用MATLAB内置函数初始化。例如:zeros可以初始化任何大小的全为0的数组。如果这个函数的参数只是一个标量,那么MATLAB将会创建一个方阵,行数和列数均为这个参数。如果这个函数有两个标量参数,那么第一个参数代表行数,第二个参数代表列数。因为size函数所返回的是一个数组的行数和列数,所以可以联合zeros函数来创建一个相同大小的零矩阵。Zeros(n)创建一个n*n的零矩阵;zeros(n,m)创建一个n*m的零矩阵;zeros(size(arr)创建一个与数组arr相同的零矩阵;ones(n)创建一个n*n元素全为1的矩阵;ones(n,m)创建一个n*m的元素为1的矩阵;eye(n)创建一个n*n的单位矩阵;eye(n,m)创建一个n*m的单位矩阵;length(arr)返回一个向量的长度或二维数组中最长的维的长度;size(arr)返回指定数组的行数和列数。用关键字input初始化变量关键字input用来提示使用者和直接从键盘输入初始化变量。当脚本文件(script files)时,可以用来提示使用者输入。Input函数在命令窗口显示出提示语句并等待用户返回一个值。如果input函数中有字符s为它的第二个参数,那输入的数据被当字符串。3. 多维数组多维数组在内存中的存储一个有m行和n列的二维数组包括m*n个元素,这些元素在计算机的内存中将会占有m*n个连续的内存空间。MATLAB以列主导顺序分配数组中的元素。也就是说,内存先分配第一列的元素,然后第二列,第三列。依次类推,直到所有列都被分配完。用单个下标访问多标数组MATLAB的特性之一就是它允许使用者把一个多维数看作一个一维数组,这个一维数组的长度等于多维数组的元素数。如果用一个下标访问一个多维数组,那么元素的排列顺序就是内存的分配顺序。4. 子数组在数组名后面加括号,括号里面是所有要选择的元素的下标,这样就能选择这个函数的子集了。对于一个二维数组,克隆运算符可以用下标来选择子数组。克隆运算符(:)例a = 1 2 3;4 5 6;7 8 9matlab默认存数据是按列存,即a矩阵实际存储时为1 4 7 2 5 8 3 6 9,因此 a(1:2)表示第一个数据到第二个数据, a(1:2:3)表示第一个数据隔两个数据,所以为1 7,a(1:3)表示第一个到第三个数据,所以为1 4 7,a(1:2,2)表示第一行到第二行中的第二列,因此为2 5.End函数MATLAB中有一个特殊的函数叫end函数,对于创建子数组的下标非常有用。当用到一个函数的下标时,end函数将会返回下标的最大值。End函数返回的值一般为所要下标的最大值。如果end函数显示有不同的下标,那它将在一个表达式内返回不同的值。子数组在左边的赋值语句的使用只要数组的形(行数和列数)和子数组的形相匹配,把子数组放于赋值语句的左边用来更新数组中的值。如果行不匹配将会有错误产生。对于涉及子数组的赋值语句,等号两边的形式必须相匹配,否则会产生错误。例子参见2.22练习在MATLAB中用子数组赋值和用值直接赋值有很大的不同。如果用子数组赋值,那么只有相应的值得到更新,而其他值保持不变;直接赋值则数组的原有内容全部删除并被新的值替代。用一标量来给子数组赋值位于赋值语句的右边的标量值总是能匹配左边数组的形。这个标量将会被复制到左边语句中所对应的元素。5. 特殊变量在MATLAB中有许多预先定义好的特殊变量,这些特殊变量可以随时使用不用初始化。这些预定义值存储在一般的变量中,所以它们可以被覆盖或改写。如果一个新值赋值于其中一个预定义变量,那么以后的计算中新值将会代替默认值。Pi有15个有效值得;i,j代表虚数i;inf无穷大,一般情况下是除以0产生的;NaN代表没有这个数,一般由数学运算得到,例如0除以0;clock这个特殊变量包含了当前的年,月,日,时,分,秒,是一个6元素的行向量;date包含当前的日期,用的是字符形式;eps变量名epsilon的简写,代表计算机辨别的两数之间的最小数;ans常用于存储表达式的结果,如果这个结果没有明确的赋值于某个变量。6. 显示输出数据在MATLAB中有许多方法显示输出数据。最简单的方法是去掉末尾的分号,它将显示在命令窗口。改变默认格式当数据重复在命令窗口,整形数以整形形式显示,其他值将以默认格式显示。MATLAB的默认格式是精确到小数点后四位。如果一个数太大或太小,那么将会以科学计数法的形式显示。改变默认输出格式要用到format命令。Format short保留小数点后四位(默认格式);format long保留小数点后14位;format short e带有5位有效数字科学记数法;format short g总共5个数字,可以用科学记数法也可以不用;format long e带有15位有效数字科学记数法;format long g总共15个数字可以科学记数也可以不用;format bank美元格式;format hex用16进制表示;format rat两个小整数的比;format compact隐藏多余的换行符;format loose使用多余的换行符;format +显示这个数的正负;disp 函数另一种显示数据的方法是用disp函数。Disp需要一个数组参数,它将它的值显示在命令窗口中。如果这个数组是字符型,那么包含在这个数组中的字符串将会打印在命令窗口中。此函数可以联合num2str(将一个数转化为字符串)和int2str(将一个整形数转化为字符串)来产生新的信息,显示在命令窗口中。用fprintf函数格式化输出数据用fprintf函数显示数据是一种十分简便的方法。Fprintf函数显示带有相关文本的一个或多个值,允许程序员控制显示数据的方式。一般格式为:fprintf(format,date)其中format用于代表一个描述打印数据方式的字符串,date代表要打印的一个或多个标量或数组。Format包括两方面的内容,一方面是打印内容的文本提示;另一方面是打印的格式。例如(the value of pi is%6.2fn,pi)转义序列%6.2代表在本函数中的第一个数据项将占有6个字符宽度,小数点后有两位小数。Fprintf函数有一个重大的局限性,只能显示复数的实部。当我们的计算结果是复数时,这个局限性将会显示错误,在这种情况下应该使用disp.%d把值作为整数来处理;%e用科学记数法来显示数据;%f用于格式化浮点数,并显示这个数;%g用科学记数的格式或浮点数格式,根据那个短并显示;n转到新的一行。7. 数据文件Save命令用于保存当前MATLAB工作区内的数据到一个硬盘文件。这个命令的基本形式为:save filename var1 var2 var3.filename代表你要保存变量的那个文件夹var1 var2等是要保存的变量。在默认情况下,这个文件的扩展名是mat,称之为mat文件。如果在filename后面无变量,则工作区的所有内容将会被保存。MATLAB用一种特殊的复杂形式来存储数据,包括了许多的细节,例如变量名和变量类型,数组的大小,以及所有变量值。一个在任何一个平台上创建的mat文件(pc,mac,unix)在另一个平台上都可以应用。它的缺点是mat文件的存储格式不能被其他程序读取。如果一个数据必须由其他程序所读取,那么必须转化为ASCII码,并将这些数值写到一个以ASCII码为编码的文件中。但是当以ASCII的形式存储,像变量名和变量类型这样的信息就会丢失,产生的数据结果将会更大。用ASCII格式定的数据能被其他语言编写的程序或扩展页读取,所以它能帮MATLAB程序与其它程序之间共享数据。如果数据需要在MATLAB和其他程序之间交换使用,那么以ASCII格式存储数据。如果只在MATLAB中使用那么应以mat文件的形式存储数据。MATLAB并不关心ASCII码的扩展名,但最好用它的传统扩展名dat.以dat的扩展名保存ASCII数据文件以区别以mat为扩展名的mat文件。Load命令与save命令相反。它从硬盘文件加载数据到MATLAB当前工作区。基本格式为:load filename。Filename代表所加载文件的文件名。如果这个文件是mat文件,那么所有被子加载的变量的变量名的变量类型和原来一样。如果一个变量包含在工作区间窗口,那么这些数据将会被修复。MATLAB能够加载有其他程序创建的ascii格式的数据文件。他首先检查所要加载的文件是mat还是ascii文件。如果在load语句中加入-ascii,则强制MATLAB把这个文件看做ASCII文件,这个文件的内容将会被转化成一个MATLAB数组,这个数组名就是所要加载的文件。8. 标量运算和数组运算在MATLAB赋值语句中的计算,一般形式为:variable_name = expression;赋值语句计算出等号右边表达式的值,然后赋予等号左边的变量名。标量运算符位于赋值号右边的表达式,可以包含标量、数组、括号和数学符号的任一个有效联合运算。当我们需要时,可以用括号来控制运算顺序,括号内的表达式优先于括号外的表达式来计算。数组运算和矩阵运算MATLAB在数组运算中提供了两种不同类型的运算,数组(array operations)和矩阵(matrix)运算。数组运算是一种用于元素对元素的运算,这个运算是针对两数组相对应的运算使用的,两数组的行与列必须相同,否则产生错误;数组运算可以用于数组与标量的运算,当一个数组和一个标量进行运算时,标量将会和数组中的每一个元素进行运算。而矩阵运算则遵循线性代数的一般规则。a*b,a的列数必须等于b的行数。在MATLAB中用一个特殊的符号来区分矩阵和数组运算,在需要区分两者不同的时候,把点至于符号前来表示这是一个数组运算。运算MATLAB 形式注释数组加法A+B 数组加法和矩阵加法相同数组减法A-B 数组减法和矩阵减法相同数组乘法A.*B A和B的元素逐个对应相乘.两数组之间必须有相同的形,或其中一个是标量.矩阵乘法A*B A和B的矩阵乘法.A的列数必须和B的行数相同.数组右除法A./B A和B的元素逐个对应相除:A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量.数组左除法A.B A 和B 的元素逐个对应相除:B(i,j)/A(i,j) 两数组之间必须有相同的形,或其中一个是标量.矩阵右除法A/B 矩阵除法,等价于A*inv(B),Inv(B)是B 的逆阵矩阵左除法AB 矩阵除法,等价于inv(B) *AInv(A)是A 的逆阵数组指数运算A.B AB 中的元素逐个进行如下运算A(i,j)B(i,j), A(i,j)/B(i,j) 两数组之间必须有相同的形,或其中一个是标量.矩阵的左除具有十分重要的意义,因为左除运算AB等价于inv(A)*B,是解线性方程的好方法。可以写为结果为9. 运算的优先级优先级 运算 1 括号里的内容先运算,从最里面的括号去运算 2 幂运算,从左向右 3 乘除法,从左向右 4 加减法,从左向右运算顺序对一个代数表达式的最终值产生十分大的影响,在需要时用括号使表达式更加清晰和易于理解。在一个表达式中括号必须平衡。10. MATLAB的内建函数选择性结果与数学的函数不同,MATLAB函数返回一个或多个值给调用函数。Max函数就是这样的一个例子,这个函数一般情况下返回输入向量中的最大值,但是他返回的第二个参数是输入向量中的最大值在向量中的位置。带数组输入的MATLAB函数的应用许多MATLAB函数定义了一个或多个标量输入,产生一个输出。常见的MATLAB函数与大多数的计算语言不同,许多MATLAB函数能够正确计算出复数结果。MATLAB自动计算出的结果可能是复数和虚数。Abs(x)计算绝对值;acos(x)计算反余弦;angle(x)计算复数x的幅角;asin(x)反正弦;atan(x)反正切;atan2(y,x)求y/x(弧度表示)的反正值;value,index = max(x)返回x的最大值和他所处的位置;mod(x,y)余数;sqrt(x)x的平方根;rounding(取整)函数:ceil(x):大于x的最小整数,ceil(3.12 -3.12),ans=4 -3;fix(x):截尾取整,fix(3.12 -3.12),ans=3 -3;floor(x):不超过x的最大整数(高斯取整及x),fix(3.12 -3.12),ans=3 -4;round(x):四舍五入取整round(3.12 -3,12),ans=3 -3。总结:fix朝零方向取整,floor朝负无穷方向取整,ceil朝正无穷方向取整,round四舍五入到最近的整数;char(x)将矩阵中的数字转化为字符,矩阵中的元素不大于12个;double(x)将字符串转化为矩阵;int2str(x)将整数x转化为字符串形式;num2str(x)将带小数点的数转化为一个字符型数组;str2num(x)将字符串转化为数;11. 画图入门给图增加标题和坐标轴贴标签会用到title、xlabel、ylabel函数。调用每个函数时将会有一个字符串,这个字符串包含了图像标题和坐标轴标签的信息。用grid命令可以使网格线出现或消失在图像中,grid on代表出现网格线grid off相反。联合作图线的颜色、形式,符号的形式MATLAB允许程序员选择轨迹的颜色、轨迹的形式和符号的类型。在x,y向量参数后带有这些属性字符串的plot函数可以选择这些细节。这些属性包含三个方面:第一个指定轨迹的颜色;第二个指定符号的类型;第三个指定线的类型。这些属性字符可以任意的混合使用。如果有多个函数每个函数都有他自己的属性字符串。我们可以用legend来制作图例。一般形式为:legend(string1,string2,,pos)Legend off命令能去除多余的图例对数尺度打印数据既可以用对数尺度,也可以用线性尺度。在x,y轴上使用这两种尺度的一种或两种可以组合成4种不同的坐标系。每种组合都有一个特定的函数。Plot函数的x,y均用线性尺度Semilog函数x轴用对数尺度,y轴线性尺度Semiloge函数x轴用线性尺度,y轴对数尺度Loglog函数两轴都用对数尺度这四个函数在意义上是等价的,只是坐标轴的类型不同。Legendming命令中pos的值0 自动寻找最佳位置,至少不与数据冲突;1 在图像的右上角;2在图像的左上角;3在图像的左下角;4在图像的右下角-1在图像的右边13. 调试MATLAB程序在MATLAB中有三种类型的错误。第一种错误是语法错误。语法错误是MATLAB自身的错误,例如拼写错误和标点错误。当编译m文件时MATLAB编译器将会找出这些错误;第二种类型的错误是一种运行时错误。当一个非法的数学运算出现在程序的过程(例如,除以0),将会出现运行时错误。这些错误将会使程序返回inf或nan,用来参与下一步的运算,导致这个程序的结果变无效;错误的第三种形式是逻辑错误(logical error)。逻辑错误是指编译和运行都能通过,而产生了错误的结果。在编程过程中出现的最普遍的错误是书写错误。一些书写错误可能产生无效的MATLAB语句。这些错误产生的语法错误可能会被编译器发现。另一个书写错误发生在变量名的书写上。例如,变量中的字符可能被调换、漏写或错写。这样就会创建一个新的变量,在MATLAB中很容易创造一个新变量,它不会发现这个错误。书写错误也能导致逻辑错误。例如,变量vel1和vel2都在程序中代表速度,如果一时忽略了其中一个代替了另一个那么只能用人工检查代码找出此类错误。有时候程序开始时能够执行,但是运行时错和逻辑错误可能在执行中发生,这种情况下,可能是输入错误也可能是逻辑结构错误。找出这类错误的第一步是检查程序的输入数据,既可以去掉输入语句后的分号,也可以加入一个多余的输出语句以证明这个输入值是不是想要的。如果已经排除了变量名错误和输入值错误,则要处理的或许是逻辑错误。应该检测是否有逻辑错误,应该检查每一个赋值语句:A. 如果一个赋值语句非常的长,将其分为多个小语句,小语句易证明B. 检查赋值语句中括号的放置。在赋值语句中,由于括号导致运算顺序错误是极其常见的错误。如果对运算顺序仍有疑问,可多加括号是之更加清晰C. 保证每个变量正确的初始化D. 保证函数中用到单位的统一14. 总结一些编程心得:a. 尽可能使用有意义的变量名,一眼就可以看懂b. 给每一个程序创建一个数据字典,以提高程序的可维护性c. 在所有MATLAB赋值语句后加分号,用来禁止赋值的重复。在程序调试期间,如果检验某个语句的值,可以去掉后面的分号d. 变量名一律用小写字母,这样可以不会因为大小写不同而造成变量混淆e. 如果要在MATLAB和其他程序之间交互数据,那么就要以ascii格式存储数据,如果数据只应用在此MATLAB中,应以mat-file格式存储数据f. 以dat为扩展名保存ascii数据以区分mat文件,mat文件的扩展名为matg. 用适当的括号使等式能使表达式清晰,易理解h. 当读取和写入数据时,使用适当的单位特殊符号 数组构造器( ) 用来装载下标 用来限制一个字符串, 分开下标,或分开元素 1.防止在命令窗口的重复 2.分开矩阵的行 3. 在一行内分开几个赋值语句% 标志注释的开始: 克隆运算符+ 数组和矩阵的加法-数组和矩阵的减法.* 数组乘法* 矩阵乘法./ 数组右除法. 数组左除法/ 矩阵右除法 矩阵左除法. 数组幂运算 转义运算符命令和函数 且来表示语句太长,转到第二行写abs(x) 计算x 的绝对值acos(x) 计算x 的反余旋函数angle(x) 计算复数x 的幅角asin(x) 计算x 的反正旋函数值atan(x) 计算x 的反正切函数值atan2(y,x)cos(x) cosxexp(x)log(x)value,index=max(x) 返回x 中的最大值,和他所处的位置value,index=min(x) 返回x 中的最小值,和他所处的位置mod(x,y) 余数,sin(x) sinxsqrt(x) x 的平方根tan(x) tanxrounding(取整)函数ceil(x)fix(x)round(x)字符转换函数char(x) 将矩阵中的数转化为字符,矩阵中的元素就不大于127double(x)将子符串转化为矩阵int2str(x) 将整数x 转化为字符串形式num2str(x) 将带小数点的数转化为一个字符型数组str2num(x) 将字符串转化为数format short 保留小数点后4 位(默认格式)format long 保留小数点后14 位format short e 带有5 位有效数字科学记数法format short g 总共有5 个数字,可以用科学记数法,也可不用format long e 带有15 位有效数字科学记数法format long g 总共有15 个数字,可以用科学记数法,也可不用format bank 美元格式format hex 用16 进制表示format rat两个小整数的比format compact 隐藏多余的换行符format loose 使用多余的换行符format + 只显示这个数的正负Pi 有15 个有效值的i , j 代表虚数i()Inf 这个符号代表无穷大,它一般情况下是除以0 产生的NaN这个符号代表没有这个数。它一般由数学运算得到的。例如,0 除以0。clock 这个特殊变量包含了当前的年,月,日,时,分,秒,是一个6 元素行向量date 包含当前的日期,是用的字符形式eps 变量名是epsilon 的简写。它代表计算能机辨别的两数之间的最小数ans 常用于存储表达式的结果,如果这个结果没有明确的赋值于某个变量char 字符型plot 函数的x ,y 均用线性尺度semilog 函数x 轴用对数尺度,y 轴将用线性尺度Semiloge 函数x 轴用线性尺度,y 轴用对数尺度loglog 函数两坐标轴将会都用对数尺度。第3章 分支语句和编程设计1. 自上而下的编程方法一般步骤:a. 清晰的陈述所要解决的问题b. 定义程序所需的输入量和程序所产生的输出量c. 设计程序得以实现的算法(算法是指为某个问题找到答案一步接一步的程序。编程者开始对问题进行逻辑划分,把问题逐步分解为一个又一个的子工作,这个过程叫做分解【decomposition】,如果一些子工作还是比较大,设计者还可以把它分解成更小的块,这个过程将会继续到问题被分解成许多简单且易理解的小块为止;在问题被分解成小块之后,每一个小块要被进一步求精,这个过程叫逐步求精【stepwise refinement】,在这个过程中,设计者开始于对本小块代码总括性的描述,然后一步一步地定义所需的函数,越来越具体,直到能够转化为MATLAB语句。)d. 把算法转化为代码e. 检测产生的MATLAB程序(程序的每一部分将会被单独的检测,如果有可能整个程序还要被检测一遍。在我们检测程序时我们必须证明所有合法输入数据值都能够正常运行。用标准的输入值检测程序,看它是否产生了值。如果在一个程序中执行的算法包含了不同的分支,必须检测每一个分支,以保证产生正确答案。)注:大程序在交付使用之前必须经过一系列的检测。检测的第一步有时被称为单元检测。在单元检测过程中,程序的子程序将会被独立的检测以证明它的正确性。当单元检测结束之后,这个程序将进行一系列的组合,把独立的子程序联合产生出最后的程序。程序第一步的联合通常只包括很少的子程序。通过组合这些子程序,经常检查子程序或函数之间的联系,在一系列的组合过程中,越来越多地子程序被加了进来,直到整个程序的完成。在每一次的组合过程中,每一个错误都会被发现并在进行下一次组合之前纠正;在整个程序被组合后,调试继续进行。程序第一个版本我们通常称之为Alpha版本。在经过一系列的内部应用之后,当许许多多的大错误从程序中除去,一个新版本出现我们称之为Beta版,beta版本就要公开的发行给天天需要这个程序工作的人。这些用户使这个程序在不同的环境下,在不同的输入条件下工作,会发现许多错误,并报告给程序员,当这些错误被更正后,这个程序就可以正式发布了。2. 伪代码的应用用于描述算法的标准形式叫构造(constructs有时也称structure),用这些结构描述出的算法,我们称之为结构化算法。当在MATLAB程序中执行这个算法时,产生的程序叫结构化程序。我们可以用伪代码的形式建立算法的结构。伪代码是MATLAB和英语的混合体。和MATLAB一样,它是结构化的,一行表示一个明确的意思或代码的片段,但每一行的描述用的是英语或其他人类语言。伪代码的每一行都应用普通简单且易于理解的的英语或中文描述。因为修改简单灵活,所以伪代码在开发算法的过程中非常有用。因为伪代码给在相同的编辑器或字处理器(通常用于编写MATLAB程序的)而不需要其它的可视化功能。3. 关系运算符和逻辑运算符选择结构的运算由一个表达式控制的,这个表达式的结果只有true(1)和false(0)。有两种形式的运算符可以在MATLAB中关系结果true、false:关系运算符和逻辑运算符。跟C语言一样,MATLAB没有布尔型和逻辑数据类型。MATLAB把0值作为false,把所有非0值作为结果true。关系运算符关系运算符是指两数值或字符操作数的运算,这种运算将会根据两操作数的关系产生结果true或false,基本形式为:a1 op a2.其中a1和a2是算术表达式、变量或字符串,op代表关系运算符中的一个,如果两者的关系为真返回1否则返回0.=等于;=不等于;大于;=大于等于;=小于等于;注:字符之间的求值要按照字母表顺序;关系运算符也可以用于标量和数组的比较;关系运算符也可以用于比较两数组,只要两数组具有相同的形;因为字符串实际上是字符的数组,关系运算符也比较两个相同长度的字符串。注:=和=这两个运算符比较两个字符串是安全的。但对两个数字数据的比较将可能产生意想不到的错误。两个理论上相等的数不能有一丝一毫的差别,而在计算机计算的过程中出现了近似的现象,从而可能在判断相等于不相等的过程中产生错误,这种错误叫roundoff错误。我们可以通过检测两数之间在一定的范围内是不是近似相等,在这个精确范围内可能会产生roundoff错误。注:在检测两个数值是否相等时一定要小心,因为roundoff错误可能会是两个本来相等的数值不相等了。这时可以在roundoff错误的范围内检测是否相等。逻辑运算符是联系一个或两个逻辑操作数并能产生一个逻辑结果的运算符。有三个二元运算符:分别为AND、OR和异或运算符,还有一个一元运算符NOT。二元逻辑运算的基本形式为:l1 op l2.l1和l2代表表达式或变量,op代表逻辑运算符。一元逻辑运算的基本形式为:op l1.如果l1和l2之间的逻辑关系为真返回1否则返回0.如果一个数值不为0那么MATLAB将把其看做true否则为false。标量和数组之间也可以进行逻辑运算;两数组之间也可以进行逻辑运算只要大小相等。在运算的顺序中,逻辑运算在所有的数学运算和关系运算之后进行,表达式的运算顺序为:数学运算;从左向右依次进行关系运算;执行所有运算;从左向右依次进行&运算;从左向右依次进行|运算;和数学运算一样括号能够改变括号的运算顺序。逻辑函数MATLAB中有大量的逻辑函数,在条件满足时函数返回1,条件不满足时返回0。这些函数和逻辑关系与关系联合组成选择结构和循环结构(ab=ab+ab(a为非a,ab表示a异或b)Ischar(a)a是字符数组返回1否则返回0;isempty(a)a是空数组返回1否则返回0;isinf(a)a是无穷大返回1否则返回0;isnan(a)a不是一个数返回1否则返回0;isnumeric(a)a是一个数值数组返回1否则返回04. 选择结构(分支语句)选择结构可以使MATLAB选择性执行指定区域内的代码(称之为语句块blocks),而跳过其他区域的代码。选择结构在MATLAB中有三种具体的形式:if结构、switch结构和try/catch结构。If结构If结构的基本形式:其中control expression控制if结构的运算。如果control_expr_1的值非0,那么程序将会执行语句块1(block1),然后跳到end后面的第一个可执行语句继续执行。否则程序将会检测control_expr_2的值,如果control_expr_2的值非0,那么程序将会执行语句块2(block2)然后跳到end后第一个可执行语句继续执行。如果所有的控制表达式(control expression)均为0那么程序将会执行与else相关的语句。在一个if结构中,可以有任意个else if语句,但else语句最多只有一个。只要上面每一个控制表达式均为0,那么下一个控制表达式将会被检测,一旦其中的一个表达式的值非0,对应语句块就要被执行,然后跳到end后面第一个可执行语句继续执行,如果所有控制表达式均为0那么程序将会执行else语句,若没有else语句程序将会执行end后面的语句而不执行if结构中的部分。注意MATLAB中在if结构中的关键字end与前面提到的返回已知下标最大值函数end完全不同。MATLAB通过end在m文件中的上下文来区分开它的两个用途。在大多数情况下控制表达式均可以联合关系运算符和逻辑运算符。关于if结构使用的注意事项If结构是非常灵活的,它必须包含一个if语句和一个end语句,中间可以有任意个elseif语句,也可以有一个else语句。If语句是可以嵌套的如果if结构完全是另一个if结构的一个语句块,我们就称两者为嵌套关系。MATLAB翻译器经常把已知的end语句和它最近的if语句联合在一起,所以第一个end语句和if0最接近,对于一个编写正确的程序,他的工作正常,但如果程序员编写出错,他将会使编译器出现混淆性错误信息提示。例如,编写一个大的程序,包括如下一个结构:这个程序包括了3个嵌套的if结构,在这个结构中可能有上千行的代码,现在假设第一个end在编辑区突然被删除,那么MATLAB编译器将会自动将第二个end与最里面的if(test3)结构联合起来,第三个end将会和中间的if(test2)联合起来。当编译器到达文件结束的时候将会发现第一个if(test1)结构将永远没有结束,然后编译器就会产生一个错误提示信息,即缺少一个end,但它不能告诉你问题发生在什么地方,这就需要必须回头去看整个程序来找问题。Switch结构Switch结构是加一种形式的选择结构。程序员可以根据一个单精度整形数、字符或逻辑表达式的值来选择执行特定的代码语句块(block1)。如果switch_expr的值与case_expr相等,那么第一个代码块将会被执行,然后程序将会跳到switch结构后的第一个语句。如果switch_expr与case_expr2相等,那么第二个代码块将会被执行,然后程序将会跳到switch结构后的第一个语句。在这个结构中,用相同的方法来对待其他情况。Otherwise语句块是可选的如果它存在的话,当switch_expr的值与其他所有的选项都不相等时,这个语句块将会被执行。如果他不存在,且switch_expr的值与其他所有选项都不相等,那么这个结构中的任何一个语句块都不会被执行,这种情况下可以看做没有选择结构,直接执行MATLAB语言如果说switch_expr有很多值可以导致相同代码的执行,那么这些值可以括在同一括号内,如下所示。如果这个switch表达式和其中任一个表达式相匹配,那么这个语句块将会被执行。Switch_expr和每一个case_expr既可以是数值也可以是字符值。在大多情况下只有一个语句块会被执行,当一个语句块被执行后,编译器就会跳到end语句后的第一个语句开始执行。如果switch表达式和多个case表达式相对应,那么只有他们中的第一个将会被执行。Try/catch结构的应用Try/catch结构是选择结构的一种特殊形式,用于捕捉错误。一般的,当一个MATLAB程序在运行时遇到了一个错误,这个程序就会终止执行。Try/catch结构修正了这个默认行为。Try/catch结构的基本形式如下:当程序运行到try/catch语句块,try语句块中的一些语句将会被执行。如果无错误,catch语句块将会被跳过。另一方面,如果一个错误发生在try语句块,那么程序将中止执行try语句块并立即执行catch语句块。5. 附加的画图特性控制x,y轴绘图的上下限在默认的情况下图像的X,Y轴的范围宽到能显示输入值的每一个点,但是只显示这些数据的一部分十分有用,可以借助axis函数实现。Axis函数允许程序员设定和修改坐标的上下限。注:MATLAB命

温馨提示

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

评论

0/150

提交评论