函数调用和参数传递(下)

函数的参数

MATLAB的函数调用过程实际上就是参数传递的过程。

函数调用的格式如下:

[输出参数1,输出参数2,…]=函数名(输入参数1,输入参数2,…)

1.参数传递规则

在MATLAB中,函数具有自己的工作空间,函数内变量与外界(包括其他函数和工作空间)的唯一联系就是通过函数的输入/输出参数。输入参数在函数中的任何变化,都仅在函数内进行,不会传递回去。

【例5.15】  修改画二阶系统时域的函数,使用输入/输出参数来实现参数传递,如图所示。

2.函数参数的个数

MATLAB函数的调用有一个与其他语言不同的特点是:函数的输入/输出参数的数目都可以变化,用户可以根据参数的个数编程。

(1)nargin变量和nargout变量。在MATLAB中有2个特殊变量:nargin和nargout。函数的输入/输出参数的个数可以通过变量nargin和nargout获得,nargin用于获得输入参数的个数,nargout用于获得输出参数的个数。

nargin  %在函数体内获取实际输入变量的个数

nargout  %在函数体内获取实际输出变量的个数

nargin('fun')  %在函数体外获取定义的输入参数个数

nargout('fun') %在函数体外获取定义的输出参数个数

【例5.16】计算2个数的和,根据输入参数个数的不同使用不同的运算表达式。

function[sum,n]=Ex0516(x,y)

%EX0516   参数个数可变,计算x和y的和

if nargin==1

sum=x+0;  %若输入1个参数就计算与0的和

else if nargin==0

sum=0;  %若无输入参数就输出0

sum=x+y;  %若输入的是2个数则计算其和

在命令窗口调用Ex0516函数,分别使用2个、1个和无输入参数,结果如下所示。

(向上滑动查看内容)

>>[y,n]=Ex0516(2,3)

>>[y,n]=Ex0516(2)

>>[y,n]=Ex0516

如果输入的参数多于输入参数个数,则会出错。

>>[y,n]=Ex0516(1,2,3)

???Errorusing==>ex0516

Toomanyinputarguments.

也可以在工作空间查看函数体定义的输入参数个数。

>>nargin('Ex0516')

【例5.16续】添加以下程序,查看用nargout变量获取输出参数个数。

if nargout==0%当输出参数个数为0时,运算结果为0

在命令窗口调用Ex0516函数,当输出参数格式不同时,结果如下。

>>Ex0516(2,3)  %当输出参数个数为0时

>>y=Ex0516(2,3)  %当输出参数个数为1时

>>[y,n,x]=Ex0516  %当输出参数个数太多时

???Errorusing==>ex0516

Too many out put arguments

(2)varargin变量和varargout变量。MATLAB还有2个特殊变量:varargin和varargout,可以获得输入/输出变量的各元素内容,varargin和varargout都是元胞数组。

【例5.16续】计算所有输入变量的和。

function[y,n]=Ex0516(varargin)

%EX0516  使用可变参数varargin

if nargin==0  %当没有输入变量时输出0

disp('NoInputvariables.')

elseif nargin==1

%当有一个输入变量时,输出该数

y=varargin{1};

y=varargin{m}+y;

%当有多个输入变量时,取输入变量循环相加

在MATLAB的命令窗口中输入不同个数的变量调用函数Ex0516,结果如下。

>>[y,n]=Ex0516(1,2,3,4)  %输入4个参数

>>[y,n]=Ex0516(1)  %输入1个参数

>>[y,n]=Ex0516  %无输入参数