《五Matlab编程入门ppt课件.ppt》由会员分享,可在线阅读,更多相关《五Matlab编程入门ppt课件.ppt(40页珍藏版)》请在三一办公上搜索。
1、西南交通大学数学建模,Matlab 编程入门,Matlab 编程入门,Matlab 编程简介,Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和 C、FORTRAN 等高级语言一样进行程序设计。,在 Matlab 程序设计中,要充分利用 Matlab 数据结构的特点,提高编程效率。,利用 Matlab 的程序控制功能,可以将有关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕。,用 Matlab 语言编写的程序称为
2、M 文件。,M 文件是由若干 Matlab 命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言开发的 M 文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。,M 文件,M 文件以.m 为扩展名。,M 文件是一个文本文件,可以用任何文本编辑器来建立和编辑,通常使用 Matlab 自带的 M 文件编辑器。,M 文件的建立与打开,选中M文件编辑器下拉菜单项【Debug:Run】,即可执行该文件。如果文件有错误,则会停在出错的指令行上,并在指令窗中指出错误的类型,和出错的位置。,M文件编程基础,存盘要
3、取文件名,通常保存到matlabwork目录中.文件名要以字母开头中间不含空格和标点符号.通常用拼音加数字,如:zhuxu1、zx2、jixian-1等;不能用数字和专用变量名,如123,pi,ans,eps,matlab等.文件名不能与程序中变量名一样.(能保存,运行出错)运行程序:点击工具条Tools中的run命令或在指令窗口输入程序名。其运行结果或出错信息显示在指令窗口,此时,用户应切换到指令窗口进行查看.,M文件编写和运行,在命令窗口中输入 f2cs,即可执行该 M 文件。,例:编写一个脚本文件将华氏温度转化为摄氏温度,脚本文件举例,脚本文件运行后,文件中所产生的所有变量都驻留在 Ma
4、tlab 当前工作空间,可以用 whos 查看。,关系运算,比较大小,如果结论是 真 则返回 1,否则返回 0,注意=与=的区别,关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量,在后一种情况,标量和数组中的每一个元素相比较,比较结果与数组大小一样。,关系运算符,例:,关系运算举例,2+2=4,23,A=1 3 5;2 0 6;B=3 1 0;2 4 6;A=B,x=5 0;4 2;x4,逻辑运算,逻辑运算符,A&B 等价于 and(A,B)A|B 等价于 or(A,B)A 等价于 not(A),逻辑运算表,all(x)如果向量 X 中所有元素都非零,则返回 1,否则返回
5、0,若 x 为矩阵,则 any 和 all 按列运算,返回一个 0-1 向量,逻辑运算,相关函数,any(x)如果向量 X 中存在非零元素,则返回 1,否则返回 0,一些测试函数,运算优先级,高,低,程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成。,顺序结构,M文件控制流,数据的输入:input,数据输入 input,数据输出 fprintf,format 中还可以使用一些特殊格式,如:,n(换行)t(制表符)b(退格)(反斜杆)%(百分号),数据输出 fprintf,a=Hello;b=2.4;c=100*pi;fprintf(a=%s,b=%f,c=
6、%en,a,b,c),例:,format 中的输出格式要与输出变量一一对应,可以没有输出变量,选择结构 是根据给定的条件成立或不成立,分别执行不同的语句。Matlab 用于实现选择结构的语句有 if 语句和 switch 语句。,选择结构,单分支结构,if expression(条件)statements(语句组)end,if 条件语句,if expression1(条件1)statements1(语句组1)elseif expression2(条件2)statements2(语句组2).elseif expressionm(条件m)statementsm(语句组m)else statemen
7、ts(语句组)end,多分支结构,if 条件语句,将百分制的学生成绩转换为五级制的成绩输出-if实现,clearn=input(输入n=);if n=90 r=Aelseif n=80 r=Belseif n=70 r=Celseif n=60 r=Delse r=Eend,运行结果:输入n=87r=B,if 语句举例,根据表达式的不同取值,分别执行不同的语句。,switch expression(表达式)case value1(表达式1)statement1(语句组1)case value2(表达式2)statement2(语句组2).case valuem(表达式m)statementm(
8、语句组m)otherwise statement(语句组)end,switch 语句,Matlab 首先计算 expression 的值,然后将它依次与各个 case 指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出 switch 结构。,switch 后面的表达式 expression 的值可以是一个标量或字符串。,switch 语句,otherwise 指令可以不出现。,如果所有的比较结果都为假,则执行 otherwise 后面的语句组,然后跳出 switch 结构。,clear,n=input(输入n=);switch fix(n/10)case 10,9 r=A
9、case 8 r=B case 7 r=C case 6 r=D otherwise r=Eend,循环结构 是按照给定的条件,重复执行指定的语句。Matlab 用于实现循环结构的语句有 for 语句和 while 语句,循环结构,for variable=expression statement(循环体)end,循环变量,表达式 expression 可以是行向量,也可以是矩阵,for 循环,clear;y=0;n=100;for k=1:n y=y+1/(2*k-1);end,循环语句可以嵌套使用,while 循环,while expression(条件)statement(循环体)end
10、,不能在 for 循环体内改变循环变量的值,为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免 for 循环的使用,如果预先就知道循环的次数,则可以采用 for 循环;否则,如果预先无法确定循环的次数,则可以使用 while 循环。,【例】使用while结构计算1+2+3+100。,clearsum=0;i=0;while i100i=i+1;sum=sum+i;endisum,clearsum=0;for i=1:100 sum=sum+i;endisum,break 和 continue,break 语句用于终止循环的执行,即跳出最内层循环 continue 语句用于结束本次循环,
11、进行下一次循环 break 和 continue 一般与 if 语句配合使用,其它流控制语句,function 输出形参列表=函数名(输入形参列表)%注释说明部分(可选)函数体语句(必须),第一行为引导行,表示该 M文件是函数文件 函数名的命名规则与变量名相同(必须以字母开头)当输出行参多于一个时,用方括号括起来 函数必须是一个单独的 M文件 函数文件名必须与函数名一致 以百分号开始的语句为注释语句,函数文件,函数文件由 function 语句引导,例 编写函数文件求半径为r的圆的面积和周长 function s,p=fcircle(r)%FCIRCLE calculate the area
12、and perimeter of a circle of radii r%r 圆半径%s 圆面积%p 圆周长 s=pi*r*r;p=2*pi*r;以上函数文件以文件名fcircle.m存入 c:matlab7work下,然后在MATLAB命令窗口调用该函数:s,p=fcircle(10),函数文件举例,函数调用的一般格式,输出实参列表=函数名(输入实参列表),函数调用时,实参的顺序应与函数定义时的形参的顺序一致。函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用。函数所传递的参数具有可调性,Matlab 用两个永久变量 nargin 和 nargout 分别
13、记录调用该函数时的输入实参和输出实参的个数。,函数调用,%函数文件 factor.mfunction f=factor(n)if(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);endfprintf(s=%g n,s),例:利用函数的递归调用计算 n!,递归函数举例,子函数,function avg,med=ex4subfun(x)%主函数 n=length(x);avg=mean(x,n);med=median(x,n);function a=mean(x,n)%
14、子函数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,函数通过输入和输出参数与其它 M 文件进行数据传递。,当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除。,如果在若干个 M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作。,函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M 文件使用。,全局变量与局部变量,定义全局变量是 M
15、文件间传递信息的一种手段。,变量名列表中的各个变量用空格隔开,不能用逗号!,全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。,global 变量名列表,全局变量的定义,程序示例,clear;global a ba=1;b=3;y=mysquaresum(a,b);fprintf(a=%g,b=%g n,a,b);z=myproduct(a,b);fprintf(a=%g,b=%gn,a,b);,function squar
16、e_sum=mysquaresum(x,y)square_sum=x2+y2;,function product=myproduct(x,y)global aproduct=x*y;a=x+y;,子函数,函数文件中可以含有一个或多个子函数 子函数由 function 语句引导 主函数必须位于最前面,子函数出现的次序任意 子函数只能被主函数和位于同一个函数文件中的其它子函数调用 除了用 global 定义的全局变量外,子函数中的变量都是局部变量,子函数与主函数及其它子函数之间通过输入、输出参数进行数据传递,调用一个函数时,Matlab 会首先检查该函数是否为一个子函数。,Matlab命令执行过程,