MATLAB 函数


什么是函数

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

函数在它们自己的工作区(也称为本地工作区)中对变量进行操作,工作区与我们通过MATLAB命令提示符访问的工作区(称为基本工作区)是分开的。

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

函数语句的语法


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

举例

下面的mymax函数应该写入一个名为mymax.m的文件中。它接受5个数字作为参数,并返回数字的最大值。

创建一个函数文件,命名为mymax.m,并在其中键入以下代码 :


function max = mymax(n1, n2, n3, n4, n5)
%该函数接受5个数字作为参数,并返回数字的最大值
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函数有五个输入参数和一个输出参数。

紧跟在function语句之后的注释行提供了帮助文本。这些行是在你输入以下命令 时会显示出来:


help mymax

MATLAB将执行上述语句并返回以下结果 :


该函数接受5个数字作为参数,并返回数字的最大值

调用函数的方式:


mymax(34, 78, 89, 23, 11) %括号内为接受的五个数据
%结果:
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.m 文件。并在其中键入以下代码


function [x1,x2] = quadratic(a,b,c)

% 该函数返回二次方程的根
% 需要三个输入数据:x2和x的系数以及常数项
% 最后函数会返回方程的根
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % 二次方程结束
function dis = disc(a,b,c) 
% 计算判别式的函数
dis = sqrt(b^2 - 4*a*c);
end   % 子函数结束

quadratic(2,4,-4)
%结果:
ans = 0.7321

嵌套函数

可以在一个函数的体中定义函数,这些函数称为嵌套函数。嵌套函数包含任何其他函数的任何或所有组成。

嵌套函数在另一个函数的范围内定义,它们共享对包含函数的工作区的访问。

嵌套函数语法


function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

实例

对前面的例子重写二次函数,然而,这次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)  %调用
%结果:
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的系数以及常数项
% 返回函数的根
d = disc(a,b,c); 

x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      % quadratic3结束

调用函数:


quadratic3(2,4,-4)
%结果:
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 函数 ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注