您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > matlab在信号与图像处理中的应用第3章
1第3章MATLAB编程MATLAB除了可以在命令窗口中运行命令行外,还可以通过编程编写成文件形式运行。当有一些命令需要重复使用时,如果在命令窗口运行命令行,每次都需要重新输入一遍,既费时,又容易出错,这时编写成文件形式就是一个很好的选择。MATLAB编程与其他的高级语言如C语言、BASIC语言等有相同的地方,也有自身的特点。由于MATLAB提供了大量的函数,这使得在C语言、BASIC语言中需要用许多代码才能完成的任务,在MATLAB中只需很简单的几个语句就能完成。总的来说,MATLAB语言语法简单、易于学习、功能强大。了解MATLAB的变量命名规则,知道MATLAB中的变量类型掌握MALAB的各种形式的编程语句知道脚本文件与函数的区别会编写脚本文件熟练掌握编写M函数的方法递推与递归排序算法3.1基本语句在MATLAB中,编程的基本语句有:赋值语句、条件转移语句、循环语句、错误处理语句。3.1.1变量(1)变量的命名规则MATLAB中变量的命名规则是:必须以字母开头,后面的字符可以由字母、数字和下划线混合组成。尽管变量名可以是任意长的,但是MATLAB仅取前N个字符,忽略后面的字符,因此要保证变量名的前N个字符有唯一确定性。N的值可以用函数namelengthmax查出来,在MATLABR2007中N=63。学学习习目目标标练练习习案案例例练练习习案案例例0第3章MATLAB编程2提示:在MATLAB中,变量区分大小写,因此变量“A”与变量“a”是两个不同的变量。用函数isvarname可以确定一个变量名是否为合法的。(2)变量类型MATLAB中有三种基本的变量类型:局部变量、全局变量、静态变量。通常,每个函数体内都有自己定义的变量,不能从其它函数和MATLAB工作空间访问这些变量,这些变量就是局部变量。如果要使某个变量在几个函数中和MATLAB工作空间都能使用,可以把它定义为全局变量。在一个函数中改变了全局变量的值,会影响到每一个使用全局变量的函数。全局变量用关键字“global”声明。全局变量最好在函数体的开始声明,并且全局变量名尽量大写,并能够反映它本身的含义。如果需要在几个函数中和MATLAB工作空间内都能访问一个全局变量,那么必须在每个函数中和MATLAB工作空间内都声明该变量为全局的。在实际编程中,应尽量避免使用全局变量,因为全局变量的值一旦在一个地方被改变,那么在其它包括该变量的函数中都将改变,这样有可能会出现不可预见的情况。比如,在一个程序中声明了一个全局变量,而这个变量刚巧在另外一个程序中也被声明为全局变量,这样当两个程序运行时,一个程序中的变量值可能会覆盖另一个程序中的变量值。在编程中出现这种错误是极难发现的。静态变量只能在M函数中用关键字“persistent”声明,只有声明了静态变量的函数才允许使用它。只要函数存在,MATLAB就不清除静态变量,因此静态变量的值可以从一个函数传递到另一个函数。要使用静态变量必须先声明,最好把静态变量的生命放在程序的开始。例如要把变量SUM_X声明为静态变量,可以用下面的形式声明:persistentSUM_X如果用“clearfunctionname”语句、用“clearall”或者编辑M函数,都会清除函数中所声明的静态变量。可以用“mlock”防止函数被清除,从而保证M函数中所声明的静态变量不被清除。使用变量名时,注意不要使用关键字。MATLAB中的关键字是:break、case、catch、classdef、continue、else、elseif、end、for、function、global、if、otherwise、parfor、persistent、return、switch、try、while,用函数“iskeyword”可以查看所有的关键字。3.1.2赋值语句MATLAB语言的赋值语句格式是:variables_list=expression等号左边的变量名列表为MATLAB语句的返回值。等号右边的表达式可以是各种数值计算式,也可以是函数调用等。赋值语句的等号右端,可以用分号结束,也可以用逗号结束或者直接回车。用逗号结束或直接回车,运行后变量名列表中所赋的值都会显示出来。用分号结束,运行后变量名列表中所赋的值不会显示出来。提示:分号和逗号是语句的分隔符。在1行代码中可以有多个语句,语句之间用逗号或分号分隔。MATLAB03.1基本语句3中有些函数调用的返回值有多个,这时就需要把变量名列表用方括号“[]”括起来,方括号中的各个变量之间用逗号分隔。如果左边的变量名列表和等号省略,MATLAB会自动把表达式的值赋给缺省变量“anx”。3.1.3条件转移语句条件转移语句控制程序运行过程中,执行哪一块程序代码。一种条件转移语句是“if”语句,根据判断条件为“真”、“假”选择代码块的执行。另一种条件转移语句是“switch”语句,根据条件表达式的值,选择执行哪一块代码。(1)if语句if语句先计算一个由逻辑运算符“,=,,=,==,~=”等连接的逻辑表达式的值,根据逻辑表达式值的“真”、“假”来决定执行哪一部分代码。1)“if,end”形式条件转移语句最简单的形式是“if,end”形式,其调用格式是:iflogical_expressionstatementsend如果逻辑表达式的值为“真”(逻辑值为1)MATLAB执行if和end间的所有语句,然后再执行end后面的语句。如果逻辑表达式的值为“假”(逻辑0),MATLAB跳过if和end之间的语句,直接执行end后面的语句。例如:ifrem(a,2)==0disp('a是偶数')b=a/2;end这一程序段判断变量a是否为偶数,如果a是偶数,则先显示“a是偶数”,再把a除以2后赋值给变量b。提示:rem是求余函数判断语句的逻辑表达式也可以是非数值形式的,比如逻辑表达式是矩阵形式的等。2)“if,else,end”形式“if,else,end”形式的条件转移语句的调用格式是:iflogical_expressionstatements1elsestatements2end判断逻辑表达式的值,如果为“真”则执行语句块statements1,再跳到end后面执行语句,否则执行语句块statements2,再执行end后面的语句。例如:0第3章MATLAB编程4ifrem(a,2)==0disp('a是偶数')b=a/2;elsedisp('a是奇数')b=a;end这一程序段判断变量a是否为偶数,如果a是偶数,则先显示“a是偶数”,再把a除以2后赋值给变量b,否则显示“a是奇数”,再把a的值赋给变量b。3)“if,elseif,end”形式“if,elseif,end”形式的条件转移语句的调用格式是:iflogical_expression1statements1elseiflogical_expression2statements2..................................end当表达式expression1为“真”时,执行语句statements1,然后跳到语句end后面执行;当表达式expression1为“假”而表达式expression2为“真”时,执行语句statements2,然后跳到语句end后面执行;…………。其中“elseifexpression”语句,可以有一个也可以有多个。提示:“elseif”是一个整体,不要在else和if之间添加空格。例如:if(a0)&(rem(a,2)==0)a=a/2;elseif(a0)&(rem(a,2)==1)a=3*n+1;end这一程序段计算函数是奇数是偶数n,13nn,2n)n(f的值。4)“if,elseif,else,end”形式“if,elseif,else,end”形式是if条件转移语句最完全的形式,其调用格式是:iflogical_expression1statements1elseiflogical_expression2statements2..................................03.1基本语句5elsestatementsend如果条件表达式logical_expression1的值为“真”,则执行语句块statements1,然后跳到end后面执行。如果条件表达式logical_expression1的值为“假”,而条件表达式logical_expression2的值为“真”,则执行语句块statements2,然后跳到end后面执行。…………。如果上面的所有条件表达式的值都为“假”,则执行语句statements,再到end后面继续执行。提示:“elseif”语句可能有多个。例如if(x0)y=1;elseif(x0)y=-1;elsey=0;end这一程序段给出已知数x的符号。提示:if条件语句中,if和end必须成对出现,就像是一对括号。在编程时,如果遗忘了end,MATLAB会在程序的后面找end与if配对,这样在程序运行时报告在某一位置出错时,可能错误出在更前面。在程序调试时,这种错误极难修改。在编程时,在if语句中可以再嵌入if语句。(2)switch语句用if形式的条件转移语句,如果检查的重数过多,会使得程序非常混乱。这时可以用switch形式的条件转移语句,其调用格式是:switchexpressioncasevalue1statements1casevalue2statements2otherwisestatementsend表达式expression计算出的是一个标量或是一个字符串。如果expression的值是value1,则运行语句块statements1,再跳到end后面执行。如果expression的值是value2,则运行语句块statements2,再跳到end后面执行。依次类推。如果各种情况都不满足,则执行语句块statements,再执行end后面的语句。提示:value是表达式expression可能计算出的值,也可以是单元数组形式。语句块中也可以包含switch语句。case语句可以有多个,但otherwise语句只能有一个。如果有多个value值满足条件,只执行第1个。0第3章MATLAB编程6例如:switchxcase{'A','a'}s='优秀'case{'B','b'}s='良好'case{'C','c'}s='一般'case{'D','d'}s='及格'otherwises='不及格'end这段程序把用字母形式表示的成绩,转换成文字形式。switch语句可以是如下形式:switchvarcase1disp('1')case{2,3,4}disp('2or3or4')case5disp('5')otherwisedisp('somethingelse')end提示:switch与end必须配对,两者就像括号一样把程序段括在一起。switch语句中可以没有otherwise语句。3.1.4循环语句用循环语句另重复执行一段代码。在MATLAB中循环语句有“for”循环和“while”循环两种。当循环次数已知时,用“for”循环。“while”循环是通过检查一个控制条件来决定是否进行循环。用“continue”和“break”语句可以更灵活的退出循环。(1)“for”循环在循环的次数已知的情况下,使用“for”循环,其调用格式是:forindex=start:increment:endstatementsend默认情况下,增量increment是1,可以指定任何的数值为增量,包括负数。当增量为正数时,index从start开始增加,直到超过end时停止循环。当增量为负数时,直到index小于03.1基本语句7end值时循环停止。提示:循环语句可以嵌套,构成多重循环。例如:form=1:3forn=1:3ifm==nA(m,n)=1;elseA(m,n)=0;endendend这一程
本文标题:matlab在信号与图像处理中的应用第3章
链接地址:https://www.777doc.com/doc-2881946 .html