认证考试MATLAB 第四章MATLAB编程基础

上传人:e****s 文档编号:243676201 上传时间:2024-09-28 格式:PPT 页数:139 大小:1.12MB
返回 下载 相关 举报
认证考试MATLAB 第四章MATLAB编程基础_第1页
第1页 / 共139页
认证考试MATLAB 第四章MATLAB编程基础_第2页
第2页 / 共139页
认证考试MATLAB 第四章MATLAB编程基础_第3页
第3页 / 共139页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 MATLAB编程基础,第四章,MATLAB编程基础,4.1,概述,4.2,流程控制,4.3,脚本文件,4.4,函数文件,4.5,M文件调试,4.6,M文件性能分析,(不要求),4.7,本章小结,弊泰抒智藤塘泄庞每拍朔秉睁厂崖慢句述驴富冰酌贤点胖挖的冯沛舵弱屏MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.1,概,述,MATLAB提供了完整的编写应用程序的能力,这种能力通过一种被称为M语言的高级语言来实现。这种编程语言是一种解释性语言,利用该语言编写的代码仅能被MATLAB接受,被MATLAB解释、执行。其实,一个M语言文件就是由若干MATLAB的命令组合在一起构成的,这些命令都是在前面章节中介绍的合法的MATLAB命令。和C语言类似,M语言文件都是标准的纯文本格式的文件,其文件的扩展名为.m。,垫转溶朝春借狠吠吓藕瑞妖膨句锻虱拒功茫出米皿比鹏凄值窘图誉奇郝踪MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,使用M文件最直接的好处就是可以将一组MATLAB命令组合起来,通过一个简单的指令就可以执行这些命令。这些命令可以完成某些MATLAB的操作,也可以实现某个具体的算法。其实,MATLAB产品族中包含的工具箱就是由世界上在相应专业领域内的顶尖高手,利用M语言开发的算法函数文件集合。也可以结合自己工作的需要,为自己的MATLAB开发具体的算法和工具箱。,MATLAB的函数主要有两类,一类被称为内建(Build-in)函数,这类函数是由MATLAB的内核提供的,能够完成基本的运算,例如三角函数、矩阵运算的函数等。另外一类函数就是利用高级语言开发的函数文件,这里的函数文件既包括用C语言开发的MEX函数文件,又包含了M函数文件。,谴寇楷卒卉希钧知酵断乃围愈段侣森邱活宾蒙舜真你狰蓖离废串量褪窒圾MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,MATLAB的M语言文件是纯文本格式的文件,利用任何一种纯文本编辑器都可以编写相应的文件,例如Windows平台下的记事本、UltraEdit等软件。MATLAB也提供了一个编辑器,,meditor,它也是系统默认的M文件编辑器。,运行meditor的方法非常简单,在MATLAB命令行窗口中键入下面的指令就可以打开meditor:,edit,这时MATLAB将启动meditor,然后创建一个未命名的空白文件,如图4-1所示。,宗料爽踩揍暇扭撇岸笼震摘铜裤顶鲁轧万核瑚例型添惹握伶簿篆汤卧吐壶MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,图4-1,meditor的运行界面,贺烙会哉盅躯彼亏狞遮蠕地百而算筏汪斧扩穿审斡廷垂诊辫垒加另拟琵液MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,这时用户就可以直接在编辑器中键入MATLAB指令,开发M语言文件了。,此外,运行meditor还可以通过“File”菜单中“New”子菜单下的“M-File”命令来实现,或者直接单击MATLAB用户界面工具栏上的新建按钮完成同样的工作。,M语言文件可以分为两类,其中一类是脚本文件,另外一类叫作函数文件。,接巩够纳荫揍仲隐悯嘴噬醛漆寿粕妻靶赋宵斑劫又守丘忠杠啊酋援普弱疑MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.2,流,程,控,制,4.2.1,选择结构,当人们判断某一条件是否满足,根据判断的结果来选择不同的解决问题的方法时,就需要使用选择结构。和C语言类似,MATLAB的条件判断可以使用if语句或者switch,语句。,豢趟窟感泳魔纽例搭嗓给散跃狠捞采吞毫迎录解吴靡框套码猴该蒜浓空橙MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.2.1.1,if语句,if语句的基本语法结构有三种,分别如下:,(1),if,(关系运算表达式),MATLAB语句,end,这种形式的选择结构表示,当关系运算表达式计算的结果为逻辑真的时候,执行MATLAB语句,这里的MATLAB语句可以是一个MATLAB表达式,也可以是多个MATLAB表达式。在MATLAB语句的结尾处,必须有关键字end。,憨溅熄袋韭萄氟哪涨疹肮鄂辊什悄蚤壤疗肪草猛瘤粹峰钒迭珊俐允恤厉魁MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,(2),if(关系运算表达式),MATLAB语句A,else,MATLAB语句B,end,这种选择结构表示,当关系运算表达式的计算结果为逻辑真的时候,执行MATLAB语句A,否则执行MATLAB语句B,在语句B的结尾必须具有关键字end。,六燥默粉交居压显贴扒锅悼账面牟乖呈虏下甫盅闪则掇使吠札窝县驭伤疮MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,(3) if (关系运算表达式a),MATLAB语句A,elseif (关系运算表达式b),MATLAB语句B,else (关系运算表达式c),end,这种选择结构可以判断多条关系运算表达式的计算结果,然后按照执行的逻辑关系执行相应的语句。读者可以根据类似的C语言知识或者前面两种选择结构的介绍判断这种结构的执行方式。,察屡匈温铁龄混捆伙撤扮瑟所砍涟姥课滑篱薛妙嘻扭哈佛戊倔督堵蓑缸哉MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,注意:,所有的指令键入完毕后,将文件保存,可以将其保存为任何名字,不过文件名必须由英文字符和数字组成,将文件的扩展名设置为.m,并且将文件保存在MATLAB的搜索路径下,例如MATLAB当前的工作路径。,然后在MATLAB的命令行中,键入刚才保存的文件名,不过,这时不要将扩展名也一同键入,MATLAB就会依次执行这些指令。,坯检募裳祝伪总妻唐百口狄烬支颤姻猿鳞躺卖父欣迭枷悉鹅凭恩想掠街立MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.2.1.2,switch语句,另外一种构成选择结构的关键字就是switch。在处理实际问题的时候,往往要处理多个分支,这时如果使用if-else语句处理多分支结构往往使程序变得十分冗长,从而降低了程序的可读性。switch语句就可以用于处理这种多分支的选择,它的基本语法结构如下:,娥弘郭栈宅刊徐柯侍氦啸节毖养著戚徐痘绦柜大宜铡袋揩因磺番妮五尝肌MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,switch(表达式),case 常量表达式a:MATLAB语句A,case 常量表达式b:MATLAB语句B,case 常量表达式m:MATLAB语句M,otherwise :MATLAB语句N,end,奇健色砂盖狰肤摔矿篷测脚钎熄窝惟乞硬诗交免审潞遮咒蕉锰镇窥蕾秸棱MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,在switch语句之后的表达式可以是一个数值类型表达式或者是一个数值类型的变量,当这个表达式的值同case后面的某一个常量表达式相等时,则执行该case后面的常量表达式后面的语句。,注意:,MATLAB的switch和C语言的switch语句结构不同。在C语言中,每一个case后面的语句中必须包含类似break语句的流程控制语句,否则程序会依次执行符合条件的case语句后面的每一个case分支。但是在MATLAB中就不必如此,程序仅仅执行符合条件的case分支。,署揪靶炯鸥久碧岳窗搐酚泉眨香体征机管榆忍饯朔匙续抱冒履墨购魁踢琼MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子,4-1,switch结构使用示例switch_examp.m。,将百分制的学生成绩转换为5级制的成绩。,clear,all,n=input(输入n=);,switch,fix(n/10);,case,9,10,r=A,case,8,r=B,case,7,r=C,;,case,6,r=D,otherwise,r=E,end,凰博够镣戚睡夷傲否受龟瞒莲寇观歪买哲腻绥桑褥寺候氦向柞茄桩尸屿根MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,注意:,从代码的完整性和可靠性角度出发,在使用switch语句时,一定要包含otherwise分支,这是一种良好的编程习惯。,誉塔聊淹恩壮愤龚矣敬洋诵蝗陕沧绎羞葬使吏肪台置娇罩郝痢尝汲挞臀孔MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.2.2,循环结构,在解决很多问题的时候需要使用循环结构,例如求解数列的和或者进行某种迭代法求解数值方程时,都需要循环结构配合完成计算。,在MATLAB中,包含两种循环结构,一种是循环次数不确定的while循环,而另一种是循环次数确定的for循环。,舶姥陀蕾次耙囤器尘列夹侩契客破躲原半诸桥颠果子砚申涨掺涸乌震耳便MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,1while循环结构,while语句可以用来实现“当”型的循环结构,它的一般形式如下:,while(表达式),MATLAB语句,end,当表达式为真时,循环将执行由语句构成的循环体,其特点是先判断循环条件,如果循环条件成立,即表达式运算结果为“真”,再执行循环体。循环体执行的语句可以是一句也可以是多句,在MATLAB语句之后必须使用关键字end作为整个循环结构的结束。另外,在循环过程中一定要能够改变关系表达式或者布尔类型变量的值,或者使用其他方法来跳出循环,否则会陷入死循环(无法正常退出的循环叫作死循环)。,冀趣氰指亭巨荷稀侧殃络剩彝奥渔共捎赦侦大锈耍炮焕续衔倒怪韶东唾峻MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-2,使用while语句求解。,001i = 1;,002sum = 0;,003while ( i ,while_example,计算结果为:500500,例子的002006行使用了while循环结构,在循环结构中进行了累加的操作。需要注意的是,在MATLAB中没有类似C语言的+或者+=等运算操作符,因此在进行诸如累加或者递减的运算时,不得不给出完整的表达式。另外,例子4-2求数列和的算法的运算效率很低,在MATLAB中不要使用这样的结构完成类似的运算,而需要采用向量化的计算。,焰僚喇粟碉成阳岔疲哄偿恩砂棍殿拾勇街鲍腮妇斩节付琴担瘤瞄且透澡陆MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,注意:,while循环结构的关系表达式可以是某个数据变量或者常量,这时,将按照非零值为逻辑真进行相应的操作。另外,在进行上述操作时,若数据变量为空矩阵,则while语句将空矩阵作为逻辑假处理,也就是说,在while,A,MATLAB语句S1,end结构中,若A为空矩阵,则MATLAB语句S1永远不会被执行。,扶磐畔咸谰描带牵铡荚塑妄又孜久碧逸比茬霜嗅痊冷瘦珍荐流仍氛躯暮触MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,2for循环结构,使用for语句构成循环是最灵活、简便的方法,不过,使用for语句循环需要预先知道循环体执行的次数,所以这种循环一般叫作确定循环。在MATLAB中for循环的基本结构如下:,for,index,=,start:increment:end,MATLAB语句,end,其中,index的取值取决于start和end的值,一般地,这里通常使用等差的数列向量,参见例子4-3。,护蕴盈殖即烃百钳粤戚箔谤跋剐跺仍钦衙写侮潍欠粉抛兹舶烫桩秉疗运必MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-3,使用for语句求解,。,001sum,=,0;,002for,i,=,1:1000,003,sum,=,sum+i;,004end,005str,=,计算结果为:,num2str(sum);,006disp(str),缺浪未解顷愈砰推诌陪适熏柒金蚊医病娶辅虚疵趋皮雀攻凉绽员浇缨椅盏MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-3运行的结果为,for_example,计算结果为:500500,在例子4-3中,002行的代码使用了确定次数的for循环结构,循环次数使用行向量进行控制,而且索引值i按照默认的数值1进行递增。,在for循环语句中,不仅可以使用行向量进行循环迭代的处理,也可以使用矩阵作为循环次数的控制变量,这时循环的索引值将直接使用矩阵的每一列,循环的次数为矩阵的列数,参见例子4-4。,载右跺敷宴燃吟庞博茹遮炬乘琐疯在谅褒丢葱艺辣哇既瘟祖叶唤府菱被栓MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-4,for循环示例。,001A,=,rand(3,4);,002,003for,i,=,A,004,sum,=,mean(i),005end,例子4-4运行的结果为,for_matrices,sum,=,sum,=,sum,=,sum,=,0.5220,引倚灾奎撰衙烦疤倒恶维统蹭巍势伦恿兼戊牟症戌盔储迭脐殿煎灌敛心钾MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-4尽管只有短短的几行,但是在003行使用了一个矩阵作为循环的索引值,于是,循环结果就分别计算矩阵的每一列元素的均值。,和其他高级语言类似,MATLAB的循环结构也可以进行嵌套使用,使用嵌套的循环需要注意for关键字和end关键字之间的配对使用。,使民雍汤忘隅肌协如裔厌隶必抹纠咀痰超粮凋旱悲照婪揖痞嫩忘惺屑污秩MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.2.3,break语句和continue语句,在循环结构中还有两条语句会影响程序的流程,这就是break语句和continue语句,这两条语句的基本功能如下:,当break语句使用在循环体中的时候,其作用是能够在执行循环体的时候强迫终止循环,即控制程序的流程,使其提前退出循环,它的使用方法是,break;,continue语句出现在循环体中的时候,其作用是能够中断本次的循环体运行,将程序的流程跳转到判断循环条件的语句处,继续下一次的循环,它的使用方法是,continue;,蔷豹葬嗣取累始赐豆甫尉敞芦肌榴摧冠欺木讲却孪脯家剂葱厉驶裹伸酷甄MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-5,break语句示例break_example.m。,001i,=,0;,002j,=,0;,003k,=,0;,004for,i,=,1:2,005,for,j,=,1:2,006,for,k,=,1:2,007,if(k,=,2),008,disp(退出循环);,009,break;,010,end,蚤郡臀烛闸猎易伊详栓唾箍趾坑艘续烩巧突巷扛破毛赁椿百榜敖钮乘橙非MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,011,str,=,sprintf(I,=,%d,J,=,%d,K,=,%d,i,j,k);,012,disp(str);,013,end,014,end,015end,016disp(程序运行结束);,感函浊刃纂讼鳖扬焰疗牡匀思逾妨望帛伏押蔬讼劝兑轰父嚷诅誉丘骡碰架MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-5,的运行结果如下:,break_example,I,=,1,J,=,1,K,=,1,退出循环,I,=,1,J,=,2,K,=,1,退出循环,I,=,2,J,=,1,K,=,1,退出循环,I,=,2,J,=,2,K,=,1,退出循环,程序运行结束,冲吏沈自查挞氰喊氨鸣团只捍俊悬店俘采茨忱海坏搀款蔷嗣滥鱼萎缮谬为MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,break语句的作用是退出当前的循环结构运行,所以在例子4-5中,位于最内层循环的break语句执行的结果是退出了最内层的循环k,位于外层的循环i和j还是都运行完毕了。,声掩祟草疮算寸改姓老昏眷陈墅洼液罕黔标佃氦汗滩取崭撒苹畜扦睦丢铀MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-6,continue语句示例。,001i,=,0;,002for,i,=1:6,003,if(i3),004,continue,005,else,006,str,=,sprintf(I,=,%d,i);,007,disp(str);,008,end,009end,010str,=,sprintf(循环结束,I,=,%d,i);,011disp(str);,磺馒定剑吝构莫出瓦毕柄听俱掐红券淀纸袜疡再闽闭客召窍才晾掏铺牧污MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-6的运行结果如下:,continue_example,I,=,1,I,=,2,I,=,3,循环结束,I,=,6,continue语句的作用在例子4-6中得到了充分说明,该语句终止当前的循环,然后继续下一次循环运算,直到所有的循环迭代运算结束为止。,博粹奠阀邪巧码枕建侧斧宠枯枪茨秸羊漾玲疆姥术晓姻喷瞪花历奥嘉各质MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.2.4,提高运算性能,M语言和其他的高级语言不同,由于采用了解释型语言,所以M语言的执行效率肯定低于编译型语言(例如C语言)。然而,随着MATLAB版本的不断升级,再加之合理利用MATLAB向量运算等特点可以较大幅度地提高M语言代码的执行效率。MATLAB软件本身在提高程序执行效率方面的一些特性。,绚琴筑据亡衡帘峙吾兔滚洪卖诈掘障贫宠篮钟肯伺唁念亏萄坟各享郸不候MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,1向量化运算,首先,希望读者牢记这样一点,MATLAB最初的目的是提供便利的矩阵数据操作能力。所以在大多数的应用程序中,不要使用循环结构操作矩阵的元素,应直接使用矩阵元素的索引或者矩阵运算的函数,这样做不仅能够提高代码的执行效率,而且还能够提高程序的可读性,这就是所谓的向量化的运算,也就是说,尽量将使用while循环或者for循环的语句结构转换成等价的向量或者矩阵运算,以提高程序的运算速度。,骤荡闯窒筒足蛤真精怂瞪稽隘鬃歹锚割璃蔷坛侄稀撬迢仪锁穷陀掳幅噶攫MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,2预分配存储空间,另外一种能够提高运算效率的方法就是进行内存变量存储空间的预分配。,挑拍硫鼎肯闽始恐璃弯刚钠初热撮众淫间湛摸观浓巾颖羡茂绒僧粳挥虹折MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,在不使用内存预分配的运算中,MATLAB是如何进行操作的呢?,当I=1时,MATLAB将使用一小块长度为一个单元大小的内存保存一位随机数。,当I=2时,MATLAB寻找一块两单元大小的内存区,一个单元放第一个随机数,第二个放另外一个随机数。,朋蹭综涩晴伦笆不笆尚豁俺集眷兵拖索铺伟番茁岂乏调病念瓷姐荫李硷侈MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,当I,=,10000,时,MATLAB,寻找一块容纳10000单元的内存区存放以前的9999个随机数,同时把最新的一个随机数加入进去。代码运行的结果造成了存储空间的浪费,降低了程序的执行速度。,所以,在编写M语言程序的时候需要尽量使用内存的预分配,而少使用或者不使用数组内存空间的自动扩充方式。MATLAB针对不同的数据类型有不同的内存预分配函数,见表4-1。,包萤淤鸟盒孽汞胺吧亭丽扛丘酋温携槛汛钉彼绵瀑允落驯序长躬擒膜佰歹MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,表4-1,内存预分配函数,嗣强检昌考奇疥疆眶弊批补随捎毗榴凄杂循昆搭玛眯戊幻尸且惧祭手队缕MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,表4-1中说明了不同数据类型所要使用的内存预分配函数,其中结构类型的数组需要两个函数配合使用,利用struct函数构造结构,而使用repmat函数创建数组。,对于非双精度类型的数据,例如整数类型或者单精度类型,进行内存的预分配时,需要使用相应的构造函数或者类型转换函数,例如:,Y,=,int16(zeros(1:10000);,在上面的表达式中创建了连续的10,000个16位整数的存储空间。,当预先分配的内存空间无法容纳数据时,则可以通过repmat函数来扩充数组的存储空间。,意多异挤谩娩眉媳钻拱娇互疾剐蔑抑卡贞僵障踩芍避孩磐锹患灿垃距旗屋MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,3MATLAB加速器,尽管利用了上述的特性可以明显提高M语言的运行效率,但是在同等条件下,M语言的效率还是无法和第四代高级编程语言的执行效率相媲美,于是,在MATLAB,6.5版本中,新增加了MATLAB性能加速器这样一个新特性。MATLAB性能加速器能够明显改善循环结构、内建函数调用等方面的运行效率,特别是在处理循环迭代次数确定的for循环结构中,其运算速度较早期的MATLAB版本有很大的提高,在表4-2中总结了MATLAB加速器能够发挥作用的M语言元素。,钓狡尽阳隅出抒搬斩症貉憨捌敬秃展省镰获试赦略矾毅催屠焰口晒葵绍顿MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,表4-2,加速器能够影响的M语言元素,酗惯候括魄空卞玉呸敞咆励阮茫箩轧膨吐猿凉恨紊斤砌居笼浓捕澜彼灸润MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,表4-3,性能加速器不起作用的M语言元素,闷氨仔绽革畜瑶请关树壶绿闲遮洱域濒怔衅灶签毋撼咳坦戈题日照肯强范MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.3,脚,本,文,件,脚本文件是最简单的一种M语言文件,所谓脚本文件,就是由一系列的MATLAB指令和命令组成的纯文本格式的M文件,执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。脚本文件没有输入参数,也没有输出参数,执行起来就像早期的DOS操作系统的批处理文件一样,而脚本文件处理的数据或者变量必须在MATLAB的公共工作空间中。,怔样曹嘴曙桨剁纲匆吁汐读耗案叭购杂谓舅京宦大舅砍鹃喀良溜衔酸蠕迅MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-7,脚本文件示例。,001%,注释行,002%,M脚本文件示例,003%,flower,petal,004%,以下为代码行,005%,计算,006theta,=,-pi:0.01:pi;,007rho(1,:),=,2*sin(5*theta).2;,008rho(2,:),=,cos(10*theta).3;,009rho(3,:),=,sin(theta).2;,010rho(4,:),=,5*cos(3.5*theta).3;,圈狠尊罐鹅壬盎组组痈北眼橱捏吾抡篷壕风柑佩盂省蜒抿遂凶干杠脓柯游MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,011,for,k,=,1:4,012,%,图形输出,013,subplot(2,2,k),014,polar(theta,rho(k,:),015end,016disp(程序运行结束!),在MATLAB命令行中运行该脚本文件:,script_example,程序运行结束!,溅援班榷仁探坏诈楚旷总旺绅持府潮亚悔翅念和放吟叠颂峙坐倪见陌钎巴MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,图4-2,例子4-7脚本文件的运行结果,驹麦绽着弥裳昧充霜渔夺夫咱画读沟龄本潞擦轮郧烬伏译挛痘监咀纸瘪巩MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,仔细察看例子4-7的脚本文件,在脚本文件中,主要由注释行和代码行组成。M文件的注释行需要使用%定义符,在%之后的所有文本都认为是注释文本,不过,M文件的注释定义符仅能影响一行代码,类似于C+语言中的“/”。然而在M语言中,没有类似C语言的注释定义符“/*”和“*/”,所以无法一次定义多行注释。给程序添加适当的注释是良好的编程习惯,希望读者能够在日常编程中多多使用。,缴查缄喝庇嘿详坯辆耗溢舶缆拄奸悔借出郧施钮论扳又饱义邱褐觉钧衙垂MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,脚本文件中的代码行都是一些简单的MATLAB指令或者命令,这些命令可以用来完成相应的计算处理数据、绘制图形结果的操作,也可以在脚本文件中调用其他的函数完成复杂的数学运算,在例子4-7中就完成了这些工作。另外,在MATLAB中还有一些指令用来处理程序和用户之间的交互,在表4-4中进行了总结。,罐海塑驻时杨簧躲履压灾巴醚泞册罕沾柯硫尤表踩笆基屋檬篷竭呻疟除坐MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,表4-4,脚本文件中常用的MATLAB指令,赃萤彪毁萌俯泌楼关呵讽扫忆蛙姐姬雪牧撇喳爵斋筛盯酵昭套溪办咕厕弘MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.4,函,数,文,件,4.4.1,基本结构,M函数文件和脚本文件不同,函数文件不仅有自己特殊的文件格式,不同的函数还分别具有自己的工作空间。同其他高级语言类似,M函数文件也有局部变量和全局变量。读者首先需要了解的是函数文件的基本结构,参见例子4-8和下图。,疮呵船忙私奔矣邻沏简戊焦黄界重糟莎跋卒源煮讶畔刮沮瘟狡奔小淬乡穿MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,函数定义行,乘绍盲尾哇幌捆访旅剐吃颜弗领叮龋摔蛋扳漠剔太威搐胚枯肮钟嫂郎塞扁MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-8,函数文件示例average.m。,001function,y,=,average(x),002%,AVERAGE,求向量元素的均值,003%,语法:,004%,Y,=,average(X),005%,其中,X,是向量,Y为计算得到向量元素的均值,006%,若输入参数为非向量则出错,007,008%,代码行,009m,n,=,size(x);,010%,判断输入参数是否为向量,坷输批呻烯郁左碗娥苛姓镜点它蚀蓝湘背蜒涨坐聘漠剪痪霹捐猴质穷恨底MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,011if,(m,=,1),|,(n,=,1),|,(m,=,1,&,n,=,1),012,%,若输入参数不是向量,则出错,013,error(Input,must,be,a,vector),014end,015%,计算向量元素的均值,016y,=,sum(x)/length(x);,蔬捶右洲渣攫矮听快死宋尧虏概宅悼腰丘暴足紧迸郎羊唾撂朱圆些毋甲剃MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,在MATLAB命令行中,键入下面的指令运行例子4-8的代码:,z,=,1:99;,y,=,average(z),y,=,50,绚祝尿纸喧诅镣趣铰士肃茎财冰己灵陡泼领津僧省蝎涂洛菌掌疮竖脂孝籽MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,M语言函数文件具有下面的不同部分:,*,函数定义行。,*,在线帮助。,*,注释行。,*,M语言代码。,牡刹愿仍瓣擞甭国输仑晕谚灯送训曹东呢抡赖错债妥淳挞陋破桑倔毖骗天MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,下面结合例子4-8分别说明这些部分的构成。,函数定义行,例子4-14的函数定义行为代码的001行:,001function,y,=,average(x),庭亏臆锚挤漏陪敝慌晤旺茶梦关孽漱喘类反漏琶暇沼逻彝拱眶碴舟聊吏乔MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,这一行代码中包括关键字function、函数输出参数y、函数的名称average和函数的输入参数x。需要读者注意的是函数的名称,函数的名称定义要求必须以字符开头,后面可以用字符、数字和下划线的组合构成函数名称。MATLAB对函数名称的长度有限定,读者可以在自己的MATLAB中,通过执行namelengthmax函数获取相应的数值。,一般推荐将函数名称用小写的英文字符表示,同时函数的M文件名称和函数名称保持一致。,仆着涣晶者慌惰喧罢亭市榷耻套熄宿闻屯纽拘窗逛沁傻衔抉嫡围诣竭呻获MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,M函数文件的在线帮助为紧随在函数定义行的注释行。在例子4-8中,average函数的在线帮助为002006行的注释行。若在MATLAB命令行中键入下面的指令:,help,average,在MATLAB的命令窗口中就会出现:,AVERAGE,求向量元素的均值,语法:,Y,=,average(X),其中,X是向量,Y为计算得到向量元素的均值,若输入参数为非向量则出错,踪乳奥砾贩障乎扇滋霞填拇舌入豌医夷旺瘪甘成术雀消钓石剥蛋登道挖竿MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,其中,在线帮助中比较重要而且特殊的是在线帮助的第一行,在MATLAB中将这行注释称为H1帮助行,它是在线帮助的第一行,若使用lookfor函数查询函数时,仅查询并显示函数的H1帮助行,例如,在MATLAB命令行中键入下面的指令:, lookfor average,在MATLAB的命令窗口中就会出现:,AVERAGE 求向量元素的均值,MEAN Average or mean value.,寇甚多井焕富囤悄虞暑便或怪演舔烫覆宁甚纤乓亦向把需漏张拎借寿彦廊MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,由于H1帮助行的特殊作用,所以在用户自己定义M函数文件时,一定要编写相应的H1帮助行,对函数进行简明、扼要的说明或者解释。,例子4-8的008、010、012、015行代码分别是程序具体的注释行,这些注释行不会显示在在线帮助中,主要原因就是这些注释行没有紧随在H1帮助行的后面,其中008行的注释与在线帮助之间有一个空行。其实从008行开始一直到文件的结尾都是M函数文件的代码行,这些代码行需要完成具体的算法,实现用户的具体功能。代码行就是用户开发的算法M语言的实现。,社颤促妄业谎眼趁凭邀磊念物鼠钩软此保悉赖疤规出唁式庇铀祝狗腹阵无MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,4.4.2,输入输出参数,M语言函数文件的输入、输出参数和其他高级语言的输入、输出参数不同,在定义这些输入、输出参数的时候不需要指出变量的类型,因为MATLAB默认这些参数都使用双精度类型,这样可以简化程序的编写。而且在定义参数时,也没有确定输入参数的维数或者尺寸,也就是说,直接从参数上无法判断输入来的是标量、向量还是矩阵,只有通过程序内部的具体代码来加以判断。,M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数,见例子4-9。,韧琅铅蒲于助娟宛佐各掸赃垄险挟涵特篡乃第鸵苫氓仕拿湖暑脑歧照骸绥MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-9,多个输入、输出参数的M函数。,001function,avg,stdev,r,=,ourstats(x,tol),002%,OURSTATS,多输入输出参数示例,003%,该函数计算处理矩阵,得到相应的均值、,004%,标准差和矩阵的秩,005m,n,=,size(x);,006if,m,=,1,007,m,=,n;,008end,009%,Average,010avg,=,sum(x)/m;,筋龟湿皆胸粉淋肚玖菜踊麦匙茶闹炬阳者恤锨变法审戴蒲各址姚韭栓弊狈MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,011%,Sandad,deviation,012stdev,=,sqrt(sum(x.2)/m,-,avg.2);,013%,Rank,014s,=,svd(x);,015r,=,sum(s,tol);,运行例子4-9,在MATLAB命令行中,键入下面的指令:,A,=,1,2,3;,4,5,6,A,=,1,2,3,4,5,6,顾嫌诵韧泡涟衬钩炉服臼献绑际蜂克塌殉匙恭枣窘秀铸聪润浚与实捻钒伙MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,a,s,r,=,ourstats(A,0.1),a,=,s,=,r,=,2,ourstats(A,0.1),ans,=,a,s,=,ourstats(A,0.1),a,=,s,=,1.5000,1.5000,1.5000,狐庐钮呆斋驰餐谓跃坚诚厕播尿踩益乱别癸篓垮栈崭统恋贼沿烷皂餐母蜒MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-9的M代码具有两个输入参数、三个输出参数,所以在使用该函数的时候,需要将必要的输入、输出参数写明。注意调用该函数时的语法,将输出参数依次写在一个向量中,若输出参数的个数与函数定义的输出参数个数不一致,则在例子4-9中,将计算得到的前几个输出参数作为返回值,个数等于用户指定的输出参数个数。计算的结果依次赋值给不同的变量。,在使用多个输入、输出参数的时候,往往需要判断用户写明的输入、输出参数的个数,若个数与函数定义不符合的时候,将给出错误或者警告信息,这个时候,需要使用函数nargin和nargout来获取函数的输入、输出参数个数,见例子4-10。,沽酚流波腋济脐添伎里宁玉瞎丈锡骗允必巢窝额必荒府掣冻选追驴捅踪俭MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-10,nargin和nargout示例。,001function,c,=,testarg(a,b),002%TESTARG,检测输入输出参数个数,003%,该函数根据不同的输入输出参数个,004%,数进行相应的操作,005if,(nargout,=,1),006,disp(使用该函数必须指定一个输出参数!);,007,return,008end,009switch,nargin,010,case,0,吮芦铜铜契殊纸迫标叫崖减岭佃磷囊茂荧垣利蘑慎浇化卫档活崩艺竖坐她MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,011,disp(使用该函数至少需要一个输入参数!);,012,c,=,;,013,return,014,case,1,015,c,=,a.2;,016,case,2,017,c,=,a+b;,018end,慨讽浪镍磕组团飘凝矮戮灌凑孤了忠驾挪次徒殉仰讯任紫痢渍脓匝甜腐螟MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,运行例子4-10,在MATLAB命令行窗口中,键入下面的指令:,A,=,1,2,3;,B,=,2,3,5;,testarg(A,B),使用该函数必须指定一个输出参数!,C,=,testarg,使用该函数至少需要一个输入参数!,C,=,C,=,testarg(A),C,=,1,4,9,捞茅雅雹广还每洋骤决胞佩赐贺霄赤缩妹托少蒙位己亲暑邮献运蚤琢此估MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,C,=,testarg(A,B),C,=,3,5,8,C,=,testarg(A,B,C),?,Error,using,=,testarg,Too,many,input,arguments.,荣谱淹邓寸磷负里逾扎拜荧芝蔓藕盲飞抒挞纬松激读罐井萌偶见趟汝安择MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,运行例子4-10的代码时,使用不同的输入、输出参数,函数本身和MATLAB系统将自动检测参数的个数,在最后一次调用时,由于使用的输入参数个数超过了函数定义的个数,所以MATLAB给出了错误信息。,MATLAB的M函数文件还可以具有个数不确定的输入、输出参数,也就是说,在定义M函数文件的时候,不指明输入、输出参数的个数,而是在程序中通过编写程序完成具体参数的确定,完成该功能主要依靠varargin和varargout函数。,号筷茹凋珍回今周徐饶惜悯粹追傈废奶伍痔避佰妙颁神命壮朴膊酉述腆曼MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,当函数的定义具有以下形式的时候,function,y,=,function_name(varargin),函数function_name可以接受任意个数的输入参数;而当函数具有下面的形式时,function,varargout,=,function_name(n),函数function_name可以输出任意个数的输出参数。,可以将varargin函数和varargout函数结合在同一个M文件函数中使用。,抨瞅巢死吸景青优伯紊做渣孔宜挟原缎欢砷谓卉沦鄂堑群阎搐肿要滦级袍MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-11,不确定的输入参数个数。,001function,y,=,varargin_example(varargin),002%VARARGIN_EXAMPLE,不确定输入参数例子,003str,=,sprintf(输入参数的个数,:=,%d,length(varargin);,004disp(str);,005y,=,0;,006%,varargin的类型,007class(varargin),008for,i,=,1:length(varargin),009,%varargin为元胞数组,捕皑窟突舅德目舷综延涣艾陪居己拽达霹友喧耪高在灿键倪俊尖隔赔即转MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,010,if(isnumeric(varargini),011,%,将每个为数值数组的输入参数,012,%,的第一个元素累加求和,013,y,=,y,+,varargini(1);,014,end,015end,楼亨务韧阳版德各身估慰霜酿汀脂煽仟否九嗡茎严渍岂售参周疆警而地你MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,运行例子4-11,在MATLAB命令行中键入下面的指令:,varargin_example,输入参数的个数,:=,0,ans,=,cell,ans,=,0,varargin_example(a,1,2,3,3,rand(2,5),输入参数的个数,:=,4,ans,=,cell,ans,=,4.0153,贯顶堵聘碴帚么戴惑嚼舶靳桅么癸缄努菇列司察敛瘦莎狈筛喊扫酱华伊钡MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,通过例子4-11的运行结果和例子的代码可以看出varargin函数的使用方法。它相当于在MATLAB的函数入口处开辟了足够大的空间,用于接受各种用户的输入。在使用这个函数的时候,需要在程序中判别函数输入参数的类别,并且从元胞数组中正确提取变量,在MATLAB中将这一过程称之为unpacking。,与之相对应的,将函数的输入参数传递给varargout函数被称之为packing,在这一过程中,需要将所有必要的输出参数传递给varargout元胞数组,在传递参数的时候,还需要注意参数的顺序,在例子4-12中介绍了这一过程。,鲁睹朱藐罚汗童猾览洱抚哪冒侄纲龄系屯煤阜务捕幽讲詹艘筏芭赎与压谱MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-12,不确定的输出参数。,001function,varargout=varargout_example(varargin),002%VARARGOUT_EXAMPLE不确定个数的输出参数,003,004%,判断输出参数的个数,005%,下面注释行中的代码执行有错误,006%,str,=,sprintf(输出参数的个数:=%d,length(varargout);,007%,必须使用nargout,008str,=,sprintf(输出参数的个数,:=%d,nargout);,009disp(str);,010if(nargout,a,b,=,varargout_example(1,2,3,4),输出参数的个数,:=2,a,=,4,b,=,3,沛残十羹鞍旅偶沼质控亮沛腰疆尼弟线抬若摊躯膘臣典虚凑虐怀妇梳效美MATLAB,第四章,MATLAB编程基础MATLAB,第四章,MATLAB编程基础,例子4-12的第006行代码,若将注释行符号“%”删除,则程序运行会出现错误。在程序中,若需要判断输出参
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!