Matlab-第七讲:编程基础II(-函数-)_第1页
Matlab-第七讲:编程基础II(-函数-)_第2页
Matlab-第七讲:编程基础II(-函数-)_第3页
Matlab-第七讲:编程基础II(-函数-)_第4页
Matlab-第七讲:编程基础II(-函数-)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

数学软件Matlab——Matlab编程(函数)1第1页内容提要

函数文件定义递归函数函数参数可调性局部变量与全局变量子函数函数句柄、内联函数、匿名函数2第2页

M文件依据调用方式不一样能够分为两类

Script:脚本文件,直接输入文件名即可运行

Function:函数文件Matlab编程供其它M文件调用,通常带输入参数和输出参数3第3页function

输出形参列表=函数名(输入形参列表)%注释说明部分(可选)函数体语句

第一行为引导行,表示该M文件是函数文件函数名命名规则与变量名相同(必须以字母开头

)当输出形参多于一个时,用方括号括起来函数文件函数文件普通格式函数必须是一个单独M文件函数文件文件名必须与函数名一致4第4页函数文件(f2cf.m):例:将华氏温度转化为摄氏温度:编程示例clear;f=input('Pleaseinputf:');c=5*(f-32)/9;fprintf('c=%g\n',c)脚本文件(f2cs.m):functionc=f2cf(f)c=5*(f-32)/9;5第5页函数文件举例function

[a,b]=myswap(x,y)%swapxandya=y;

b=x;例:交换两个变量值myswap.m函数能够有多个输入参数和多个输出参数也能够没有输入参数或输出参数6第6页function

printyh(n)

%打印杨辉三角形,本函数没有输出参数yh=1;disp(yh);ifn==1,return;endyh=[1,1];disp(yh);fork=3:nyh_old=yh;k2=ceil(k/2);fori=2:k2yh(i)=yh_old(i-1)+yh_old(i);endyh(k2+1:k)=yh(k-k2:-1:1);disp(yh);end函数文件举例例:打印杨辉三角形printyh.m7第7页函数调用普通格式输出实参列表=函数名(输入实参列表)函数调用时,实参次序应与函数定义时形参次序一致

实参与形参之间结合是经过值传递实现函数能够嵌套调用,即一个函数能够被其它函数调用,

甚至能够被它本身调用,此时称为递归调用函数所传递参数含有可调性,Matlab用两个永久变量

nargin

和nargout

分别统计调用该函数时输入实参

和输出实参个数函数调用8第8页%

函数文件myfactor.mfunctiony=myfactor(n)ifn<=1y=1;elsey=n*myfactor(n-1);end例:利用函数递归调用计算n!递归函数举例9第9页%main.mclear;s=0;n=10;fori=1:ns=s+myfactor(i);endfprintf('s=%d\n',s)例:计算1!+2!+…+10!递归函数举例10第10页%

ex4nargin.mfunctiony=ex4nargin(a,b)ifnargin==1y=a;elseifnargin==2y=a*b;end参数可调性举例例:nargin

和nargout

使用%

ex4nargout.mfunction[p,q]=ex4nargout(a,b)ifnargout==1p=a+b;elseifnargout==2p=a+b;q=a-b;end>>y1=ex4nargin(3)>>y2=ex4nargin(3,4)>>x=ex4nargout(5,3)>>[x,y]=ex4nargin(5,3)11第11页内容提要

函数文件定义递归函数函数参数可调性局部变量与全局变量子函数函数句柄、内联函数、匿名函数12第12页局部变量:只能在其被定义M文件中使用全局变量:能够在多个M文件中使用

Matlab中,变量默认是局部变量局部变量与全局变量局部变量与全局变量局部变量

Matlab中,变量默认是局部变量,即一个M文件中定义变量不能被其它M文件引用当函数调用完成后,该函数文件中所定义全部局部变量都将被释放,即全部被去除函数经过输入和输出参数与其它M文件进行数据传递13第13页程序示例%main.mclear;a=1;b=3;z=mysquaresum(a,b);fprintf('z=%d\n',z);disp(mysum)%ERROR%mysquaresum.mfunctionmysum=mysquaresum(x,y)mysum=x^2+y^2;mysum=a^2+b^2;%ERROR14第14页局部变量与全局变量全局变量global

变量名列表全局变量定义或申明变量名列表中各个变量用空格隔开,不能用逗号!在需要使用全局变量全部M文件中,都要进行申明定义全局变量是M文件间传递信息一个伎俩15第15页程序示例%main.mclear;globalab;%

申明ab是全局变量a=1;b=3;z=mysquaresum();fprintf('z=%d\n',z);disp(mysum);%ERROR,mysum不是全局变量%mysquaresum.mfunctionmysum=mysquaresum()globalab;%这里也必须申明ab是全局变量globalmysum;mysum=a^2+b^2;%OK16第16页全局变量给函数间数据传递带来了方便,但却破坏了函数对变量封装,降低了程序可读性,因而在结构化程序设计中,全局变量是不受欢迎。尤其是当程序较大,子程序较多时,全局变量将给程序调试和维护带来不便,故普通不提倡使用全局变量。全局变量17第17页程序示例%ex4global.mclear;globalab;a=1;b=3;z=mysquaresum(a,b);fprintf('a=%d,b=%d\n',a,b);z=myproduct(a,b);fprintf('a=%d,b=%d\n',a,b);%mysquaresum.mfunctionmysum=mysquaresum(x,y)mysum=x^2+y^2;a=x+y;%myproduct.mfunctionmyprod=myproduct(x,y)globalamyprod=x*y;a=x+y;18第18页内容提要

函数文件定义递归函数函数参数可调性局部变量与全局变量子函数函数句柄、内联函数、匿名函数19第19页子函数一个函数文件中能够包含一个或多个函数,

其中第一个称为主函数,其它函数称为子函数除全局变量外,全部函数(主函数、子函数)中变量都是局部变量,函数之间经过输入、输出参数进行数据传递主函数必须位于最前面,子函数出现次序任意子函数只能被主函数和位于同一个M文件中其它子函数调用外部M文件只能调用主函数子函数20第20页子函数举例%ex4subfun.mfunction[avg,med]=ex4subfun(x)%主函数

n=length(x);avg=mymean(x,n);med=mymedian(x,n);functiony=mymean(x,n)%子函数,计算平均值y=sum(x)/n;functiony=mymedian(x,n)%子函数,计算中值x=sort(x);ifrem(n,2)==1y=x((n+1)/2);elsey=(x(n/2)+x(n/2+1))/2;end>>x=rand(6,1)>>[y1,y2]=ex4subfun(x)21第21页函数句柄函数句柄定义fhandle=@

函数名

函数句柄:能够了解成一个函数代号或别名,调用函数句柄就等价于调用该函数。

@

作用就是将一个函数函数句柄赋值给左边变量例:f=@sin;y=f(pi/3)22第22页内联函数内联函数定义函数名=inline('函数表示式','变量1','变量2',...)MATLAB中内联函数借鉴了C语言中内联函数,使用内联函数能够降低调用时间和空间开销。因为内联函数是储存于内存中而不是在M文件中,省去了文件访问时间,加紧了程序运行效率。但内联函数只能定义一些简单函数表示式。若调用函数时包括数组运算,则定义函数时也要用数组运算!例:f=inline('x^2+y^2','x','y');y=f(2,3)23第23页匿名函数匿名函数定义fhandle=@

(输入参数列表)运算表示式例:f=@(x,y)x^2+y^2;y=f(2,3)匿名函数是Matlab7.0版提出一个全新函数描述形式,和内联函数类似,能够让用户编写简单函数而不需要创建M文件;它含有内联函数全部优点,而且效率比内联函数高。24第24页匿名函数p=3;q=5;f=@(x,y)x^p+y^q;y=f(2,3)p=2;q=4;f=@(x,y)x^p+y^q;%

当参数发生改变时,函数必须重新定义y=f(2,3)若调用函数时包括数组运算,则定义函数时也需要使用数组运算匿名函数支持变量替换f=@(x)x.^2+1;x=1:5;y=f(x)25第25页上机作业1、兔子繁殖问题:(Fibonaccinumber)假设每对大兔每个月生出一对小兔,且新生小兔满二个月后长成大兔就能生育,那么从刚出生一对小兔算起,12个月总共有多少对兔子?三年年底呢?试编写一个函数计算该题,其中输入为月数,输出为兔子对数。(函数名取为

m71)(只需交函数文件)2、编

温馨提示

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

评论

0/150

提交评论