Matlab编程2之函数的编写

上传人:xuey****n398 文档编号:244760197 上传时间:2024-10-05 格式:PPT 页数:17 大小:201.99KB
返回 下载 相关 举报
Matlab编程2之函数的编写_第1页
第1页 / 共17页
Matlab编程2之函数的编写_第2页
第2页 / 共17页
Matlab编程2之函数的编写_第3页
第3页 / 共17页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,数学实验,第四讲,Matlab,编程,(,二,),函数文件,1,用,Matlab,语言编写的程序称为,M,文件,M,文件根据调用方式的不同可以分为两类:,Script,:,脚本文件,/,命令文件,Function,:,函数文件,M,文件以,.,m,为扩展名,Matlab,编程,直接输入,文件名,即可运行,供其它,M,文件调用,通常带输入参数和输出参数,2,Matlab,编程复习,关系,运算,逻辑运算,、,、,=,、,=,、,=,&,、,|,、,、,xor(,x,y,),、,any(,x,),、,all(,x,),输入输出,input,、,disp,、,fprintf,控制语句,if,、,switch,、,for,、,while,pause,、,break,、,continue,、,return,3,function,输出形参列表,=,函数名,(,输入形参列表,),%,注释说明部分,(,可选,),函数体语句,(必须),第一行为,引导行,,表示该,M,文件是函数文件,函数名的命名规则与变量名相同,(,必须以字母开头,),当,输出形参,多于一个时,用,方括号,括起来,以,百分号,开始的语句为,注释语句,函数文件,函数文件由,function,语句引导,函数,文件名必须与函数名一致,函数必须是一个,单独的,M,文件,4,function,y=,myfliplr,(x),%,returns X with row preserved and columns,%,flipped in the left/right direction,%,y=x(:,end:-1:1);,函数文件举例,例:,myfliplr.m,function,a,b=,myswap,(x,y),%,swap x and y,a,=,y,;,b=x;,例:,myswap.m,5,function,printyh(n),%,打印杨辉三角形,本函数没有输出参数,yh=1;disp(yh);,if n=1,return,;end,yh=1,1;disp(yh);,for k=3:n,yh_old=yh;k2=,ceil,(k/2);,for l=2:k2,yh(l)=yh_old(l-1)+yh_old(l);,end,yh(k2+1:k)=yh(k-k2:-1:1);disp(yh);,end,函数文件举例,例:,printyh.m,6,函数调用的一般格式,输出实参列表,=函数名,(,输入实参列表,),函数调用时,,实参的顺序,应与函数定义时,形参的顺序,一致,实参,与,形参,之间的结合是通过,值传递,实现的,函数可以,嵌套调用,,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为,递归调用,函数所传递的参数具有可调性,,Matlab,用两个永久变量,nargin,和,nargout,分别记录调用该函数时的输入实参 和输出实参的个数,函数调用,7,%,函数文件,myfactor.m,function,y=,myfactor,(n),if(n=1),y=1;,else,y=n*,myfactor,(n-1);,end,例:,利用函数的递归调用计算,n,!,递归函数举例,8,%main.m,%,clear;,s=0;,n=10;,for i=1:n,s=s+,myfactor,(i);,end,fprintf,(s=%g n,s),例:,计算,1!+2!+10!,递归函数举例,9,%,ex4nargin.m,function y=ex4nargin(a,b),if(,nargin=1,),y=a;,elseif(,nargin=2,),y=a*b;,end,参数的可调性举例,例:,nargin,和,nargout,的使用,10,参数的可调性举例,%,ex4nargout.m,function p,q=ex4nargout(a,b),if(,nargout=1,),p=a+b;,elseif(,nargout=2,),p=a+b;,q=a-b;,end,11,函数通过,输入和输出参数,与其它,M,文件进行数据传递,当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即,全部被清除,如果在若干个,M,文件中,,都把某个变量定义为全局变量,,则这些函数将公共使用这一变量,。,所有函数都可以对它进行存取和修改操作,函数文件中的变量都是,局部,的,即一个函数文件中定义的变量不能被另一个函数文件或其它,M,文件使用,全局变量与局部变量,定义全局变量是,M,文件间传递信息的一种手段,12,变量名列表中的各个变量,用空格隔开,,不能用逗号!,在使用全局变量的所有,M,文件中,都要对其所使用的全局变量进行定义,全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而,在结构化程序设计中,全局变量是不受欢迎的,。特别是当程序较大,子程序较多时,全局变量将给程序调试和维护带来不便,故不提倡使用全局变量。,global,变量名列表,全局变量的定义,13,程序示例,%ex4global.m,clear;,global a b,a=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,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;,14,子函数,一个函数文件中可以含有一个或多个函数,其中第一个称为主函数,其它函数称为子函数,子函数由,function,语句引导,除了用,global,定义的全局变量外,所有函数中的变量都是局部变量,函数之间通过输入、输出参数进行数据传递,调用一个函数时,,Matlab,会首先检查该函数是否为一个子函数,主函数必须位于最前面,子函数出现的次序任意,子函数只能被主函数和位于同一个函数文件中的其它子函数调用,15,子函数举例,%ex4subfun.m,function,avg,med=,ex4subfun,(x),%,主函数,n=,length,(x);,avg=,mean,(x,n);,med=,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;,end,16,上机作业,1,、,兔子繁殖问题:,(,Fibonacci number),假设,每对兔子每月生,出,一对,小兔,且新生的兔子满二个月后就能生育,,那么从刚出生的一对小兔算起,,1,2,个月后总共有,多少对兔子?,三年后呢?试编写一个函数计算该题,输入为月数,输出为兔子对数。,2,、,编写一个函数,,,要求实现以下功能,当输入一个参数时,输出错误信息,并返回,当输入两个或三个参数时,计算它们的阶乘的和,17,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!