函数调用和参数传递

子函数与私有函数

1.子函数

在1个M函数文件中,可以包含1个以上的函数,其中只有一个是主函数,其他均为子函数。

(1)在1个M文件中,主函数必须出现在最上方,其后是子函数,子函数的次序无任何限制。

(2)子函数不能被其他文件的函数调用,只能被同一文件中的函数(可以是主函数或子函数)调用。

(3)同一文件的主函数和子函数变量的工作空间相互独立。

(4)用help和lookfor命令不能提供子函数的帮助信息。

【例5.13】  将画二阶系统时域曲线的函数作为子函数,编写画多条曲线的程序。

function Ex0513()

%EX0513 使用函数调用绘制二阶系统时域响应

Ex0512(z1); %调用Ex0502

Ex0512(z1) %调用Ex0502

Ex0512(z1) %调用Ex0502

functiony=Ex0512(zeta)

%子函数,画二阶系统时域曲线

x=0:0.1:20;

y=11/sqrt(1zeta^2)*exp(zeta*x).*sin(sqrt(1zeta^2)*x+acos(zeta))

2.私有函数

私有函数是指存放在private子目录中的M函数文件,具有以下性质。

(1)在private目录下的私有函数,只能被其父目录的M函数文件所调用,而不能被其他目录的函数调用。私有函数对其他目录的文件是不可见的,私有函数可以和其他目录下的函数重名。

(2)私有函数父目录的M脚本文件也不可调用私有函数。

(3)在函数调用搜索时,私有函数优先于其他MATLAB路径上的函数。

根据私有函数的特点,可在自己的工作目录下建立1个private子目录,但不要添加到MATLAB的搜索路径中。

3.调用函数的搜索顺序

在MATLAB中调用1个函数,搜索的顺序如下。

(1)查找是否为子函数。

(2)查找是否为私有函数。

(3)从当前路径中搜索此函数。

(4)从搜索路径中搜索此函数。

局部变量和全局变量

1.局部变量

局部变量(Local Variables)是在函数体内部使用的变量,其影响范围只能在本函数内;每个函数在运行时,都占用独立的函数工作空间,此工作空间和MATLAB的工作空间是相互独立的。局部变量仅存在于函数的工作空间内,只在函数执行期间存在,当函数执行完变量就消失。

2.全局变量

全局变量(Global Variables)是可以在不同的函数工作空间和MATLAB工作空间中共享使用的变量。

全局变量在使用前必须用global定义,而且每个要共享全局变量的函数和工作空间,都必须逐个用global对变量加以定义。

【例5.14】修改【例5.13】在主函数和子函数中使用全局变量。

function Ex0514()

%EX0514  使用全局变量绘制二阶系统时域响应

X=0:0.1:20;

Ex0512(z1);

Ex0512(z1);

Ex0512(z1);

function Ex0512(zeta)

%子函数,画二阶系统时域曲线

y=1-1/sqrt(1-zeta^2)*exp(-zeta*X).*sin(sqrt(1-zeta^2)*X+acos(zeta));

程序分析:X变量为全局变量,在需要使用的主函数和子函数中都需要用global定义;同样,如果在工作空间中定义X为全局变量后也可以使用。