MATLAB - 函数
函数是一组共同执行任务的语句。 在 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 和 x2 的系数 % 常数项 % 返回根 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 % nested function d = sqrt(b^2 - 4*a*c); end % end of function disc disc; x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of function quadratic2
您可以从命令提示符调用上述函数: −
quadratic2(2,4,-4)
MATLAB 将执行上述语句并返回以下结果 −
ans = 0.73205
私有函数
私有函数是仅对有限的其他函数组可见的主要函数。 如果您不想公开函数的实现,可以将它们创建为私有函数。
私有函数驻留在具有特殊名称private的子文件夹中。
它们仅对父文件夹中的函数可见。
示例
让我们重写二次函数。 然而,这一次,计算判别式的 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 和 x2 的系数 % 常数项 % 返回根 d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % 二次方程3的结尾
您可以从命令提示符调用上述函数 −
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