您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第一讲MATLAB编程.
1.M-script文件的编写新建M文件编写指令调试运行一般过程用户在编制此类文件时,只需把所要执行的命令按行编辑到指定的文件中,程序运行时,MATLAB按行执行这些指令。MATLAB编程几点规则:●建立好的书写风格,保持程序的可读性。●m为文件的扩展名,在低版本的MATLAB中还要注意文件名不超过8位,文件名和变量的命名规则相同。●以符号%引导的行是注释行、不可执行,可供heIp命令查询;●不需要用end语句作为M文件的结束标志;M文件及函数的编写【例1】用循环求解s=0;fori=1:100s=s+i;ends=0;i=1;whilei=100s=s+i;i=i+1;end不用循环的方法:M文件及函数的编写s=sum(1:100)【例2】用循环求解求最小的m,s=0;i=0;whiles=10000i=i+1;s=s+i;end[s,i]M文件及函数的编写iflogicalexpressionstatementsendiflogicalexpressionstatements1elsestatements2endiflogicalexpression1statements1elseiflogicalexpression2statements2elsestatements3endif-else-end结构M文件及函数的编写score=input('Pleaseinputyourscore:');ifscore=0&score60disp('Youmustworkharder!');elseifscore=60&score80disp('Notbad!');elseifscore=80&score90disp('Great!');elseifscore=90&score=100disp('Excellent!');elsedisp('Areyoukidding?');end【例4】演示if的程序,检测输入数据.M文件及函数的编写【例5】生成一个在[0,6]上的随机数,以此作为掷骰子出现的点数,出现1,3,5显示奇数,出现2,4,6显示偶数,出现0则显示错误.disp('Playdice,please!')%提示输入信息Num=round(6*rand)%利用round函数产生在[0,6]上服从均匀分布的随机数switchNumcase{1,3,5},disp('Odd')case{2,4,6},disp('Even')otherwise,disp('Youareout!')end3.交互式输入(1)用户输入提示命令inputinput命令用来接收用户从键盘输入数据、字符串或表达式,并接收输入值。其常用格式:运行此命今后,将给出文字提示,并等待键盘输入。R=input(‘whatisyourname?’,’s’)运行此命令后,MATLAB将等待输入,并把输入当做字符串,赋给变量R。R=input(‘Howmanyapples’)M文件及函数的编写(3)中断命令breakbreak语句常常用在循环语句中。通过使用break语句,可不必等待循环的自然结束,而根据循环只设的条件来判断是否跳出循环。(4)等待键盘输入keyboard使程序进入暂时等待状态,但并没退出执行,可以修改参数,和运行其他指令等。(5)显示文字或数组dispM文件及函数的编写如下两个方法都能生成相同的数组y,但方法2的效率要高.方法1:按循环生成数组yfort=1:5000y(t)=sin(2*pi*t/10);end方法2:利用数组运算生成数组y,效率比方法1要优.t=1:10000;y=sin(2*pi*t/10);生命很短暂,少做For/while循环…程序编写时尽量用对数组或矩阵的整体运算!!!4.MATLAB函数的编写函数是MATLAB编程的主流方法除了函数外,还可以采用M-script文件M-script适合于小规模M文件及函数的编写(1)MATLAB语言的函数的基本结构若一个function作为一个M文件存储,切记其存储文件名应和函数名一样!(1)函数定义行(关键字function)function[out1,out2,..]=funcname(in1,in2,..)注释段输入返回变量的检测函数体语句•输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保留的变量来给出。(2)第一行帮助行,以(%)开头,作为lookfor指令搜索的行M文件及函数的编写(3)函数体说明及有关注解以(%)开头,用以说明函数的作用及有关内容(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。M文件及函数的编写【例6】前面的要求,m,100001.写好程序,存成findsum.m文件function[s,m]=findsum(k)s=0;m=0;while(s=k)m=m+1;s=s+m;end2.在commandwindow中调用:[s,m]=findsum(10000)M文件及函数的编写【例8】函数的递归调用:阶乘MATLAB函数为:functionk=my_fact(n)ifn1k=n*my_fact(n-1);elseifn==0|n==1k=1;elseerror('Uinputawrongparameter!')end2.在commandwindow中调用:num=my_fact(11)M文件及函数的编写1.写好程序,存成my_fact.m文件prod(1:11)使用tic和toc函数,测试一下该函数的运行效率。显式程序运行的时间。tic;num=my_fact(100);toctic;num=prod(1:100);toc函数的函数名与存储名要一致。函数名首字符必须为字母。其后可为字母数字下划线等。长度小于31个字符。不推荐在同一文件中,写多个函数。建议每个函数单独写成一个文件,由主程序调用,主程序不要写成函数形式。函数编写注意事项:M文件及函数的编写●执行错误的发生是由于在程序运行过程中,出现溢出或死循环等引起的,这些错误都与程序本身有关,并且较难发现解决。(1)M文件错误的种类M文件一般有语法错误和执行错误两种。●语法错误发生在M文件程序代码的解释过程中,一般是由函数参数输入类型有误或矩阵运算阶数不符等引起的。5程序调试M文件及函数的编写避免出现NaN、Inf或空矩阵等;在可能出现上述异常数值的地方提供控制语句来识别;识别函数有isnan、isinf、isempty等。处理异常的常用方法:M文件及函数的编写(2)调试过程在M文件中设置断点.单步运行,通过输出信息和workspace的变量来查看程序是否运行正常.巧用“;”,运行到适当的地方输出信息,帮助分析。改变输入信息,查看出错症结使用tic,toc,cputime函数查看文件运行耗时及各部分性能,以便化简。M文件及函数的编写MATLAB的程序调试方法MatLab在执行程序有错时会自动终止运行,并在其命令窗口(MatlabCommandWindows)中给出相应错误的提示信息同时MATLAB的编辑器(Editor)具有程序调试功能,可用调试命令用来检查程序的正确性单步执行断点间执行终止调试(1)在程序可疑处设置断点;(2)执行程序;(3)检查程序运行至断点处变量当前值(4)在程序中一步步执行(5)结束调试状态。(6)取消断点。执行程序之后,程序会停在断点处。并出现箭头.同时调试工具栏由灰色变为深色调试程序步骤:6程序设计的优化虽然MATLAB程序语言高度集成,但由于MATLAB属于解释型语言,在执行效率方面还是存在一些不足,因此,如何优化程序,特别是在大型的运算与仿真中,是一个很重要的话题。M文件及函数的编写(1)以矩阵作为操作主体循环运算是MATLAB语言的最大弱点。在程序设计时应当尽可能避免循环运算,尽量用向量化的运算来代替循环操作多重循环,将执行次数少循环的放在外环;在MATLAB编程过程中应当强调对矩阵本身整体的运算,避免对矩阵元素的操作。绝大多数的循环运算是可以转换为向量运算;尽量使用内部函数;M文件及函数的编写例1下面给出一个循环的例子:用循环写代码:i=0;forn=0:0.1:100i=i+1;y(i)=cos(n);end向量化处理n=0:0.1:100;y=cos(n);执行效率提高300倍!举些简单的例子,说明c语言和matlab的区别:例2找出数组A=[2578;47-19;3501;210113;7968]中,所有大于6的元素及其下标[X,Y]=find(A6);%找出下标,X存储行,Y存储列;B=A(A6);%找出所有大于6的元素;高效程序:低效程序:[X,Y]=size(A);num=0;fori=1:Xforj=1:YifA(i,j)6num=num+1;XX(num)=i;YY(num)=j;data(num)=A(i,j);endendend虽然在MATLAB语言中没有规定变虽使用时必须预先定义,但是对于未定义的变量,如果操作过程中出现越界赋值时,系统将不得不对变量进行扩充,这样的操作大大降低了程序运行的效率,所以,对于可能出现变量维数不断扩大的问题,应当预先估计变量可能出现的最大维数,进行预定义。(2)数据的预定义M文件及函数的编写例3数据预定义i=0;forn=0:0.1:100i=i+1;y(i)=cos(n);endy=zeros(1000);i=0;forn=0:0.1:100i=i+1;y(i)=cos(n);end(3)充分利用matlab中已经集成的函数编写函数functionk=my_fact(n)ifn1k=n*my_fact(n-1);elseifn==0|n==1k=1;elseerror('Uinputawrongparameter!')end在Matlab窗口中调用my_fact(100)或prod(1:100)并比较执行时间(相差约30倍).对存储的合理操作及管理也会提高程序运行的效率。MATLAB语言提供了一系列的函数用以管理内存。函数名说明clear从内存中清除所有变量及函数pack重新分配内存quit退出MATLAB环境,释放所有内存save把指定变量存储至磁盘load从磁盘中调出指定变量(4)内存的管理M文件及函数的编写(5)节约内存M文件及函数的编写避免生成大的中间变量,并删除不再需要的临时变量。当使用大的矩阵变量时,预先指定维数并分配好内存,避免每次临时扩充维数。当程序需要生成大量变量数据时,可以考虑定期将变量写到磁盘,然后清除这些变量。当需要这些变量时,再重新从磁盘加载。当矩阵中数据极少时,将全矩阵转换为稀疏矩阵。(6)考虑转换为C-MEX当必须使用耗时的循环时,可以考虑将循环体中的语句转换为C-MEX。C-MEX是将M文件通过MATLAB的编译器转换为可执行文件,是按照MEX技术要求的格式编写相应的程序,通过编译连接,生成扩展名为.dll的动态链接库文件,可以在MATLAB环境下直接执行。这样,循环体中的语句在执行时不必每次都解释(interpret)。一般来说,C-MEX文件的执行速度是相同功能的M文件执行速率的20~40倍。编写C-MEX不同于M文件,需要了解MATLABC-MEX规范。幸运的是MATLAB提供了将M文件转换为C-MEX的工具。转换为C-MEX的步骤安装编译器:(1)启动Matlab,运行“mex-setup”,按照菜单提示选取MSVC。它将配置MEX使用MSVC为默认的编译器(创建C-MEX文件必需),并安装MatlabAdd-in所需文件到MSVC目录。(2)在Matlab环境下运行“mbuild-setup”,按提示选取MSVC。它将配置使用MSVC为默认的
本文标题:第一讲MATLAB编程.
链接地址:https://www.777doc.com/doc-2117253 .html