返回介绍

Functions

发布于 2021-06-01 15:10:52 字数 5120 浏览 957 评论 0 收藏 0

函数是一组一起执行任务的语句。 在MATLAB中,函数在单独的文件中定义。 文件和函数的名称应该相同。

函数对自己工作空间中的变量进行操作,该工作空间也称为local workspace ,与您在MATLAB命令提示符(称为base workspace访问的工作local workspace分开。

函数可以接受多个输入参数,并且可以返回多个输出参数。

函数语句的语法是 -

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

例子 (Example)

以下名为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

例子 (Example)

在这个例子中,我们将编写一个名为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

主函数和子函数 (Primary and Sub-Functions)

必须在文件中定义除匿名函数之外的任何函数。 每个函数文件都包含一个首先出现的必需主函数和任何数量的可选子函数,它们位于主函数之后并由它使用。

可以从命令行或其他函数从定义它们的文件外部调用主函数,但不能从函数文件外部的命令行或其他函数调用子函数。

子函数仅对主函数和定义它们的函数文件中的其他子函数可见。

例子 (Example)

让我们编写一个名为二次的函数来计算二次方程的根。 该函数将采用三个输入,二次系数,线性系数和常数项。 它会回归根源。

函数文件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

例子 (Example)

让我们从前面的例子中重写quadratic函数,但是,这次盘函数将是一个嵌套函数。

创建一个函数文件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 Functions)

私有函数是主要功能,仅对有限的一组其他函数可见。 如果您不想公开函数的实现,可以将它们创建为私有函数。

私有函数驻留在具有特殊名称private subfolders

它们仅对父文件夹中的函数可见。

例子 (Example)

让我们重写quadratic函数。 然而,这次计算判别式的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

全局变量 (Global Variables)

全局变量可以由多个函数共享。 为此,您需要在所有函数中将变量声明为全局变量。

如果要从基础工作空间访问该变量,请在命令行声明该变量。

全局声明必须在变量实际用于函数之前发生。 最好使用大写字母表示全局变量的名称,以便将它们与其他变量区分开来。

例子 (Example)

让我们创建一个名为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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文