在Matalb中使用函数可以把一个较大的任务分解为多个较小的任务,我这个Big project就是由个数多到我都不愿意看的一个个子函数构成的。每个子函数完成特定的功能,通过函数的调用完成整个任务。
1.子函数:
(1)在一个M文件中,可以包含一个以上的函数,其中只有一个是主函数,其他的函数都是子函数。
(2)在一个M文件中,子函数必须出现在最上方,其后是子函数,子函数的次序没有任何限制。
(3)子函数不能被其他文件的函数调用,只能被同一文件中函数调用。
(4)同一文件的主函数和子函数变量工作空间相互独立。
案例:编制一个函数,要求输入两个数值后,用第一个子函数求积,第二个子函数求和,再将这两个值求差的绝对值。
function f=jueduicha(x,y)
f=abs(ji(x,y)-he(x,y));
%子函数2
function f1=ji(x,y)
f1=x.*y;
%子函数2
function f2=he(x,y)
f2=x+y;
>> f=jueduicha(2,3)
f =
1
2.私有函数:
私有函数是指放在private子目录中的M函数文件。
(1)在private目录下的私有函数,只能被其父目录中的M函数文件所调用,而不能和其他目录中的函数调用,对其他目录中额文件私有函数是不可见的,所以私有函数可以和其他目录中下的函数重名,不过过冷书不建议大家重名命名函数,过冷书的Big project 就深受其苦。
(2) 私有函数目录的M脚本文件也不可调用私有函数。
(3) 在函数搜索时,私有函数优于其他Matlab路径上的函数。
以前在过冷水的推文中从来没有和大家讲过局部变量和全局变量这个概念,在引进函数后,就需要注意了。根据变量的作用域不同,可以将Matlab程序的变量分为局部变量和全局变量。
局部变量:局部变量是在函数内部使用的变量,其影响范围只能在本函数内;每个函数运行时都占用独立的函数工作空间,此空间和Maltlab的工作空间是相互独立的,局部变量仅存在于函数的工作空间内。局部变量只在函数执行期间存在,当函数执行完毕时,局部变量就消失。
全局变量:全局变量是可以在不同函数工作空间和Matlab工作空间中共享使用的变量。全局变量在使用时必须用global定义,而且每个共享全局变量的函数和工作空间都必须逐个用global对变量加以定义。
function u=quanju(t)
global X
X=1;
t=t;
u=quanju1(t);
function u=quanju1(t)
global X
u=X-t;
>> u=quanju(3)
u =
-2
function u=quanju(t)
global X
X=1;
t=t;
u=quanju1(t);
function u=quanju1(t)
u=X-t;
u=quanju(3)
未定义函数或变量 'X'。
出错 quanju>quanju1 (line 8)
以上就是全局变量的使用方式,定义后需要再次定义才能识别。这在自写函数中很容易犯错。
Matalb函数调用过程实际上就是参数传递的过程,传递方式为按值传递。
[输出参数1,输出参数2,....]=函数名[输入参数1,输入参数2,....]
1.参数传递规则
在Matlab中函数具有自己的工作空间,函数内变量与外界的唯一联系就是通过函数的输入输出参数。输入参数在函数中的任何变化,都仅在函数内进行,不会传递回去。
function [u,v]=canshu(x,y,z)
u=x*y;
v=x.^z;
>> [u,v]=canshu(1,2,3)
u =
2
v =
1
2.函数参数的个数
在Matalb中输入输出函数的个数是可以变化的,用户可以根据参数的个数来编程。
(1)nargin 和nargout 变量,
调用格式:nargin:功能:在函数体内获取实际输入变量的个数。
调用格式:nargout:功能:在函数体内获取实际输出变量的个数。
调用格式:nargin(’fun’):功能:在函数体外获取实际输入变量的个数。
调用格式:nargout(‘fun’):功能:在函数体外获取实际输出变量的个数。
function c=canshugeshu(a,b)
if nargin ==1;
c=a.^2;
elseif nargin ==2;
c=a+b;
end
>> c=canshugeshu(2,3)
c =
5
>> c=canshugeshu(3)
c =
9
本期过冷水的讲解就这么多,一点一点通识知识,之后就是实例分析,感兴趣的持续关注Matlab爱好者平台的推文。