matlab第七讲教案.doc
西南科技大学本科生课程备课教案计算机技术在安全工程中的应用 Matlab入门及应用授课教师徐中慧班 级专 业安全技术及工程第七章 逻辑函数与控制结构课型新授课 教具多媒体教学设备,matlab教学软件一、目标与要求能够正确使用函数find,正解和正确使用if/else系列命令,理解switch/case结构,正确使用for循环和while循环。二、教学重点与难点本堂课教学的重点在于引导学生在编写matlab程序时能够熟练运用控制结构的相关函数实现相应的功能。三、教学方法 本课程主要通过讲授法、演示法、练习法等相结合的方法来引导学生掌控本堂课的学习内容。四、教学内容课后习题讲解 onea15 3 22;3 8 5;14 3 82;b1 5 6;c12 18 5 2;da,3 twoeb,d threefb;d fourgc13;a fiveha1,3,c1,2,b2,1 Variable Definition Density_mercury13560;g9.81;p010000100000; mercuryh_mercuryp./Density_mercury*g waterh_waterh_mercury.*13560/1000 outputhh_mercury,h_water (3)已知下列矩阵查找各矩阵中所有大于10的元素的序号,输出结果用单序号方法表示。查找各矩阵中所有大于10的元素的序号,输出结果用该元素的下标表示。查找各矩阵中所有大于10的元素。查找各矩阵中所有大于10小于40的元素的序号,输出结果用单序号方法表示。查找各矩阵中所有大于10小于40的元素的序号,输出结果用该元素的下标表示。查找各矩阵中所有大于10小于40的元素用length和find查询各矩阵中数值在0到10之间或70到80之间元素的个数。 Variable Definition x1 10 42 6;5 8 78 23;56 45 9 13;23 22 8 9;y1 2 3;4 10 12;7 21 27;z10 22 5 13; oneafindx10,bfindy10,cfindz10, twoa2,A2findx10,b2,B2findy10,c2,C2findz10, threea3xa,b3yb,c3zc, foura4findx10aalengtha7b7findy0bblengthb7c7findz0cclengthc7(4)使用if、if/else、elseif等结构创建函数解决下列问题,假设函数的输入数据为标量,对函数进行测试。假设某州的法定饮酒年龄为21岁,创建函数判断是否达到法定饮酒年龄。许多游乐场所规定了参与者的最低身高。假设某种游戏要求参与者必须高于155,创建函数判断是否符合身高要求。在产品制造时,通常会规定产品尺寸的容差。假设某产品的长度为5.4,可以允许有0.1的正负误差。创建函数判断产品是否符合该技术要求。固体燃料火箭发动机有三级。第一级的燃料耗尽后与导弹分离,第二级点火。然后第二级燃尽分离后第三级点火。最后,第三级燃尽后与导弹分离。各级的燃烧时间如下所示级1 0100s级2 100170s级3 170260s创建函数判断火箭正处于第一级、第二级、第三级和自由飞行(无动力阶段)中的哪个阶段ageEnter a value of your age ;if age21 dispYou have reached legal drinking age else dispYouv not reached legal drinking age endHeightEnter a value of your height ;if height155 dispYou have reached the height else dispYouv not reached the height endsizeEnter a value of size ;if size5.3 disp Its not a accepted product elseif size5.5 disp Its not a accepted product else disp Its a accepted productend或sizeEnter a value of size ;if size5.3if time0Ask the user to gallons or litersunitEnter gallons or liters,s;Use to switch/case to determine the conversion factorswitch unit case gallons factor1; case liters factor0.264; otherwise dispNot available factor0;endAsk the user how much gas he/she would like to buyvolumeEnter the volume you would like to buy inn;Calculate the cost of the gasif factor0 costvolume*factor*rate; Send the results to the screen fprintfThat will be 5.2f for 5.1f sn,cost,volume,unitend(5)menu结构函数menu常和switch/case结构一起使用。运行后,在屏幕上会出现一个菜单,菜单的内容可以由编程人员设定。函数menu的语法结构为menuMessage to the user,text for button 1,text for button 2,etc. 在前面飞机票的例子中如果使用menu,用户就可以在菜单上选择任意一个城市。由于用户不可能选择“not on file”作为城市名,因此原程序中可以去掉otherwise语句citymenuSelect a city from the menu,Boston,Denver,Honoluluswitch city case 1 disp345 case 2 disp150 case 3 dispStay home and studyend注使用菜单这种图形化界面可以大大减少用户出现拼写错误的可能性。同时在case语句中用序号代替了字符串。这个脚本程序运行后,屏幕上会出现如下图所示的菜单,用户可以选择任意一个选项,matlab就会出现相关的结果。加油问题,采用菜单方式在上例中用switch/case实现了以加仑或升为单位加油的功能。程序中存在一个问题即如果用户拼写错误,程序将无法运行。例如当程序提示用户输入gallons或liters时,用户错误的输入litters 程序将输出 Not available 如果在程序中使用菜单功能,那么用户只需选择按键就可以完成操作,这样就避免了错误地发生。修改后的程序仍然采用switch/case结构,不过需要添加菜单功能。1.问题描述计算汽油的总价2.输入/输出描述输入 使用菜单确定汽油的计量单位是加仑还是升输出 假设每加仑汽油2.89美元,计算汽油的总价clc,clear Define the cost per gallonrate2.89; Ask the user to gallons or liters ,using a menudispUse the menu box to make your selectionchoicemenuMeasure the gasoline in liters or gallons,gallons,liters;switch choice case 1 factor1; unitgallons; case 2 factor0.264; unitliter;end Ask the user how much gas he/she would like to byvolumeEnter the volume you would like to buy in ,unit,n; Calculate the cost of the gascostvolume*factor*rate; Send the results to the screenfprintfThat will be 5.2f for 5.1f sn,cost ,volume ,unit(6)循环结构for循环 循环结构一般用于重复操作。Matlab中有两种不同的循环结构for循环和while循环。如果已知循环的次数,多采用for循环。如果需要满足某一条件时停止循环,多采用while循环。虽然在程序开发过程中广泛采用循环结构,但是在编程时还是应该尽量避免出现循环结构。在Matlab中,可以使用find命令或矢量化的方法避免循环结构,所谓矢量化就是操作过程中尽量用矢量代替元素。减少循环结构有利于提高程序的运行速度,简化编程步骤。for循环结构非常简单。第一行标识循环,定义索引矩阵。循环体每执行一次,索引值都会发生一次变化。循环标识行后紧接着是执行的代码,最后是循环结束标志end。总之,for循环的一般结构如下for indexmatrix commands to be cutedendEg for k1 3 5 kendfor k13; a5.kend提 示大部分计算机程序不具有Matlab中矩阵运算能力,因此常利用循环体定义数组。实际上,在Matlab中利用下述代码创建适量更简单。for k15akk.2endk15,ak.2for循环常和if语句配合使用例如在下面这段程序中,统计考试成绩为90分以上的有多少人scores76 45 98 97;count0;for k1lengthscores if scoresk90 countcount1; endenddispcount在大多数情况下,for循环中的索引矩阵是一个单行矩阵。如果索引矩阵是一个二维矩阵,matlab每次取矩阵中的一列作为索引值。for k1 2 3;1 4 9;1 8 27 akend for循环的用法总结l 循环体以for语句开始,以end语句结束。l 循环体的第一行用索引矩阵定义循环的次数。l for循环的索引必须是一个变量,每执行一次循环,索引值就会发生变化。l 可以用前面介绍过的任何一种方法定义索引矩阵,但是一般情况下采用冒号方式定义。l 如果索引矩阵是一个行矢量,那么每执行循环一次,依次取矢量中的一个元素作为索引值。l 如果索引矩阵是二维矩阵,那么每执行循环一次,依次取矩阵中下一列的值,即在这种情况下索引值是一个列矢量。l for循环结束后,索引值等于最后一次执行的数值。l 对程序代码矢量化可以避免for循环。例 题用for循环计算阶乘 阶乘就是1到N所有的数相乘。例如5的阶乘就是1*2*3*4*5120。在数学中,常用感叹号表示阶乘5就是5的阶乘。Matlab的内置函数factorial就可以计算阶乘。现在我们编一小段程序来计算阶乘。xEnter a value for factorialn;a1;for k1x aa*k;enddispa(7)循环结构while循环 while循环和for循环类似,两者的最大区别在于while循环的次数是不固定的。只要判断条件为true,循环体就会被执行。while循环的语法结构如下 while criterion commands to be cutedend Eg k0; while k3 kk1; end dispk实 例 While循环还可以检查用户的输入错误。例如计算以10为底的对数时要求输入数据为正数。用while循环检查输入数据是否为正数,如果不是,提示用户输入正确的数值。程序一直提示用户直到输入正确有效的数据为止。xEnter a positive value of xn;while x0 displogx is not defined for negative numbers xEnter a positive value of xn;endylog10x(7)break和continue break命令可以提前终止循环。Break语句一般嵌套于while或for循环中,用于中止最内层循环。n0;while n10 nn1; aEnter a value greater than 0; if a0 dispYou must enter a positive number dispThis program will terminate break end dispThe natural log of that number is displogaend命令continue的用法和break类似,此命令的作用是结束本次循环,直接进入下一次循环。n0;while n10 nn1; aEnter a value greater than 0; if a0 dispYou must enter a positive number dispTry again continue end dispThe natural log of that number is displogaend在这段程序中,如果输入负数,则执行下一次循环,直到n大于10.