函数文件
函数文件和之前的脚本文件类似,基本格式如下:
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
(这里面也可以有return语句)
1.当有多个形参时,形参之间用逗号分隔,组成形参表。
2.当输出形参多于一个时,应该用方括号括起来,构成一个输出矩阵。
3. 函数文件名通常由函数名再加上扩展名.m组成,函数文件名与函数名也可以不相同,这时以函数文件名为准,但为了理解方便,二者名字取一样。
函数调用:
调用是在命令行窗口或者脚本文件中进行的,调用格式:
[输出实参表]=函数名(输入实参表)
在调用函数时,函数输入输出参数称为实际参数,简称实参。
不能用矩阵代替输出实参表
function [s,l] = fcircle(r)
%UNTITLED9 此处显示有关此函数的摘要
% 此处显示详细说明 //Matlab中'%'相当于C中的'//',起注释作用
s=pi*r*r;
l=2*pi*r;
end //这时一个有返回值的函数
函数文件fcircle.m如上所示,在命令行窗口中进行调用
>> r=3;
>> [s,p]=fcircle(r) //[s,p]接收返回值
s =
28.2743
p =
18.8496
但是不能用矩阵代替[s,p],如下所示:
A =
[]
>> A=fcircle(r)
A =
28.2743 //这样就是错误的,必须用输出实参表的形式
匿名函数
基本格式如下:
函数句柄变量=@(匿名函数输入参数)匿名函数表达式
或者 函数句柄变量=@函数名
其中,@是函数句柄的运算符,第二种格式的函数名可以是内部函数或者自定义的函数。
直接在命令行窗口进行输入:
>> f=@(x,y) x^2+y^2
f =
包含以下值的 function_handle:
@(x,y)x^2+y^2
>> f(3,4)
ans =
25
>> h=@sin //sin函数是内部函数
h =
包含以下值的 function_handle:
@sin
>> h(pi/2)
ans =
1
例1:
用匿名函数写第一个f(n),函数文件写第二个f(n)
函数文件f2.m如下:
function f = f2(n)
f=0;
for i=1:n
f=f+i*(i+1);
end
脚本文件function1.m如下,在脚本文件中调用函数f1和f2,
f1=@(n) n+10*log(n*n+5); //Matlab中ln就是log,lg是log10
y1=f1(40)/(f1(30)+f1(20))
y2=f2(40)/(f2(30)+f2(20))
命令行窗口运行:
>> function1
y1 =
0.6390
y2 =
1.7662
思考:第一个函数f1可以用函数文件简单表示,但第二个函数f2怎么用匿名函数表示?好像不能。
函数的递归调用

例2:利用函数的递归调用求n!
函数文件fact.m如下:
function f = fact(n)
if n<=1
f=1;
else
f=fact(n-1)*n; %递归调用求(n-1)!
end
在脚本文件function2.m调用函数文件fact.m:
n=input('n=?');
s=fact(n);
disp(s)
例3:利用函数的递归调用求斐波那契数列
f1=1 f2=1
fn=fn-1+fn-2 (n>2)
函数文件ffib.m如下:
function f = ffib(n)
if n==1 || n==2
f=1;
else
f=ffib(n-1)+ffib(n-2);
end
在脚本文件function3.m调用函数文件ffib.m进行验证:
F=[];
n=input('n=?');
for k=1:n
F=[F,ffib(k)*ffib(k)];
end
front=sum(F)
behind=ffib(n)*ffib(n+1)
命令行窗口运行:
>> function3
n=?10
front =
4895
behind =
4895
函数参数的可调性
nargin,即输入参数的个数
nargout,即输出参数的个数
function f = test1(a,b,c)
% 这就像Java中函数的重载
if nargin==1
f=a;
elseif nargin==2
f=a+b;
elseif nargin==3
f=(a*b*c)/2;
end
建立函数文件test1.m,在命令行窗口进行测试:
>> test1(2)
ans =
2
>> f=test1(2,3,2)
f =
6
全局变量与局部变量
定义全局变量用global声明,所有的函数都可以对其存取和修改。
function f = wad(a,b)
global x y
f=x*a+y*b;
end
建立函数文件wad.m,并在命令行窗口进行测试:
>> global x y
>> x=1;
>> y=2;
>> s=wad(1,2)
s =
5