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)
MATLAB 将执行上述语句,并返回以下结果:
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