目录
一、函数文件的基本结构
二、函数的调用
1.函数调用的格式
2.函数的递归调用
将特定的算法写成函数的形式,可以提高程序的可重复性和程序设计的效率。并且函数文件定义了输出参数和输入参数的对应关系,方便外部调用。事实上,MATLAB提供的标准函数都是由函数文件定义的。
一、函数文件的基本结构
函数文件由function语句引导,其基本结构如下:
function 输出参数表=函数名(输入参数表)
函数体语句
其中,以function开头的一行为引导行,表示定义一个函数;
函数名的命名规则与变量名的命名规则一样;
在函数定义时,输入输出参数没有分配储存空间,称为形式参数,简称形参。当有多个形参时,形参之间用逗号分隔,组成形参表。当输出形参多于一个时,应用方括号括起来,构成一个输出矩阵 ;
将函数文件以函数名.m存盘,然后在MATLAB命令行窗口调用该函数。
例,编写函数文件,求半径为 r 的圆的面积和周长。并求r=10时的情况。
程序如下:
function [s,c]=fcircle(r)
s=pi*r*r;
c=2*pi*r;
end
r=10时的情况如下:
>> [s,c]=fcircle(10)
s =
314.1593
c =
62.8319
二、函数的调用
1.函数调用的格式
函数文件建好之后,就可以调用该函数,调用格式如下:
[输出实参表]=函数名(输入实参表)
在调用函数时,函数输入输出参数称为实际参数,简称实参。
要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传给相应的形参,从而实现参数的传递,然后再执行函数的功能。
例,利用函数文件,实现直角坐标(x,y)与极坐标(
,
)之间的转换。转换公式为
程序如下:
function [rho,theta]=tran(x,y)
rho=sqrt(x*x+y*y);
theta=atan(y/x);
end
x=45,y=45时的情况如下:
>> [rho,the]=tran(45,45)
rho =
63.6396
the =
0.7854
实际上,MATLAB提供了直角坐标与极坐标之间的转换函数,发表如下。
(1)[th,r]=cart2pol(x,y):将直角坐标转换为极坐标。
(2)[x,y]=pol2cart(th,r):将极坐标转换为直角坐标。
>> [the,rho]=cart2pol(45,45)
the =
0.7854
rho =
63.6396
>> [x,y]=pol2cart(pi/4,45*sqrt(2))
x =
45.0000
y =
45
2.函数的递归调用
在MATLAB中,函数可以嵌套调用,即一个函数可以调用其他函数,甚至可以调用它自身。一个函数调用它自身称为函数的递归调用。
例1,利用函数的递归调用,求n!
n!本身就是以递归的形式定义的:
显然,要求n!需要求(n-1)!,这时可以采用递归调用。
程序如下:
function f=factor(n)
if n<=1
f=1;
else
f=n*factor(n-1); %递归调用求(n-1)!
end
n=5的情况如下:
>> f=factor(5)
f =
120
例2,在一个脚本文件main2.m中调用函数文件factor.m,求
程序如下:
s=0;
n=input('Please input n=');
for i=1:n
s=s+factor(i);
end
disp(['1到',num2str(n),'的阶乘和为:',num2str(s)])
n=5的情况如下:
>> main2
Please input n=5
1到5的阶乘和为:153