五Matlab编程入门



《五Matlab编程入门》由会员分享,可在线阅读,更多相关《五Matlab编程入门(40页珍藏版)》请在装配图网上搜索。
1、,,,,,,,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,,,*,Matlab,,编程入门,1,Matlab 编程入门,,,Matlab,,编程简介,,Matlab,,作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和,C,、,FORTRAN,,等高级语言一样进行程序设计。,在,Matlab,,程序设计中,要充分利用,Matlab,,数据结构的特点,提高编程效率。,利用,Matlab,,的程序控制功能,可以将有关,Matlab,,命令编成程序存储在一个文件中,(,M,,文件,),,然后在命令窗口中运行该文件,,Matl
2、ab,,就会自动依次执行文件中的命令,直到全部命令执行完毕。,2,,用,Matlab,,语言编写的程序称为,M,文件,。,,M,文件是由若干,Matlab,,命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,,Matlab,,提供的内部函数以及各种工具箱,都是利用,Matlab,,语言开发的,M,文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。,,M,文件根据调用方式的不同可以分为两类:,,Script,:,脚本文件,/,命令文件,,Function,:,函数文件,M 文件,,,M,,文件以,.,m,,为扩展名。,3,,,M,,文件是一个文本文件,可以用任何文本
3、编辑器来建立和编辑,通常使用,Matlab,,自带的,M,,文件编辑器。,M 文件的建立与打开,,新建一个,M,文件,菜单操作,(,File, New M-File,,),,命令操作,,(,edit,,M,文件名,),,命令按钮,,(,,快捷键,,),打开已有的,M,文件,菜单操作,,(,File, Open,,),,命令操作,(,edit,,M,文件名,),,命令按钮,,(,,快捷键,,),,双击,M,,文件,4,,选中,M,文件编辑器下拉菜单项,【Debug,:,Run】,,即可执行该文件。如果文件有错误,则会停在出错的指令行上,并在指令窗中指出错误的类型,和出错的位置,。,M,文
4、件编程基础,5,,,存盘要取文件名,通常保存到,\,matlab,\work\,目录中,.,,文件名要以,字母开头中间不含空格和标点符号,.,通常用拼音加数字,如:,zhuxu1,、,zx2,、,jixian-1,等,;,不能用数字和专用变量名,如,123,,,pi,,,ans,,,eps,,,matlab,等,.,文件名不能与程序中变量名一样,.(,能保存,,,运行出错,),,运行程序:点击工具条,Tools,中的,run,命令或在指令窗口输入程序名。其,运行结果或出错信息显示在指令窗口,,此时,用户应切换到指令窗口进行查看,.,,M,文件编写和运行,,6,,在命令窗口中输入,f2cs,,,
5、即可执行该,M,,文件。,例:,编写一个脚本文件将华氏温度转化为摄氏温度,脚本文件举例,,clear;,%,清除当前工作空间中的变量,,f=input(',Please input Fahrenheit temperature:,');,,c=5*(f-32)/9;,,fprintf('The centigrade temperature is %g\n',c);,新建一个,M,,文件,,f2cs.m,,,内容如下:,脚本文件运行后,文件中所产生的,所有变量都驻留在,Matlab,当前工作空间,,可以用,whos,,查看。,7,,关系运算,<,小于,<=,小于等于,>,大于,>=,大于等于,=
6、=,等于,~=,不等于,比较大小,如果结论是,真,则返回,1,,否则返回,0,注意,==,与,=,,的区别,关系操作符能用来比较两个,同样大小,的数组,或用来比较,一个数组和一个标量,,在后一种情况,标量和数组中的每一个元素相比较,比较结果与数组大小一样。,关系,运算符,8,,例:,关系运算举例,,>>,,2+2==4,>>,,2>3,>>,,A=[1 3 5; 2 0 6];,,>>,,B=[3 1 0; 2 4 6];,,>>,,A>=B,>>,,x=[5 0; 4 2];,,>>,,x<4,9,,&,与,(,Elementwise AND),|,或,(,Elementwise OR),~
7、,非,xor(x,y),异或,逻辑运算,,逻辑运算符,A,,&,,B,,等价于,and,(A,B),,A,,|,,B,,等价于,or,(A,B),,,~,,A,,等价于,not,(A),10,,运算对象,,与,或,非,异或,A,B,A&B,A|B,~,A,Xor(A,B),0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,0,逻辑运算表,,11,,all,(x),如果向量,X,,中,所有元素都非零,,则返回,1,,否则返回,0,若,x,为矩阵,则,any,,和,all,,按列运算,返回一个,0-1,向量,逻辑运算,,相关函数,any,(x),,如果向
8、量,X,,中,存在非零元素,,则返回,1,,否则返回,0,12,,isfinite,元素为有限值,返回真值,1,isinf,元素为无穷大,返回真值,1,isnan,元素为不定值,返回真值,1,isreal,参量无虚部,返回真值,1,isstr,参量为一个字符串,返回真值,1,isempty,参量为空,返回真值,1,一些测试函数,,13,,运算优先级,,高,低,14,,程序控制结构有三种:,顺序结构,、,选择结构,和,循环结构,。任何复杂的程序都由这三种基本结构组成。,顺序结构,M文件控制流,,按排列顺序依次执行各条语句,直到程序的最后。,这是最简单的一种程序结构,一般涉及数据的输入输出、数据
9、的计算或处理等。,程序,模块,1,程序模块,2,15,,例:,A=input,(,',Please input A: '),数据的输入:,input,A=input,(,提示信息),其中,提示信息,为字符串,,,该命令要求用户输入,A,,的值,(,可以是数或字符串,),数据输入 input,,A=input,(,提示信息,,,',s'),注:,此时输入的字符串,不要加单引号,!,如果是输入字符串,也可以使用下面的方法,name=input,(,',What,'',s your name?,',,,',s,',),例:,16,,数据输出 fprintf,,fprintf,(fid,format,
10、variables),按指定的,格式,将变量的值输出到指定的,文件,数据的输出:,fprintf,,fid,,为文件句柄,若缺省,则将变量的值输出到屏幕上,,,format,,用来指定数据输出时采用的格式,常见的有,%e,(,采用科学计算形式,),,%f,(,采用浮点数形式,),,%g,(,由系统自动选取上述两种格式之一,),,,,%s,(,输出字符串,),,,format,,中还可以使用一些特殊格式,如:,\n,,(,换行,),\t,,(,制表符,),\b,,(,退格,),,\\,,(,反斜杆,),,%%,,(,百分号,),,17,,数据输出 fprintf,,>>,,a=,',Hello,
11、',; b=2.4; c=100*pi;,,>>,,fprintf,(,',a=%s,b=%f,c=%e\n,',,,a,b,c),例:,,format,,中的输出格式要与输出变量一一对应,,可以没有输出变量,>>,,fprintf,(,',,Today is Monday\n,',),例:,18,,选择结构,是根据给定的条件成立或不成立,分别执行不同的语句。,Matlab,,用于实现选择结构的语句有,if,,语句,和,switch,,语句,。,选择结构,,条件,程序模块1,成立,不成立,程序模块2,19,,单分支结构,if,expression,,(,条件),,,statements (,语
12、句组),,end,if 条件语句,,if,expression (,条件),,,statements1(,语句组1),,else,,,statements2(,语句组2),,end,双分支结构,20,,if,expression1,(,条件,1,),,,statements1(,语句组,1),,elseif,expression2 (,条件,2,),,,statements2(,语句组,2),,... ...,,,elseif,expressionm (,条件,m,),,,statementsm(,语句组,m,),,else,,,statements(,语句组,),,end,多分支结构,if
13、条件语句,,21,,将百分制的学生成绩转换为五级制的成绩输出,-if,实现,,clear,,n=input(',输入,n= ');,,if n>=90,,r='A',,elseif n>=80,,r='B',,elseif n>=70,,r='C',,elseif n>=60,,r='D',,else,,r='E',,end,运行结果:,,输入,n= 87,,r =,,B,条件,1,语句组,1,条件,2,是,语句组,2,是,否,条件,n,语句组,n,语句组,n+1,否,否,是,if 语句举例,,22,,根据表达式的不同取值,分别执行不同的语句。,switch,expression (,表达式)
14、,,case,value1 (,表达式1),,,statement1(,语句组1),,case,value2 (,表达式2),,,statement2(,语句组2),,... ...,,case,valuem,,(,表达式,m),,,statementm(,语句组,m),,otherwise,,,statement (,语句组),,end,switch 语句,,23,,,Matlab,,首先计算,expression,的值,然后将它依次与各个,case,指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出,switch,结构。,,switch,后面的表达式,expressio
15、n,的值可以是一个标量或字符串。,switch 语句,,,otherwise,指令可以不出现。,如果所有的比较结果都为假,则执行,otherwise,后面的语句组,然后跳出,switch,结构。,24,,clear,n=input(',输入,n= ');,,switch fix(n/10),,,case {10,9},,r='A',,case 8,,r='B',,case 7,,r='C',,case 6,,r='D',,otherwise,,r='E',,end,25,,循环结构,是按照给定的条件,重复执行指定的语句。,Matlab,用于实现循环结构的语句有,for,语句,和,while,语
16、句,循环结构,,程序模块,不成立,成立,条件,26,,for,variable=expression,,,statement(,循环体,),,end,循环变量,,表达式,expression,,可以是行向量,也可以是矩阵,for 循环,,clear;,,y=0; n=100;,,for,k=1:n,,,y=y+1/(2*k-1);,,end,例:,已知,,当,n,=100,时,求,y,的值,27,,循环语句可以嵌套使用,while 循环,,while,expression,(,条件,),,,statement(,循环体,),,end,不能在,for,循环体,内改变循环变量的值,为了提高代码的运
17、行效率,应尽可能提高代码的向量化程度,避免,,for,循环,的使用,如果预先就知道循环的次数,则可以采用,for,循环,;否则,如果预先无法确定循环的次数,则可以使用,while,循环,。,28,,【,例,】,使用,while,结构计算,1+2+3+…+100,,。,clear,,sum=0; i=0;,,while i<100,,i=i+1;,,sum=sum+i;,,end,,i,,sum,i =,,100,,ans =,,5050,执行结果为,clear,,sum=0;,,for i=1:100,,sum=sum+i;,,end,,i,,sum,29,,,break,,和,,contin
18、ue,,break,,语句用于,终止循环,的执行,即跳出最内层循环,,,continue,,语句用于结束,本次循环,,进行下一次循环,,,break,,和,continue,,一般与,if,,语句配合使用,其它流控制语句,,,return,,return,,语句用于,退出,正在运行的脚本或函数,通常用在函数文件中。,30,,function,,输出形参列表,=函数名,(,输入形参列表,),,%,注释说明部分,(,可选,),,函数体语句,(必须),,第一行为,引导行,,表示该,M,文件是函数文件,,函数名的命名规则与变量名相同,(,必须以字母开头,,),,当输出行参多于一个时,用,方括号,括起来
19、,,函数必须是一个,单独的,M,文件,,函数,文件名必须与函数名一致,,以,百分号,开始的语句为,注释语句,函数文件,,函数文件由,function,,语句引导,31,,,例 编写函数文件求半径为,r,的圆的面积和周长,,,,function [s,p]=fcircle(r),,%FCIRCLE calculate the area and perimeter of a circle of radii r,,%r,圆半径,,,%s,圆面积,,,%p,圆周长,,,s=pi*r*r;,,p=2*pi*r;,,,,,以上函数文件以文件名,fcircle.m,存入,c:\matlab7\work,下
20、,然后在,MATLAB,命令窗口调用该函数:,,,[s,p]=fcircle(10),函数文件举例,,32,,函数调用的一般格式,输出实参列表,=函数名,(,输入实参列表,),函数调用时,,实参的顺序,应与函数定义时的,形参的顺序,一致。,,函数可以,嵌套调用,,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为,递归调用,。,,函数所传递的参数具有可调性,,Matlab,,用两个永久变量,nargin,,和,nargout,,分别记录调用该函数时的输入实参和输出实参的个数。,函数调用,,33,,%,,函数文件,factor.m,,function,f=,factor,(n),,if
21、 (n<=1),,f=1;,,else,,f=n*,factor,(n-1);,,end,% main.m,,%,计算,,s=1!+2!+3!+4!+5!,,%,,s=0;,,for i=1:5,,s=s+,factor,(i);,,end,,fprintf,(' s=%g \n',s),例:利用函数的递归调用计算,n,!,递归函数举例,,34,,子函数,,function,[avg, med] =,ex4subfun,(x),%,主函数,,,n =,length,(x);,,avg =,mean,(x, n);,,med =,median,(x, n);,,,function,a =,mea
22、n,(x, n),%,子函数,,a = sum(x)/n;,,,function,m =,median,(x, n),%,子函数,,x =,sort,(x);,,if rem(n, 2) == 1,,m = x((n+1)/2);,,else,,m = (x(n/2)+x(n/2+1))/2;,,end,35,,函数通过,输入和输出参数,与其它,M,文件进行数据传递。,当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即,全部被清除,。,如果在若干个,M,文件中,,都把某个变量定义为全局变量,,则这些函数将公共使用这一变量,。,所有函数都可以对它进行存取和修改操作。,,函数文件中的变
23、量都是,局部,的,即一个函数文件中定义的变量不能被另一个函数文件或其它,M,文件使用。,全局变量与局部变量,,定义全局变量是,M,文件间传递信息的一种手段。,36,,变量名列表中的各个变量,用空格隔开,,不能用逗号!,全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而,在结构化程序设计中,全局变量是不受欢迎的,。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。,global,,变量名列表,全局变量的定义,,37,,程序示例,,clear;,,global a b,,a=1;,,b=3;,,y=,mysquares
24、um,(a,b);,,fprintf(' a=%g, b=%g \n',a,b);,,z=,myproduct,(a,b);,,fprintf(' a=%g, b=%g\n',a,b);,function,square_sum=,mysquaresum,(x,y),,square_sum=x^2 + y^2;,function,product=,myproduct,(x,y),,global,a,,product=x*y;,,a=x+y;,38,,子函数,,,函数文件中可以含有一个或多个子函数,,,子函数由,function,,语句引导,,主函数必须位于最前面,子函数出现的次序任意,,子函数只能被主函数和位于同一个函数文件中的其它子函数调用,,除了用,global,,定义的全局变量外,子函数中的变量都是局部变量,子函数与主函数及其它子函数之间通过输入、输出参数进行数据传递,调用一个函数时,,Matlab,,会首先检查该函数是否为一个子函数。,39,,Matlab,命令执行过程,输入,,china,输出变量,,china,的值,变量?,执行该,,内部函数,当前目录中有,,china.m,?,内联函数?,搜索路径中有,,china.m,?,否,执行该,,M,文件,执行该,,M,文件,报错!,子函数?,,私有函数?,执行该,,M,文件,是,是,是,是,是,否,否,40,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。