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

下载本文档

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

文档简介

1、数学实验第第六讲六讲 函数文件函数文件本讲主要内容本讲主要内容 :l 什么是函数文件l 如何编写函数文件l 函数参数的可调性l 递归函数l 全局与局部变量l 子函数l 自定义函数的三种途径q M 文件根据调用方式的不同可以分为两类:文件根据调用方式的不同可以分为两类:l Script:脚本文件脚本文件/命令文件命令文件 l 独立的m文件-直接输入直接输入文件名文件名即可运行即可运行l Function:函数文件函数文件 l可调用m文件-它由它由function引导,可供其它引导,可供其它M文件文件调用,通常带输入参数和输出参数调用,通常带输入参数和输出参数Matlab 编程编程表表3-13-1

2、脚本文件与函数文件的区别脚本文件与函数文件的区别脚本文件函数文件输入、输出没有输入参数,不返回输出参数可以带输入参数也可返回输出参数变量操作只操作基本工作空间变量(全局变量)可操作基本工作空间变量(全局变量需用global指定)和局部变量调用方式直接运行必须以函数调用方式l 第一行为第一行为引导行引导行,表示该,表示该 M文件是函数文件文件是函数文件l 函数名的命名规则与变量名相同函数名的命名规则与变量名相同 ( 必须以字母开头必须以字母开头 )l 当当输出形参输出形参多于一个时,用多于一个时,用方括号方括号括起来括起来l 以以百分号百分号开始的语句为开始的语句为注释语句注释语句函数文件函数文

3、件q 函数文件由函数文件由 function 语句引导语句引导l 函数函数文件名必须与函数名一致文件名必须与函数名一致l 函数必须是一个函数必须是一个单独的单独的 M文件文件function 输出形参列表输出形参列表=函数名函数名(输入形参列表输入形参列表)% 注释说明部分:注释说明部分:%可以被可以被help命令显示命令显示程序语句段程序语句段 % 函数体部分函数体部分l 函数文件函数文件(ftoc.m):5(32)9cf例:例:将华氏温度转化为摄氏温度:将华氏温度转化为摄氏温度:编程示例编程示例clear; f=input(Please input f:);c=5*(f-32)/9;fpr

4、intf(c = %gn,c);l 脚本文件脚本文件 (ftoc.m):function c = ftoc(f)% 将华氏温度将华氏温度f转化为摄氏温度转化为摄氏温度cc=5*(f-32)/9;fprintf(c = %gn,c);函数文件举例函数文件举例function s,l = mycircle(r)% 函数功能:求半径为函数功能:求半径为r的圆的面积和周长的圆的面积和周长% 输入参数输入参数:圆的半径圆的半径r% 输出参数:圆的面积输出参数:圆的面积s和周长和周长ls = pi*r2; l = 2*pi*r;例:例:编写函数文件求半径为编写函数文件求半径为r的圆的面积和周长的圆的面积和

5、周长 函数定义好了以后,就可以像系统函数一样,随意调用。试一试:函数定义好了以后,就可以像系统函数一样,随意调用。试一试: a=mycircle(10) a b=mycircle(5) y=f2cf(0);函数文件举例函数文件举例function y = func(x)% 函数功能:求分段函数函数功能:求分段函数if abs(x)2 error(输入参数太多。);end;if nargin=1 s=b;end;t=0:0.01:2*pi;plot(r*cos(t),r*sin(t),s); axis equal;sa=pi*r2;参数的可调性举例参数的可调性举例r 重要重要系统变量系统变量 n

6、argout : 存储调用函数时存储调用函数时输出实参的个数输出实参的个数。r 例:例:nargout 的使用:的使用:% nargoutEx.mfunction p,q=nargoutEx(a,b)if (nargout=1) p = a + b;elseif (nargout=2) p = a + b; q = a - b;end若调用格式如下,运行结果分别是什么?若调用格式如下,运行结果分别是什么? x=nargoutEx(4,5) a,b= nargoutEx(4,5) nargoutEx(1,2,3)1,1!(1)!,1nnnnn % 函数文件函数文件 myfactor.mfunct

7、ion y=myfactor(n)if (n=1) y=1;else y=n*myfactor(n-1);end例:例:利用函数的递归调用计算利用函数的递归调用计算 n!递归函数举例递归函数举例% main.m%clear;s = 0;n = 10;for i = 1 : n s = s + myfactor(i);endfprintf( s=%g n,s)例:例:计算计算 1! + 2! + + 10!递归函数举例递归函数举例q 函数文件中的变量都是函数文件中的变量都是局部局部的,即一个函数文件中定义的,即一个函数文件中定义的变量不能被另一个函数文件或其它的变量不能被另一个函数文件或其它 M

8、 文件使用文件使用q当函数调用完毕后,该函数文件中定义的所有局部变量当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即都将被释放,即全部被清除全部被清除q 函数通过函数通过输入和输出参数输入和输出参数与其它与其它 M 文件进行数据传递文件进行数据传递q 如果在若干个如果在若干个 M文件中,文件中,都把某个变量定义为全局变都把某个变量定义为全局变量量,则这些函数将公共使用这一变量,则这些函数将公共使用这一变量。所有函数都可以对所有函数都可以对它进行存取和修改操作它进行存取和修改操作q 定义全局变量是定义全局变量是 M文件间传递信息的一种手段文件间传递信息的一种手段全局变量全局变量(G

9、lobal)与局部变量与局部变量(Local)l 变量名列表中的各个变量变量名列表中的各个变量用空格隔开用空格隔开,不能用逗号!,不能用逗号!l 在使用全局变量的所有在使用全局变量的所有M文件中,都要对其所使用的全文件中,都要对其所使用的全局变量进行定义,局变量进行定义,即,在即,在M文件中只有特殊定义的,才是文件中只有特殊定义的,才是全局变量,其他都是局部的。全局变量,其他都是局部的。全局变量给函数间的数据传递带来了方便,但却破坏了全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而函数对变量的封装,降低了程序的可读性,因而在结构在结构化程序设计中,全局

10、变量是不受欢迎的化程序设计中,全局变量是不受欢迎的。特别是当程序。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。来不便,故不提倡使用全局变量。global 变量名列表变量名列表全局变量的定义全局变量的定义程序示例程序示例% globalmain.mclear; global a ba=1; b=3;y=mysquaresum(a,b);fprintf( a=%g, b=%g n,a,b);z=myproduct(a,b);fprintf( a=%g, b=%gn,a,b);% mysquaresum.m

11、function square_sum=mysquaresum(x,y)square_sum=x2 + y2; a=x+y;% myproduct.mfunction product=myproduct(x,y)global aproduct=x*y; a=x+y;子函数子函数l 一个函数文件中可以含有一个或多个函数,一个函数文件中可以含有一个或多个函数, 其中第一个称为主函数,其它函数称为子函数其中第一个称为主函数,其它函数称为子函数l 子函数也由子函数也由 function 语句引导语句引导l 除了用除了用 global 定义的全局变量外,定义的全局变量外,所有函数中的变量都所有函数中的变

12、量都是局部变量是局部变量,函数之间通过输入、输出参数进行数据传递,函数之间通过输入、输出参数进行数据传递调用一个函数时,调用一个函数时,Matlab 会首先检查该函数是否为一个子会首先检查该函数是否为一个子函数函数l 主函数必须位于最前面,子函数出现的次序任意主函数必须位于最前面,子函数出现的次序任意l 子函数只能被主函数和位于同一个函数文件中的其它子子函数只能被主函数和位于同一个函数文件中的其它子函数调用函数调用子函数举例子函数举例% subfun.mfunction avg, med = subfun(x) % 主函数主函数 n = length(x);avg = mean(x, n);m

13、ed = median(x, n);function a = mean(x, n) % 子函数,计算平均值子函数,计算平均值a = sum(x)/n;function m = median(x, n) % 子函数,计算中值子函数,计算中值x = sort(x);if rem(n, 2) = 1 m = x(n+1)/2);else m = (x(n/2)+x(n/2+1)/2;endq M M文件函数文件函数(M file function)(M file function)q 内联内联函数函数(Inline Function)(Inline Function)q 匿名函数匿名函数(Anony

14、mous Function)(Anonymous Function)自定义函数的三个自定义函数的三个途径:途径: q M M文件函数文件函数:函数文件形式建立的自定义函数也称为函数文件形式建立的自定义函数也称为q 定义的一般格式:定义的一般格式: function 输出形参列表输出形参列表=函数名函数名(输入形参列表输入形参列表) % 注释说明部分注释说明部分(可选可选) 函数体语句函数体语句(必须必须)q 例:做如下函数文件:例:做如下函数文件:myfunc.mmyfunc.mfunction y=function y=myfunc(xmyfunc(x) ) y=x.2; y=x.2; my

15、func(2) myfunc(2)% %计算在计算在x=2x=2处的函数值处的函数值 ezplot(myfuncezplot(myfunc); ); % % 作作函数函数图像图像 fplot(myfunc,-5,5,r);fplot(myfunc,-5,5,r); % % 注意到:上边两个命令中的文件名仍需加单引号注意到:上边两个命令中的文件名仍需加单引号M M文件函数文件函数(M file function)(M file function)q inlineinline函数也称为内联函数、内嵌函数、在线函数函数也称为内联函数、内嵌函数、在线函数q 一般格式:一般格式: 函数名函数名=inli

16、ne(=inline(函数表达式函数表达式 , , 变量变量1 1 , , 变量变量2 2 ,.,.) )q 例:例: f=inline(x.2,x);f=inline(x.2,x);% %定义了函数定义了函数f(xf(x)=x2)=x2 f(2)f(2)% %计算在计算在x=2x=2处的函数值处的函数值 ezplot(fezplot(f); ); % % 作作函数函数图像图像 fplot(f,0,5,r);fplot(f,0,5,r); % % 注意到:当注意到:当f f是函数时,上边两个命令中的是函数时,上边两个命令中的f f不再加单引号。不再加单引号。内联内联函数函数(Inline Fu

17、nction)q 定义的函数称为定义的函数称为匿名函数匿名函数、临时函数。、临时函数。 是函数指针是函数指针 ,也,也称为函数句柄。效率优于称为函数句柄。效率优于inlineinline函数,函数,7.07.0版本后建议用匿名版本后建议用匿名函数取代函数取代inlineinline函数。函数。q 一般格式:一般格式:函数句柄函数句柄=(=(输入输入变量变量) ) 函数表达式函数表达式q 例:例: f=(x)xf=(x)x. .22% %定义了函数定义了函数f(xf(x)=x2)=x2 f(2)f(2)% %计算在计算在x=2x=2处的函数值处的函数值 ezplot(fezplot(f); );

18、 % % 作作函数函数图像图像 fplot(f,0,5,r);fplot(f,0,5,r); % % 注意到:当注意到:当f f是函数时,上边两个命令中的是函数时,上边两个命令中的f f不再加单引号。不再加单引号。匿名函数匿名函数(Anonymous Function)(Anonymous Function)本章内容小结本章内容小结函数文件的一般格式:函数文件的一般格式:function 输出形参列表输出形参列表=函数名函数名(输入形参列表输入形参列表)% 注释说明部分注释说明部分(可选可选)函数体语句函数体语句(必须必须)内联函数的一般格式:内联函数的一般格式:函数名函数名=inline(函数表达式函数表达式,变量变量1,变量变量2,.)匿名函数匿名函数的一般格式:的一般格式:函数句柄函数句柄=(=(输入输入变量变量) ) 函数表达式函数表达式系统变量系统变量 narginnargin存储调用函数时存储调用函数时输入实参的个数输入实参的个数。系统变量系统变量 nargoutnargout存储调用函数时存储调用函数时输出实参的个数输出实参的个数。全局变量定义格式:全局变量定义格式: global 变量名列表变量名列表上机作业上机作业q 编写一个使用循环计算编写一个使用循环计算 n! 的函数。的函数。 (fa

温馨提示

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

评论

0/150

提交评论