matlab函数文件和脚本文件_第1页
matlab函数文件和脚本文件_第2页
matlab函数文件和脚本文件_第3页
matlab函数文件和脚本文件_第4页
matlab函数文件和脚本文件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章脚本文件和函数文件编辑课件本节内容掌握脚本文件和函数文件的区别掌握函数文件的编写和调用掌握M文件的调试方法掌握文件的翻开和关闭编辑课件§1M文件-脚本文件脚本文件只是一串按照用户意图排列而成的MATLAB指令集合,即只是简单命令的叠加。它没有输入参数,也没有输出参数。它运行后产生的变量都是全局变量,均驻留在workspace中。只要用户不使用指令clear加以去除,或MATLAB指令窗不关闭,这些变量将一直保存在根本工作空间中。编辑课件例:计算小于任意自然数n的fibonnaci数。运行文件(F5/Debug|Run〕编辑课件函数文件

函数文件是一种特殊类型的运行在自己独立的工作空间的M文件,通过输入形参表接收数据,通过输出形参返回结果到调用文件。function[输出形参表]=fname(输入形参表)%H1注释行%其他注释行……〔可执行代码〕……(return)编辑课件以function开头的一行为引导行,是函数定义语句,表示该M文件是一个函数文件。帮助文本的首行〔H1行〕:用于help帮助使用和lookfor搜索帮助文本:指H1行之后到函数体之前的注释行。包括函数的意义、各参数的意义、调用格式以及程序的作者、日期等。函数体是函数的执行代码,是文件主要局部。注释:以%开头,可出现在程序中任意一行,用绿色表示。编译时会被忽略,不会影响程序运行速度。编辑课件例:编写函数计算两点之间的距离。编辑课件当函数的输出参数多于一个时,应该用方括号括起来,并以逗号隔开;传递给函数的变量不必与函数定义行中的参数同名;函数和文件的命名规那么与变量命名规那么相同;假设保存的文件名与函数名不同,那么在调用时必须使用文件名。建议:函数名与文件名应一致(系统默认)本卷须知编辑课件函数文件运行时,MATLAB会专门为其开辟一临时工作空间〔函数空间〕,所有变量都存放于此。文件运行完毕后,该临时空间以及所有中间变量就立即被去除;函数空间随函数文件的调用而产生,随调用而结束;函数文件的变量除特别声明外均是局部变量编辑课件函数运行-调用注:1〕函数调用时,先将实参传递给相应的形参,实现参数传递,然后再执行函数的功能。2〕各实参出现的顺序、个数应与形参定义的顺序和个数一致,否那么会出错。函数文件运行不能选中菜单Run,而是调用。[输出实参表]=函数名〔输入实参表〕

函数调用的一般格式编辑课件编辑课件脚本文件和函数文件的区别相同:扩展名都是.m,可用文件编辑器编写不同:1〕脚本文件无输入、输出参数;2〕函数文件与指令空间只能通过输入参数和输出参数通信,中间变量不出现;3〕脚本文件产生的变量都是全局变量,存放在根本工作空间中;而函数文件产生的中间变量存放在临时工作空间中,它随函数的调用结束而删除;4〕运行方式不同。编辑课件1)以ffib.m为名存盘2)MATLAB命令窗口输入命令:>>ffib(1000)即可求小于1000的Fibonacci数。例:编写函数求小于任意自然数n的fibonnaci数。编辑课件递归调用:函数调用其本身functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*nendfori=1:10fac(i)=factor(i);endfac翻开文本编辑器编写函数文件factor.m新翻开一文件编辑器,在编写的脚本文件中调用该函数文件factor.m编辑课件§2函数操作参数值的传递编辑课件编辑课件函数参数数目的可调性nargin/nargout:用于检查被调用函数的输入/输出参数的数目-nargin:实际输入参数的个数-nargout:实际输出参数的个数在函数体内确定输入输出参数后可以用条件语句确定需要执行的操作编辑课件编辑课件输入/输出参数的可变性varagin/varargout:输入/输出参数列表,参数是以单元数组的形式进行传输functiontest(varargin)disp(['narginis'num2str(nargin)]);forv=1:numel(varargin)disp(['varargin{'num2str(v)'}is'class(varargin{v})]);endtest(1,'a',uint8(32));narginis3varargin{1}isdoublevarargin{2}ischarvarargin{3}isuint8编辑课件错误处理error:中断函数并显示出错误信息;warning:错误不是致命的,故继续执行函数并显示出警示信息lasterror:返回最后发生的错误的相关信息lastwarning:返回最后发生的错误的警告信息编辑课件编辑课件编辑课件局部变量和全局变量局部变量:仅存在于函数空间内部的中间变量,影响范围仅限于函数本身;全局变量:在脚本文件或根本工作空间中定义,它可作用于整个MATLAB工作空间,所有函数都可以对其进行修改和存取;在函数内访问全局变量,必须首先在函数内用global定义,而后才可以使用编辑课件其他函数类型匿名函数的格式:

fhandle=@(逗号分隔的参数列表)表达式内联函数的格式:

f=inline(表达式)创立内联表达式,假设不指出变量,用x作为自变量查看内联函数的内容

formula(f)编辑课件函数句柄定义方法-利用@符号-利用转换函数str2func作用-使函数调用像变量调用一样方便-可迅速获得同名重载函数的位置、类型-可以更大范围内调用子函数和私有函数-提高软件征用性和函数调用速度编辑课件[y1,y2,…]=feval(FH,arg1,arg2,…)

-执行函数句柄FH指定的计算编辑课件§3文件操作文件的翻开fid=fopen(文件名,‘翻开方式’〕其中:fid是存储的文件句柄,它是该数据文件的唯一标识,其值大于0表示文件翻开成功;文件名名用字符串形式表示;翻开方式有r(只读)、w(只写)、a(追加)和r+(可读可写)。编辑课件文件的关闭sta=fclose(fid〕其中:sta表示关闭文件操作的返回值,假设关闭成功,返回0;否那么返回1。假设要关闭所有已翻开的文件,用fclose(‘all’).‘r’只读方式翻开,表示该文件已存在;’r+’读写方式翻开文件,翻开后先读后写;‘w’翻开后写入数据,更新文件;’a’在翻开的文件末端添加数据;’b’以二进制格式翻开,系统的默认形式编辑课件文件的读和写

fwrite是按照指定的数据精度将矩阵中的元素写入到文件中;fread用于读取二进制文件的数据,并将数据存入矩阵中。编辑课件

fwrite按照指定的数据精度将矩阵中的元素写入到文件中A:用来存放写入文件的数据;

precision:数据精度,char/int/double/float等;

count:返回所读取的数据元素个数;

size:数据A的尺寸,N表示读N个元素到一个列向量,inf表示读取整个文件,[M,N]表示读数据到M×N矩阵中,数据按列存放;

count=fwrite(fp,A,precision)[A,count]=fread(fp,size,precision)编辑课件a=[123456789];fp=fopen(‘d:\test.bin’,’wb’)%以二进制数据写入方式翻开文件%fp=3其值大于0,表示翻开成功fwrite(fp,a,’double’)%ans=9表示写入了9个数据fclose(fp)%ans=0表示关闭成功编辑课件

fprintf将数据按照指定的格式写入到文件fp中

count:数据元素个数

format:数据格式。%d整数,%f浮点数,%s字符串详情请见MATLAB帮助文件a='string'fp=fopen('d:\char1.txt','w')fprintf(fp,'%s',a)fclose(fp)fp1=fopen('d:\char1.txt','rt')b=fscanf(fp1,'%s')[A,count]=fscanf(fp,format,size)count=fprintf(fp,format,A)编辑课件§4程序的调试语法错误:包括词法或文法的错误,如函数名的拼写错误、数据不匹配、表达式书写错等。运行时的错误:根源在算法。发生错误时程序不会停止执行,也不会显示错误位置。只有程序执行结束或出错而返回到根本工作空间时,才知道发生了运行错误。但此时局部工作空间已关闭,致使错误很难跟踪。应用程序的错误一般有两种:编辑课件将可能出错的语句后面的分号去掉,显示中间结果;利用disp函数显示中间变量的值在程序的适当位置添加keyboard语句。当程序运行至此时将暂停〔在指令窗中显示k>>提示符〕,用户可以查看工作区中的变量,也可改变变量的值。当输入return指令时返回程序,继续运行。调试方法编辑课件程序的暂停:采用pause函数可以暂停程序,直到用户按任一键程序才继续执行。假设要强行中止程序的运行,可用ctrl+c。return:结束所在函数的执行,把控制权转至主调函数或指令窗。否那么,只有待整个被调函数执行完后,才会转出。

keyboard:将控制权交给键盘,用于程序的调试及在程序运行中修改变量。编辑课件调试一个单独的函数时,可将函数改写为脚本文件,此时可直接对输入参数赋值,然后以脚本方式运行该M文件;使用调试器可以准确地找到运行错误。通过设置断点可使程序运行到某行暂停,查看和修改工作空间中的变量;也可以逐行运行程序,对执行流程进行完全监控。编辑课件调试器Debug

它可帮助用户正确地找到程序出错的位置,其常和端点breakpoint配合使用。即:通过设置断点使程序运行到某行暂停,此时可通过观察程序变量、表达式、调试输出信息等来了解程序的运行情况;也可以逐行运行程序,对执行流程进行完全监控。

调试手段有:设置断点、跟踪和观察变量编辑课件Debug菜单项Step〔F10〕:单步执行语句,对于函数调用可将此函数一次执行完毕StepIn〔F11〕:单步执行语句,遇到函数时那么进入函数体内单步执行StepOut〔shift+F11〕:从函数体内运行到函数体外,即从当前位置运行到调用函数语句的下一条语句编辑课件Run〔F5〕:从头开始执行程序,直到遇到一个端点或程序结束;RuntoCursor:从当前位置运行到光标处;ExitDebugMode:退出调试工具,同时结束调试过程和程序运行过程。Set/ClearBreakpoints〔F12〕:设置或去除光标所在行的断点ClearallBreakpoints:去除所有断点编辑课件调试方法步骤

设置断点:选中要设置的语句,用快捷键F12或用工具条上的大红点或点击菜单setbreakpoint注:断点设置后,在窗口左边框上的大红圆点表示,非常醒目。设置断点后,点击菜单Debug|Run,程序便处在调试状态。而后程序会自动在断点处暂停,此时左边框上的对应位置会出现一个绿色箭头指示被中断的语句。编辑课件单步执行各语句:此时可查看各变量的内容,以判断程序流程是否正确。查看变量内容:可以点击工作空间的变量,或者用鼠标指向变量名,变量的值将自动显示。退出调试工具:选中菜单exitdebugmode去除断点:与设置方法相同。编辑课件因collatz.m程序需要输入参数n,故查看输出结果不能用Run命令,而需在指令窗中输入>>collatz(5)编辑课件§6.5程序的优化防止使用循环〔向量化编程〕要尽可能地使用向量或矩阵编程,而不是像在其他语言中对向量或矩阵的元素编程。这样,不仅可以使程序较短,而且能大大提高运行速度。要求:编程者须熟悉数组运算和MATLAB的指令数组的预定义数组空间预配置可提高运行速度〔对高阶矩阵的影响尤为明显〕以及内存的利用率,否那么数组屡次扩维会增加内存的碎片。编辑课件

clearvr=[0.89,1.20,3.09,4.27,3.62,7.71,8.99,7.92,9.70,10.41];ir=[0.028,0.040,0.100,0.145,0.118,0.258,0.299

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论