《MatlabM文件编程.ppt》由会员分享,可在线阅读,更多相关《MatlabM文件编程.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 M文件及程序调试本章详细讲解利用M语言进行编程的方法讲述的主要内容:主程序文件函数文件M文件的调试 (1 1)指令驱动模式)指令驱动模式 即在即在MATLABMMATLABM命令行窗口下用户输入单行指令时,命令行窗口下用户输入单行指令时,MATLABMATLAB立即处理这条指令,并显示结果,这就立即处理这条指令,并显示结果,这就是是MATLABMATLAB命令行方式。命令行方式。缺点:缺点:命令行方式程序可读性差,而且不能存命令行方式程序可读性差,而且不能存储,储,当处理复杂问题和大量数据时很不方便。当处理复杂问题和大量数据时很不方便。(2 2)M M文件模式文件模式 将将MATLABMAT
2、LAB语句构成的程序存储成以语句构成的程序存储成以m m为扩展名的为扩展名的文件,然后再执行该程序文件,这种工作模式文件,然后再执行该程序文件,这种工作模式称为程序文件模式。称为程序文件模式。MATLAB的工作模式的工作模式 M语言文件可以分为主程序文件和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的。M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m。MATLAB提供了meditor编辑器编辑M文件注意:(1)不可用汉字命名(若用汉字命名虽然可以打开M文件,但是编译运行时会出错);(2)文件名不可与MATLAB内置函数 重名;(3)文件名不可以以数字命名。主程序
3、文件(脚本文件)主程序文件(脚本文件)n n相当于C语言的主函数n n主程序文件没有输入参数和输出参数。n n执行主程序文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。n主程序文件主要由注释行和代码行组成:n M文件的注释行需要使用%,定义符注释定义符仅能影响一行代码n程序执行的结果将显示于命令窗中函数文件(相当于C语言的子函数)函数文件供主程序文件调用,必须指定函数名和函数文件供主程序文件调用,必须指定函数名和输入输出参数,并由主程序文件中语句序列给出输入输出参数,并由主程序文件中语句序列给出一系列操作,从而生成所需数据一系列操作,从而生成所需数据函数文件格式一般包括以下部分
4、:函数文件格式一般包括以下部分:(1 1)函数定义行:表明该)函数定义行:表明该m m文件包含一个函数,文件包含一个函数,且为其定义且为其定义函数名、输入参数和输出参数函数名、输入参数和输出参数函数名、输入参数和输出参数函数名、输入参数和输出参数 function y=meanfunction y=mean(x x)(2 2)帮助信息:处在文件中的第二行,应该反)帮助信息:处在文件中的第二行,应该反映该映该m m文件概括性信息文件概括性信息%求平均值求平均值n nfunction y=function y=mean(xmean(x)n n%求平均值求平均值(3 3)函数体:函数所用计算过程和输
5、入输出参数赋值的)函数体:函数所用计算过程和输入输出参数赋值的MATLABMATLAB代码;代码;这里可以为这里可以为调用函数、流程控制、交互式输入输出、计算、调用函数、流程控制、交互式输入输出、计算、赋值赋值等。等。m,nm,n=size(xsize(x););if m=1 if m=1 y=y=sum(x)/nsum(x)/n;else else y=y=sum(x)/msum(x)/m;%;%把每一列做平均值运算把每一列做平均值运算 endend 函数文件例函数文件例1:求均值:求均值主程序文件调用主程序文件调用y=mean(x)的方法的方法 clear;A=1,2;3,4B=mean(
6、A)help mean 则在命令窗显示mean函数注释的帮助信息函数文件例2:比较两个数大小 function function nummax(a,bnummax(a,b)if(aif(a=0|b=0)=0|bb ab fprintf(thefprintf(the large number is%large number is%f,af,a););elseifelseif ab a A=1 2 3;4 5 6 A=1 2 3;4 5 6A=A=1 2 3 1 2 3 4 5 6 4 5 6 a,s,r=a,s,r=ourstats(Aourstats(A)a=a=2.5000 3.5000 4
7、.5000 2.5000 3.5000 4.5000s=s=1.5000 1.5000 1.5000 1.5000 1.5000 1.5000r=r=2 2 a,s=a,s=ourstats(Aourstats(A)a=a=2.5000 3.5000 4.5000 2.5000 3.5000 4.5000s=s=1.5000 1.5000 1.5000 1.5000 1.5000 1.5000输入输出参数(续)a=ourstats(A)a=2.5000 3.5000 4.5000 调用该函数时,将输出参数依次写在一个向量中,若输出参数的个数与函数定义的输出参数个数不一致时,将计算得到的前几个输
8、出参数作为返回值,若输出参数的个数等于指定的输出参数个数时,计算结果依次赋值给不同的变量。子函数应用例子函数应用例子函数应用例子函数应用例1 1 1 1functionavg,medfunctionavg,med=newstats(unewstats(u)%)%主函数主函数%NEWSTATS%NEWSTATS计算均值和中间值计算均值和中间值n=length(u);n=length(u);avgavg=mean(u,n)mean(u,n);%;%调用子函数调用子函数med=med=median(u,n)median(u,n);%;%调用子函数调用子函数function a=mean(v,n)%f
9、unction a=mean(v,n)%子函数子函数%计算平均值计算平均值a=sum(v)/n;a=sum(v)/n;function m=median(v,n)%function m=median(v,n)%子函数子函数%计算中间值计算中间值w=w=sort(vsort(v);%);%从小到大排序从小到大排序if rem(n,2)=1if rem(n,2)=1 m=w(n+1)/2);m=w(n+1)/2);elseelse m=(w(n/2)+w(n/2+1)/2;m=(w(n/2)+w(n/2+1)/2;endend在函数文件中可以包含多个函数,其中第一个函数称为主函数,在函数文件中可以
10、包含多个函数,其中第一个函数称为主函数,在函数文件中可以包含多个函数,其中第一个函数称为主函数,在函数文件中可以包含多个函数,其中第一个函数称为主函数,其函数名与文件名相同,在其函数名与文件名相同,在其函数名与文件名相同,在其函数名与文件名相同,在M M M M函数文件中的其他函数称为子函数,函数文件中的其他函数称为子函数,函数文件中的其他函数称为子函数,函数文件中的其他函数称为子函数,它只能由这一函数文件中的主函数或其他子函数引用它只能由这一函数文件中的主函数或其他子函数引用它只能由这一函数文件中的主函数或其他子函数引用它只能由这一函数文件中的主函数或其他子函数引用子函数子函数子函数子函数:
11、相当于相当于相当于相当于C C语言中函数的递归调用语言中函数的递归调用语言中函数的递归调用语言中函数的递归调用使用使用globalglobal关键字创建全局变量时有三种情况关键字创建全局变量时有三种情况(1 1)若声明为全局的变量在当前空间和全局空间都)若声明为全局的变量在当前空间和全局空间都不存在,则创建一个新的变量,然后为这个变量不存在,则创建一个新的变量,然后为这个变量赋值为空数组,该变量同时存在于局部工作空间赋值为空数组,该变量同时存在于局部工作空间和全局工作空间和全局工作空间(2 2)若声明为全局的变量已经存在与全局空间中,)若声明为全局的变量已经存在与全局空间中,则不会在全局工作空
12、间创建新的变量,其数值同则不会在全局工作空间创建新的变量,其数值同时赋值给局部工作空间中的变量时赋值给局部工作空间中的变量(3 3)若声明为全局的变量存在于局部工作空间中,)若声明为全局的变量存在于局部工作空间中,而全局工作空间不存在,则系统会提示一个警告而全局工作空间不存在,则系统会提示一个警告信息,同时将局部的变量信息,同时将局部的变量“挪挪”到全局工作空间到全局工作空间中中局部变量和全局变量全局变量和局部变量实例全局变量和局部变量实例n n函数文件:function y=add3(x)global c d;%切记:声明两个或两个以上全局变量时,切记:声明两个或两个以上全局变量时,变量之间
13、用空格隔开,不可用逗号隔开变量之间用空格隔开,不可用逗号隔开 y=x+3;c=x;d=y;主程序文件:clear;global c d;global c d;c=0;c=0;d=0;d=0;a=5;a=5;b=add3(a);b=add3(a);c=c+1c=c+1d=d+1d=d+1这类变量在这类变量在MATLABMATLAB中被声明为中被声明为persistentpersistentpersistentpersistent这类变量在函数退出时不被释放,当函数再一次这类变量在函数退出时不被释放,当函数再一次被调用时,变量保留上次退出时的值被调用时,变量保留上次退出时的值保留变量的特征保留变量
14、的特征(1 1)变量仅能在声明变量的函数内使用,其他)变量仅能在声明变量的函数内使用,其他函数不能直接使用保留变量函数不能直接使用保留变量(2 2)函数执行退出后,)函数执行退出后,MATLABMATLAB不清除保留变量不清除保留变量占用的内存占用的内存(3 3)当函数被清除或者重新编辑后,保留的变)当函数被清除或者重新编辑后,保留的变量被清除量被清除保留变量 function y=function y=persistent_example(xpersistent_example(x)%PERSISTENT_EXAMPLE%PERSISTENT_EXAMPLE 保留变量使用示例保留变量使用示例
15、 for i=1:xfor i=1:x y=y=myfunmyfun;end end function y=function y=myfunmyfun%子函数子函数%persistent%persistent关键字的使用关键字的使用 persistent count;persistent count;%count%count记录函数调用的次数记录函数调用的次数 if(if(isempty(countisempty(count)count=1;count=1;else else count=count+1;count=count+1;end end strstr=sprintfsprintf(第
16、第%d%d次调用该函数次调用该函数,count);,count);disp(strdisp(str););y=count;y=count;保留变量实例 persistent_example(1)persistent_example(1)第第1 1次调用该函数次调用该函数ansans=1 1 persistent_example(3)persistent_example(3)第第2 2次调用该函数次调用该函数第第3 3次调用该函数次调用该函数第第4 4次调用该函数次调用该函数ansans=4 4保留变量在MATLAB命令行中键入指令:clear all则所有的变量都会被清除 persistent
17、_example(3)第1次调用该函数第2次调用该函数第3次调用该函数ans=3 M文件调试M M文件的调试文件的调试可以在文件编辑器中进行可以在文件编辑器中进行 M M语言的文件编辑器不仅仅是一个文件编辑器,还是语言的文件编辑器不仅仅是一个文件编辑器,还是一个可视化的调试开发环境一个可视化的调试开发环境可以在命令行中结合具体的命令进行可以在命令行中结合具体的命令进行M文件调试应用程序的错误应用程序的错误 语法错误语法错误 包括词法或者文法的错误包括词法或者文法的错误 运行时的错误运行时的错误 指程序运行过程中得到的结果不是用户需要的结果指程序运行过程中得到的结果不是用户需要的结果程序的调试是
18、在程序无法得到正确结果时进行程程序的调试是在程序无法得到正确结果时进行程序修正的唯一手段序修正的唯一手段 M M文件是一种解释型语言,只有在运行过程中才能发现文件是一种解释型语言,只有在运行过程中才能发现应用程序的错误应用程序的错误M文件调试M M语言文件编辑器提供语言文件编辑器提供BreakpointsBreakpoints菜单进行程序调试菜单进行程序调试M文件调试BreakpointsBreakpoints菜单中的命令用来设置各种断点,只有菜单中的命令用来设置各种断点,只有设置了断点的应用程序才能进行调试设置了断点的应用程序才能进行调试 提供的自动断点提供的自动断点 Stop if ErrorStop if Error Stop if WarningStop if Warning Stop if Stop if NaNNaN or or InfInf Stop if All ErrorsStop if All Errors 自动断点可以在程序中设置,当程序运行过程中发生了错误自动断点可以在程序中设置,当程序运行过程中发生了错误或警告,则程序运行中断,进如调试状态或警告,则程序运行中断,进如调试状态