matlab函数文件课件

上传人:n**** 文档编号:89212239 上传时间:2019-05-21 格式:PPT 页数:26 大小:551.50KB
返回 下载 相关 举报
matlab函数文件课件_第1页
第1页 / 共26页
matlab函数文件课件_第2页
第2页 / 共26页
matlab函数文件课件_第3页
第3页 / 共26页
matlab函数文件课件_第4页
第4页 / 共26页
matlab函数文件课件_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《matlab函数文件课件》由会员分享,可在线阅读,更多相关《matlab函数文件课件(26页珍藏版)》请在金锄头文库上搜索。

1、数学实验,第六讲 函数文件,本讲主要内容 : 什么是函数文件 如何编写函数文件 函数参数的可调性 递归函数 全局与局部变量 子函数 自定义函数的三种途径,M 文件根据调用方式的不同可以分为两类: Script:脚本文件/命令文件 独立的m文件-直接输入文件名即可运行 Function:函数文件 可调用m文件-它由function引导,可供其它M文件调用,通常带输入参数和输出参数,Matlab 编程,表3-1脚本文件与函数文件的区别,第一行为引导行,表示该 M文件是函数文件 函数名的命名规则与变量名相同 ( 必须以字母开头 ) 当输出形参多于一个时,用方括号括起来 以百分号开始的语句为注释语句,

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

3、%gn,c);,函数文件举例,function s,l = mycircle(r) % 函数功能:求半径为r的圆的面积和周长 % 输入参数:圆的半径r % 输出参数:圆的面积s和周长l s = pi*r2; l = 2*pi*r;,例:编写函数文件求半径为r的圆的面积和周长,函数定义好了以后,就可以像系统函数一样,随意调用。试一试: a=mycircle(10) a b=mycircle(5) y=f2cf(0);,函数文件举例,function y = func(x) % 函数功能:求分段函数 if abs(x)1 y=sqrt(1-x2); else y=x2-1; end,例:编写函数文

4、件求下面的分段函数,函数定义好了以后,就可以像系统函数一样,随意调用。试一试: a=func(10) func(0.5) ezplot(func(x),-2,2),hold on fplot(func(x)+0.5,-2,2,-r),hold off,函数调用的一般格式,输出实参列表=函数名(输入实参列表),函数调用时,实参的顺序应与函数定义时形参的顺序一致 实参与形参之间的结合是通过值传递实现的 函数可以嵌套调用,即一个函数可以被其它函数调用, 甚至可以被它自身调用,此时称为递归调用 函数所传递的参数具有可调性,Matlab 用两个永久变量 nargin 和 nargout 分别记录调用该函

5、数时的输入实参 和输出实参的个数,函数调用,% narginEx.m function y = narginEx(a,b) if (nargin=1) y = a; elseif (nargin=2) y = a*b; end,参数的可调性举例,重要系统变量 nargin : 存储调用函数时输入实参的个数。 例:nargin 的使用:,若调用格式如下,运行结果分别是什么? narginEx(4,5) narginEx(3) narginEx(1,2,3),解:函数文件内容为 function c = calnar(a,b) % 当输入1个参数求其绝对值 % 输入2个参数求其平方和的算术平方根

6、if (nargin = = 1) c=abs(a); elseif (nargin = = 2) c=sqrt(a.2 + b.2); end,例: 定义一个函数,当输入1个参数求其绝对值,输入2个参数求其平方和的算术平方根。,例:画以r为半径的圆,返回圆面积,可以指定线色等属性。 function sa = circle(r,s) %CIRCLE plot a circle of radii r in the line specified by s. % r 指定半径的数值 % s 指定线色的字符串 % sa 圆面积 % circle(r) 利用蓝实线画半径为 r 的圆周线. % circ

7、le(r,s) 利用串 s 指定的线色画半径为 r 的圆周线. % sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面. % sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面. if nargin2 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;,参数的可调性举例,重要系统变量 nargout : 存储调用函数时输出实参的个数。 例:nargout 的使用:,% nargoutEx.m fun

8、ction 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),% 函数文件 myfactor.m function y=myfactor(n) if (n=1) y=1; else y=n*myfactor(n-1); end,例:利用函数的递归调用计算 n!,递归函数举例,% main.m % clear; s = 0;

9、 n = 10; for i = 1 : n s = s + myfactor(i); end fprintf( s=%g n,s),例:计算 1! + 2! + + 10!,递归函数举例,函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M 文件使用 当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除 函数通过输入和输出参数与其它 M 文件进行数据传递 如果在若干个 M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作 定义全局变量是 M文件间传递信息的一种手段,全局变量(Global)

10、与局部变量(Local),变量名列表中的各个变量用空格隔开,不能用逗号! 在使用全局变量的所有M文件中,都要对其所使用的全局变量进行定义,即,在M文件中只有特殊定义的,才是全局变量,其他都是局部的。,全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。,global 变量名列表,全局变量的定义,程序示例,% globalmain.m clear; global a b a=1; b=3; y=mysquaresum(a,b);

11、 fprintf( a=%g, b=%g n,a,b); z=myproduct(a,b); fprintf( a=%g, b=%gn,a,b);,% mysquaresum.m function square_sum=mysquaresum(x,y) square_sum=x2 + y2; a=x+y;,% myproduct.m function product=myproduct(x,y) global a product=x*y; a=x+y;,子函数,一个函数文件中可以含有一个或多个函数, 其中第一个称为主函数,其它函数称为子函数 子函数也由 function 语句引导 除了用 gl

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

13、 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; end,M文件函数(M file function) 内联函数(Inline Function) 匿名函数(Anonymous Function),自定义函数的三个途径:,M文件函数:函数文件形式建立的自定义函数也称为永久函数 定义的一般格式: function 输出形参列表=函数名(输入形参列表) % 注释说明部分(可选) 函数体语句(必须) 例:做如下函数文件:myfunc.m function

14、 y=myfunc(x) y=x.2; myfunc(2) %计算在x=2处的函数值 ezplot(myfunc); % 作函数图像 fplot(myfunc,-5,5,r); % 注意到:上边两个命令中的文件名仍需加单引号,M文件函数(M file function),inline函数也称为内联函数、内嵌函数、在线函数 一般格式: 函数名=inline(函数表达式,变量1,变量2,.) 例: f=inline(x.2,x); %定义了函数f(x)=x2 f(2) %计算在x=2处的函数值 ezplot(f); % 作函数图像 fplot(f,0,5,r); % 注意到:当f是函数时,上边两个

15、命令中的f不再加单引号。,内联函数(Inline Function),定义的函数称为匿名函数、临时函数。是函数指针 ,也称为函数句柄。效率优于inline函数,7.0版本后建议用匿名函数取代inline函数。 一般格式: 函数句柄=(输入变量) 函数表达式 例: f=(x)x.2 %定义了函数f(x)=x2 f(2) %计算在x=2处的函数值 ezplot(f); % 作函数图像 fplot(f,0,5,r); % 注意到:当f是函数时,上边两个命令中的f不再加单引号。,匿名函数(Anonymous Function),本章内容小结,上机作业,编写一个使用循环计算 n! 的函数。 (factor2.m),当输入一个参数时,计算它的阶乘 当输入两个参数时,计算它们的阶乘的和 当输入参数超过三个时,输入错误信息,并返回,编写一个函数,要求实现以下功能: (factor3.m),s=input(Enter money: ); s0=2*s: year=0; while ss0 year=year+1; s=s*(1+0.036); end printf(year=%dn,year);,函数文件举例,例:设银行利率为3.6,将10000元人民币存入银行,问多长时间会连本带利翻一番?,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号