当使用代码时,遇到一片段很多并且使用率非常高时,我们就可以用到函数来封装他,每次调用他的时候,就只要调用函数名就可。Matlab也提供了函数的实现。
1.自定义函数
当系统自带的函数不能满足当前需求时,我们就可以像Java一样声明一个新的方法。Matlab也可以做同样的事。
函数是写在一个.m后缀文件里的,并且一个文件只能有一个函数。
新建脚本之后,就会出现一个编辑器框。在此框写你要自定义函数的内容。
函数格式为:
% 函数 % function [返回值] = 函数名(形参) % 函数体执行语句
其中函数名最好跟文件名一致,如果你提前写好了函数名,保存文件时会默认为该文件名。
形参为你要传入的元素,如果有多个则按照逗号排好(a,b)。
形参就是你需要跟随调用函数时传进来的参数矩阵,并且可以在该函数体内使用的。
返回值如果有多个的话,就要用[ ]中括号,变量之间的排列也用 , 连接。
如:我要实现一个a矩阵和b矩阵交换的函数。并且返回两个矩阵 。
保存之后就会提示你重命名
保存之后,自定义函数就写好了。
我们来进行测试一下。
在脚本文件或者命令行窗口调用函数时,直接使用 接受返回值的矩阵 = 函数名(实参) ,实参就是需要传入函数中的值,返回的值就会依次赋给左边的变量矩阵。
A = [1:10]; B = [1;2;3]; [A,B] = exchange(A,B)
运行之后, 我们可以发现A矩阵和B矩阵的值交换了 。
这种方式创建函数,是允许函数重载。那么对于函数重载时,如何控制函数主体内容的实现可以用nargin 和nargout 。这两个可以捕捉到是如何调用函数的,一个记录传入参数的个数,一个记录函数返回参数的个数。
nargin 返回当前调用该函数之后传入参数的个数。
nargout 返回调用该函数之后函数返回的参数的个数。
我们来试一下。
创建test_nargin.m文件
function [a,b] = test_nargin(a,b) if nargin == 0 disp('没有参数传入'); elseif nargin==1 disp('有一个参数传入'); elseif nargin ==2 disp('有两个参数传入'); end
对于命令行窗口分别执行:
创建test_nargout.m
function [a,b] = test_nargout() if nargout ==0 disp('调用函数返回0参数'); elseif nargout ==1 disp('调用函数返回1参数'); elseif nargout==2 disp('调用函数返回2参数'); end
来调用一下函数。
当发现自定义函数需要重新创建一个文件夹存放可能有点麻烦时,并且感觉简单的自定义函数没必要这样大张旗鼓的话,可以试试下面两种函数。下面两个函数就有一个不安全的问题,可以使用在函数外已经定义过的变量可以被使用。
2.inline函数
直接可以在命令行或脚本文件定义函数的。
%inline函数 函数名 = inline('函数表达式','自变量'); %自变量就是你需要传入的参数
其中,自变量就是上述的形参,你需要传入的值,并且可以在函数表达式中当已知量使用,当自变量很多时,可以用,隔开。如 inline('函数表达式','自变量1','自变量2')
我们来测试一下,写一个返回1-n之和的函数。
fsum = inline('sum(1:n)','n'); b = fsum(100)
不出所料b的值变成了5050
3.匿名函数
函数名= @(自变量)函数表达式 %其中自变量就是需要传入的参数
开头一个@ ,加一个被小括号包围的传入的参数。函数表达式不需要小括号和' '包围,可以直接写一个公式。
照样写一个例子,求返回1-n之和的函数
fsum_1 = @(n)sum(1:n); c = fsum_1(100)
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删