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) %This function calculates the maximum of the % five numbers given as input 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) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficients of x2, x and the %constant term % It returns the roots 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) %function calculates the discriminant 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) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
在您的工作目录中创建一个函数 quadratic3.m 并在其中键入以下代码 -
function [x1,x2] = quadratic3(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficient of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of 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
MATLAB