第六章-matlab的m文件和函数句柄课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第六章-matlab的m文件和函数句柄课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 matlab 文件 函数 句柄 课件
- 资源描述:
-
1、第六章第六章 MATLAB的的m文件和函数句柄文件和函数句柄 matlab语言称为第四代编程语语言称为第四代编程语言,程序简洁、可读性很强而且调试十言,程序简洁、可读性很强而且调试十分容易。分容易。是是matlab重要组成部分。重要组成部分。m文件简介文件简介v用户如想灵活应用用户如想灵活应用matlab去解决实际问题,去解决实际问题,充分调用充分调用matlab的科学技术资源,就需要编的科学技术资源,就需要编辑辑m文件文件v包含包含matlab语言代码的文件称为语言代码的文件称为m文件,其文件,其扩展名为扩展名为m。v编辑编辑m文件可使用各种文本编辑器。文件可使用各种文本编辑器。一、一、ma
2、tlab的工作模式的工作模式v指令驱动模式指令驱动模式 通常通常matlab以指令驱动模式工作,即在以指令驱动模式工作,即在matlab 窗口下当用户输入单行指令时,窗口下当用户输入单行指令时,matlab 立即处理这条指令,并显示结果,这立即处理这条指令,并显示结果,这就是就是matlab命令行方式。命令行方式。命令行操作时,命令行操作时,matlab窗口只允许一次执行窗口只允许一次执行一行上的一个或几个语句一行上的一个或几个语句。x1=0:10,x2=0:3:11,x3=11.5:-3:0 x1=0 1 2 3 4 5 6 7 8 9 10 x2=0 3 6 9x3=11.5000 8.5
3、000 5.5000 2.5000v在在matlab窗口输入数据和命令进行计算时,窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。当处理复杂问题和大量数据时是不方便的。因此应编辑因此应编辑m文件。文件。命令行方式程序可读性差,而且不能存储,命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文对于复杂的问题,应编写成能存储的程序文件。件。vm文件模式文件模式将将matlab语句构成的程序存储成以语句构成的程序存储成以m为扩展为扩展名的文件,然后再执行该程序文件,这种工名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。作模式称为程序文件模式。
4、程序文件不能在指令窗口下建立程序文件不能在指令窗口下建立,因为指令,因为指令窗口只允许一次执行一行上的一个或几个语窗口只允许一次执行一行上的一个或几个语句。句。二、m文件的创建v m文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立m文件。如dos下的edit,windows的记事本和word等。v具体的创建方法:1.在matlab命令窗 口点击file 菜单 new m-file编辑编辑存储存储2.点击点击file Save Workspace As 将工作空间中的内容存入文件。将工作空间中的内容存入文件。3.!edit 用用dos 下下edit 编辑器编制编辑器编制m文
5、件。文件。4.edit 用用matlab自带的编辑器编制自带的编辑器编制m文件。文件。v m文件编辑器的设定文件编辑器的设定 m文件编辑器可自己设定,设定方法是文件编辑器可自己设定,设定方法是matlab命令窗口命令窗口 options 菜单下点击菜单下点击 Edit Preference 选定选定m文件编辑器。文件编辑器。m文件编辑器缺省设置是文件编辑器缺省设置是 c:windowsnotepad.exe 还可设成:还可设成:c:windowswrite.exe c: c:program fileofficewinword.exe 注意:所创建的注意:所创建的m文件必须纳入文件必须纳入mat
6、lab搜索路搜索路 径后,才能在径后,才能在matlab命令窗口运行。命令窗口运行。三、matlab文件的类型1.数据文件数据文件.matv mat文件是文件是matlab以标准二进制格式保存的以标准二进制格式保存的数据文件,可将工作空间中有用的数据变数据文件,可将工作空间中有用的数据变量保存下来。量保存下来。v mat文件的生成和调用是由函数文件的生成和调用是由函数save和和load完成的。完成的。2.m文件文件 m文件的语法类似于文件的语法类似于c语言,但又有其自身特语言,但又有其自身特点。它只是一个简单的点。它只是一个简单的ASCII码文本文件,执码文本文件,执行程序时逐行解释运行程序
7、,行程序时逐行解释运行程序,matlab是解释是解释性的编程语言。性的编程语言。m文件有两类文件有两类独立的独立的m文件文件 称命令文件称命令文件 可调用可调用m文件文件 称函数文件称函数文件(1).命令文件命令文件 简单的简单的m文件文件 命令文件实际上是一串指令的集合,与在命命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。是一样的。没有输入输出参数。v命令文件包括两部分:注释文件和程序文件命令文件包括两部分:注释文件和程序文件%RANKNumber of linearly independent
8、rows or columns.%K=RANK(X)is the number of singular values of X%that are larger than MAX(SIZE(X)*NORM(X)*EPS.%K=RANK(X,tol)is the number of singular values of X that%are larger than tol.%Copyright(c)1984-94 by The MathWorks,Inc.%奇异值分解奇异值分解s=svd(x);if(nargin=1)tol=max(size(x)*max(s)*eps;endr=sum(s to
9、l);程序部分(2).matlab内置函数文件 matlab自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数用type sin查不到。调用格式:y=sin(2*x)实际应用中:x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)01234567-1-0.8-0.6-0.4-0.200.20.40.60.81(3).函数m文件 需要输入变量,返回输出变量v matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。函数函数m文件的格式:文件的格式:fu
10、nction 返回变量返回变量=函数名(输入变量)函数名(输入变量)注释说明语句段注释说明语句段 程序语句段程序语句段特定规则:特定规则:1.函数函数m文件第一行必须以单词文件第一行必须以单词function作为引导词,作为引导词,必须遵循如下形式:必须遵循如下形式:function=()2.m文件的文件名必须文件的文件名必须是是.m。3.程序中的变量均为局部变量,不保存在工作空间中。程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。其变量只在函数运行期间有效。function Hr=exm060301(flag)%t=(0:50)/50*2*pi;x=sin(t);y
11、=cos(t);Hr=cirline;%feval(Hr,flag,x,y,t)%function cirline(wd,x,y,t)%switch wdcase line plot(t,x,b,t,y,r,LineWidth,2)case circle plot(x,y,-g,LineWidth,8),axis square offotherwise error(输入宗量只能取输入宗量只能取 line 或或 circle!)endshgHH=exm060301(circle)t=0:2*pi/5:2*pi;x=cos(t);y=sin(t);%HH(circle,x,y,t)%P码文件码文件
12、 pcode expcode.m%当前目录当前目录pcode expcode.m inplace%能找到的目录能找到的目录(4).系统文件s函数 用于描述系统运动的专用函数,是特殊的 m 文件。s 函数有3类:由simulink结构图自动创建 可用c语言程序设计mex文件直 接定义 用函数m文件编写 s函数一旦创建,即可在框图中使用,也可在文件中调用。S函数的调用格式 sys,x0=sfunction(t,x,u,flag)S函数与函数m文件类似,只是输入、输出变量是限定的。系统状态状态初值用户定义的系统当前时刻当前状态值当前输入值标志量(5).函数句柄 函数句柄优点:v方便地实现函数间互相调
13、用v兼容函数加载的所有方式v拓宽子函数包括局部函数的使用范围v提高函数调用的可靠性v减少程序设计中的冗余v提高重复执行的效率v数组、结构数组、细胞型数组结合定义数据函数句柄的创建和显示函数句柄的创建和显示 定义函数句柄的定义只需在提示符定义函数句柄的定义只需在提示符后添加相应后添加相应函数的函数名函数的函数名 f_h=plotf_h=plot 函数句柄的内容通过函数句柄的内容通过functions显示显示 functions(f_h)ans=function:plot type:overloaded file:MATLAB built-in function methods:1x1 struc
14、t matlab的函数类型的函数类型 simple 未加载的内部函数未加载的内部函数.m文件文件 overloaded 加载的内部函数加载的内部函数.m文件文件 subfunction 子函数子函数 constructor matlab类的创建函数类的创建函数 private 局部函数局部函数函数句柄的调用和操作可通过函数feval进行函数句柄的调用 feval(函数句柄)f_h1=peaks feval(f_h1)feval(函数句柄,参数列表)f_h=plot feval(f_h,0:10,0:10)函数句柄与函数名字符串转换 func2str 函数名字符串转换函数句柄 str2func
15、函数句柄转换函数名字符串funh=str2func(det)ans=funh=det func2str(funh)ans=det四、matlab的程序结构 matlab语言的程序结构与其它高级语言是一致的,语言的程序结构与其它高级语言是一致的,分为顺序结构,循环结构,分支结构。分为顺序结构,循环结构,分支结构。(1).顺序结构顺序结构 依次顺序执行程序的各条语句依次顺序执行程序的各条语句(2).循环结构循环结构 被重复执行的一组语句,被重复执行的一组语句,循环是计算机解决问题的主要手段。循环是计算机解决问题的主要手段。循环语句主要有:循环语句主要有:for end语法为:语法为:for i=表
16、达式表达式 (表达式为一个向量)(表达式为一个向量)可执行语句可执行语句 end例:利用例:利用for循环求循环求1!+2!+3!+5!的值!的值 sum=0;for i=1:5 pdr=1;for k=1:i pdr=pdr*k;end sum=sum+pdr;endsum=153 while end 循环循环 while循环将循环体中的语句循环执行不定循环将循环体中的语句循环执行不定次数。次数。语法为:语法为:while 表达式表达式 循环体语句循环体语句 end 表达式一般是由逻辑运算和关系运算以及一表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;般运算组成的
17、,以判断循环的进行和停止;只要表达式的值只要表达式的值 非非0,继续循环;直到表达式,继续循环;直到表达式值为值为0,循环停止。,循环停止。例:用例:用while循环求循环求1100间整数的和间整数的和 sum=0;i=1;while i,=,=,=等等 逻辑操作符逻辑操作符&,|,等等 逻辑函数:逻辑函数:isequal 若是相等则为真若是相等则为真 isempty 若是空矩阵则为真若是空矩阵则为真 isstr 若是字符串则为真若是字符串则为真 xor 一真一假返回真一真一假返回真 all 全为真、全非全为真、全非0则为真则为真 any 只要有只要有1个非个非0则为真则为真例:编写例:编写m
18、函数,计算函数值函数,计算函数值 x (x=1)2x-1 (1x=10)x=input(input x=);if x=10 y=3*x-11else y=2*x-1endfunction exm0701_2(a,b)%This is my second example.%aDefine the limit of variable x.%bDefine the limit of variable y.clf;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y)for j=1:length(x)if x(j)+y(i)1 z(i,j)=0.5457*exp(-0.75*y
19、(i)2-3.75*x(j)2-1.5*x(j);elseif x(j)+y(i)=-1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j);else z(i,j)=0.7575*exp(-y(i)2-6.*x(j)2);end endendaxis(-a,a,-b,b,min(min(z),max(max(z);colormap(flipud(winter);surf(x,y,z);shgswtich 表达式(标量或字符串)表达式(标量或字符串)case 1 语句语句1case 2 语句语句2otherwiseend%exswt1x=input
20、(x=)switch xcase 2 disp(上机实习上机实习)case 1 disp(听课听课)otherwise disp(no matlab)endtry命令命令 1%总执行,正确跳出结构总执行,正确跳出结构catch 命令命令 2%检检1错执行错执行catch end%再错结束再错结束clear,N=4;A=magic(3);%设置设置3行行3列矩阵列矩阵A。try A_N=A(N,:),%取取A的第的第N行元素行元素catch A_end=A(end,:),%如果取如果取A(N,:)出错,则改取出错,则改取A的最后一行。的最后一行。endlasterr%显示出错原因显示出错原因 五
21、、matlab程序流的控制 matlab的控制语句同c语言有相似之处,但没有c 语言复杂、灵活和多变。因而语法比较简单,容易掌握。vecho 指令 用来控制m文件在执行过程中是否 显示 echo on 打开所有命令文件的显示方式 echo off 关闭所有命令文件的显示方式 echo 在以上两者间切换 v echo对于命令文件函数文件有所不同,命令文件用法简单,函数对所有命令起作用;函数文件用法较复杂,具体请help查询。echo file on 打开file函数文件的显示方式 echo file off 关闭file函数文件的显示方式 echo file 切换file函数文件的显示方式 ec
22、ho on all 打开所有函数文件的显示方式 echo off all 关闭所有函数文件的显示方式return 被调函数终止执行并交执行被调函数终止执行并交执行权于调用函数权于调用函数vinput 提示用户从键盘输入数值、字符串、表达式。例:n=input(How many apples=)How many apples=5n=5n=input(How many apples=,s)How many apples=an applen=an applevkeyboard 与与input类似,功能更强类似,功能更强 keyboard 调用键盘与调用调用键盘与调用m文件一样,当文件一样,当keyb
23、oard在在m文件中出现时,它停止文件的执行并文件中出现时,它停止文件的执行并控制键盘,用于修改程序。控制键盘,用于修改程序。vmenu 产生一个用户可选择输入的菜单产生一个用户可选择输入的菜单 格式:格式:k=menu(标题标题,菜单菜单1,菜单菜单2)vpause 暂停,等待用户响应 可令m文件执行暂停,并在继续执行前按任一个键。break 中断中断 break 中断中断for,while循环语句的执行,在嵌循环语句的执行,在嵌套循环结构中,套循环结构中,break进入最里层循环退出。进入最里层循环退出。error warning变长度输入输出宗量变长度输入输出宗量varargin var
24、argout Z=PEAKS;Z=PEAKS(N);Z=PEAKS(V);Z=PEAKS(X,Y);PEAKS;PEAKS(N);PEAKS(V);PEAKS(X,Y);X,Y,Z=PEAKS;X,Y,Z=PEAKS(N);X,Y,Z=PEAKS(V);局部变量局部变量(local)全局变量全局变量(global)不提倡不提倡使用(不利函数封装)使用(不利函数封装)程序调试程序调试 直接调试:分号去掉;直接调试:分号去掉;echo显示;显示;keyboard查询;查询;m函数文件放开;函数文件放开;debug调试:调试:高手常用高手常用function nn,xx,xmu,xstd=exmde
25、bug(x)%xmu=mean(x);xstd=std(x);nn,xx=hist(x);if nargout=0 barzzy0(nn,xx,xmu,xstd)%endfunction barzzy0(nn,xx,xmu,xstd)%clf,bar(xx,nn);hold onYlimit=get(gca,YLim);yy=0:Ylimit(2);%xxmu=xmu*ones(size(yy);xxmu=xmu*size(yy);xxL=xxmu/xmu*(xmu-xstd);xxR=xxmu/xmu*(xmu+xstd);plot(xxmu,yy,r,Linewidth,3)%plot(x
展开阅读全文