函数是一起执行任务的一组语句。在MATLAB中,函数是在单独的文件中定义的。文件名和函数名应该相同。
函数在其自己的工作空间(也称为本地工作空间)中对变量进行操作,与在MATLAB命令提示符下访问的工作空间(称为基本工作空间)不同。
函数可以接受多个输入参数,并且可以返回多个输出参数。
函数语句的语法是-
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
以下名为mymax的函数应写入名为mymax.m的文件中。它以五个数字作为参数,并返回最大的数字。
创建一个函数文件,命名mymax.m并在其中输入以下代码-
function max = mymax(n1, n2, n3, n4, n5) %此函数用于计算 %输入五个数字 max = n1; if(n2 > max) max = n2; end if(n3 > max) max = n3; end if(n4 > max) max = n4; end if(n5 > max) max = n5; end
函数的第一行以关键字 function开头 。它给出了函数的名称和参数的顺序。在我们的示例中,mymax函数具有五个输入参数和一个输出参数。
函数语句后的注释行提供帮助文本。当您键入以下内容时,将打印这些行:
help mymax
MATLAB将执行上述语句并返回以下结果-
This function calculates the maximum of the five numbers given as input
您可以将函数称为-
mymax(34, 78, 89, 23, 11)
MATLAB将执行上述语句并返回以下结果-
ans = 89
匿名函数就像传统编程语言中的内联函数一样,是在单个MATLAB语句中定义的。它由一个MATLAB表达式以及任意数量的输入和输出参数组成。
您可以直接在MATLAB命令行或在函数或脚本中定义匿名函数。
这样,您可以创建简单的功能,而不必为其创建文件。
从表达式创建匿名函数的语法是
f = @(arglist)expression
在此示例中,我们将编写一个名为power的匿名函数,该函数将两个数字作为输入,并将第一个数字提高为第二个数字的幂。
创建一个脚本文件并在其中键入以下代码-
power = @(x, n) x.^n; result1 = power(7, 3) result2 = power(49, 0.5) result3 = power(10, -10) result4 = power (4.5, 1.5)
运行文件时,它显示-
result1 = 343 result2 = 7 result3 = 1.0000e-10 result4 = 9.5459
必须在文件中定义除匿名函数以外的任何函数。每个函数文件都包含一个首先出现的必需主函数,以及在主函数之后并由其使用的任意数量的可选子函数。
可以从定义主文件的文件外部(从命令行或其他函数)调用主函数,但是不能从命令行或其他函数在功能文件外部调用子函数。
子函数仅对主函数和定义它们的函数文件中的其他子函数可见。
让我们写一个名为quadratic的函数来计算一个二次方程的根。该函数包含三个输入:二次系数、线性系数和常数项。它将回归根。
函数文件quadratic.m将包含主函数quadratic和子函数disc,后者计算判别式。
创建一个函数文件 quadratic.m 并在其中输入以下代码
function [x1,x2] = quadratic(a,b,c) %此函数返回 %二次方程。 %它需要3个输入参数 %x2,x和 %常数项 %它返回根 d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic function dis = disc(a,b,c) %函数计算判别式 dis = sqrt(b^2 - 4*a*c); end % end of sub-function
您可以从命令提示符处调用上述功能,如下所示:
quadratic(2,4,-4)
MATLAB将执行上述语句并返回以下结果-
ans = 0.7321
您可以在另一个函数的主体内定义函数。这些称为嵌套函数。嵌套函数包含任何其他函数的任何或所有组件。
嵌套函数在另一个函数的范围内定义,它们共享对包含函数的工作区的访问。
嵌套函数遵循以下语法-
function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end
让我们重写前面实例中的quadratic函数,不过,这次disc函数将是一个嵌套函数。
创建一个函数文件quadratic2.m,并在其中输入以下代码-
function [x1,x2] = quadratic2(a,b,c) function disc %嵌套函数 d = sqrt(b^2 - 4*a*c); end % 结束函数disc disc; x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end %结束函数 quadratic2
您可以从命令提示符处调用上述函数,如下所示:
quadratic2(2,4,-4)
MATLAB将执行上述语句并返回以下结果-
ans = 0.73205
私有函数是仅对有限的一组其他函数可见的主函数。如果不想公开函数function(s)的实现,可以将它们创建为私有函数。
私有函数位于具有特殊名称 Private 的子文件夹中。
它们仅对父文件夹中的函数可见。
让我们重写quadratic函数。不过,这一次,disc函数计算判别式,将是一个私有函数。
在工作目录文件夹中创建一个名为 private 的子文件夹,在其中存储以下函数文件 disc.m
function dis = disc(a,b,c) %函数计算判别式 dis = sqrt(b^2 - 4*a*c); end %子函数结束
在您的工作目录中创建一个函数 quadratic3.m ,并在其中输入以下代码-
function [x1,x2] = quadratic3(a,b,c) % 这个函数返回 % 一元二次方程。 它需要3个输入参数 % 它们是 x2,x 和 % 常数项 % 它返回根 d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end %结束 quadratic3
您可以从命令提示符处调用上述函数,如下所示:
quadratic3(2,4,-4)
MATLAB将执行上述语句并返回以下结果-
ans = 0.73205
全局变量可以由多个函数共享。为此,您需要在所有函数中将变量声明为全局变量。
如果要从基本工作空间访问该变量,请在命令行中声明该变量。
全局声明必须在变量实际在函数中使用之前发生。最好将大写字母用作全局变量的名称,以将其与其他变量区分开。
让我们创建一个名为average.m的函数文件,并在其中输入以下代码-
function avg = average(nums) global TOTAL avg = sum(nums)/TOTAL; end
创建一个脚本文件并在其中键入以下代码-
global TOTAL; TOTAL = 10; n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42]; av = average(n)
运行文件时,它将显示以下结果-
av = 35.500