MATLAB自定义函数
1.创建单输入/输出和多输入/输出自定义函数
2.在工具箱中保存或调用自定义函数
3.创建和使用匿名函数
4.创建和使用函数句柄
5.创建和使用子函数和嵌套函数
1.创建函数的M文件
1)创建自定义函数
如图所示,在新建选项中选择新建函数
输入以下脚本,保存为poly.m
function output = poly( x )
%UNTITLED 此处显示有关此函数的摘要
% 此处显示详细说明
output = 3 * x .^ 3 + 5 * x ^ 2 - 2 * x + 1;
end
注意:调用函数前,必须将函数的文件先保存到当前目录中,为了便于查找,文件名必须和函数名相同。函数的命名应该遵循前面介绍过的MATLAB的命名规则。
调用函数执行:
>> poly(4)
ans =
265
2)注释
创建函数:
function output = tag( number )
%这个函数是一个自定义函数
% 我的自定义函数tag
output = number * number + 2 * number * 4;
end
使用help命令可以输出函数的注释内容
>> help tag
这个函数是一个自定义函数
我的自定义函数tag
3)多输入输出函数
定义函数motion.m
function [ dist,vel,accel ] = motion( t )
% UNTITLED4 此处显示有关此函数的摘要
% 此处显示详细说明
accel = 0.5 .* t;
vel = accel .* t;
dist = vel .* t;
end
执行:
>> [accel,vel,dist] = motion(10)
accel =
500
vel =
50
dist =
5
若调用motion时没有指定全部三个输出变量,则只输出第一个变量
>> motion(10)
ans =
500
4)没有输入或输出变量的函数
大部分函数都至少有一个输入或输出变量,但有的函数没有输入或输出变量。
例如:MATLAB函数clock没有输入变量但有输出变量
>> A = clock
A =
1.0e+03 *
2.0150 0.0050 0.0180 0.0100 0.0520 0.0310
5)确定输入/输出变量的数目
函数nargin可以确定输入变量的数目,函数nargout可以确定输出变量的个数。
>> nargin('sin')
ans =
1
>> nargin('rem')
ans =
2
有些函数的输入变量个数是不确定的,这时函数会输出负数
>> nargin('surf')
ans =
-1
6)局部变量
函数的M文件中的所有变量都称为局部变量。工作区与函数之间进行交互的唯一方式是利用输入变量和输出变量,在函数体中定义的所有变量仅允许函数自己使用。
7)全局变量
与局部变量不同,全局变量是整个程序的变量,但一般情况下不定义全局变量。在命令窗口或脚本M文件定义的变量都是全局变量,为了避免用户无意中使用全局变量,要求在函数中使用全局变量时必须进行特殊申明。
函数:
function output = tag( number )
global G
output = number * G;
end
调用:
>> global G
>> G = 9
G =
9
>> tag(4)
ans =
36
2.创建函数工具箱
调用MATLAB函数时,首先在当前路径中查找该函数,如果没有找到,则按照预先设定的搜索路径查找函数名。设置搜索路径的方法是在主菜单中点击File- Set path,或者输入命令pathtool
。
随着程序中函数数量的增加,通常会把相关文件存放在用户的个人工具箱中,并设置相应的搜索路径。录入把前面的函数保存在My_function目录中。
在对话框中单击ADD Folder来添加文件夹,即可将自己的目录添加进去。
MATLAB先在当前路径中查找函数,然后,再根据修改后的搜索路径查找。
除非设置成永久路径,否则修改的路径只能在当前对话中有效。
在路径设置工具中可以采用交互式的方法修改MATLAB的搜索路径,使用函数addpath
可以添加新的搜索路径。使用函数help addpath
可以查看addpath的使用方法。
3.匿名函数和函数句柄
匿名函数是一种简单的函数构造方法。用户可以直接在命令窗口或脚本M文件中定义和使用匿名函数,匿名函数看起来更像是一个变量,只要不清空工作区,匿名函数都是有效的
>> ln = @(x) log(x)
ln =
@(x)log(x)
>> ln(4)
ans =
1.3863
匿名函数ln
当做变量用以下语句保存和使用:
>> save ln_function ln
>> load ln_function
4.复合函数
绘图函数fplot就是MATLAB中的内置复合函数,它要求有两个输入参数:一个输入参数是函数或函数句柄,另外一个输入参数是函数的取值范围。
>> ln
ln =
@(x)log(x)
>> fplot(ln,[0.1,10])
如果不使用函数句柄,则可以直接使用字符串表示函数名:
>> fplot('log(x)',[0.1,10])
运行效果如上图。
【example】
在上面的例子中,使用函数句柄的优越性并没有体现出来。但是,如果匿名函数是计算五阶多项式的值:
>> poly5 = @(x) -5*x .^ 5 + 400 * x .^ 4 + 3 * x .^ 3 + 20 * x .^ 2 - x * 5
poly5 =
@(x)-5*x.^5+400*x.^4+3*x.^3+20*x.^2-x*5
>> fplot(poly5,[-30,90])
5.子函数
在同一个文件中,除了主函数外还可以创建多个子函数。子函数智能被主函数调用,因此子函数的使用时受限制的。使用子函数有利于程序的模块化,能够使程序的可读性增强。
每一个MATLAB的M文件只能有一个子函数,并且M文件名必须和主函数名相同。因此存储在M文件my_function.m中的主函数名必须是my_function。主函数之后可以定义任何合法的子函数,子函数的命名规则与变量的命名规则相同。
function [add_result,sub_result] = myfunction(x,y)
add_result = add(x,y);
sub_result = sub(x,y);
end
function result = add(x,y)
result = x + y;
end
function result = sub(x,y)
result = x - y;
end
>> [addres,subres] = myfunction(10,3)
addres =
13
subres =
7