位置:首页 > 高级语言 > Matlab在线教程 > MATLAB函数

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 函数有5个输入参数和一个输出参数。

注释行语句的功能后提供的帮助文本。这些线条打印,当输入:

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.7321

私有函数

一个私有函数是一个主要的函数,是只看得见一组有限的其它函数。如果不想公开的执行的一个函数,可以创建私有函数。

私有函数驻留特殊的名字私人的子文件夹中。

他们是可见的,只有在父文件夹的函数。

例子

让我们重写quadratic 函数。然而,这时候,计算​​的判别式disc 函数,这是一个私有函数。

创建一个子文件夹命名为私人工作目录。它存储在以下函数文件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-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 quadratic3

可以从命令提示符调用上面的函数为:

quadratic3(2,4,-4)

MATLAB将执行上面的语句,并返回以下结果:

ans =
    0.7321

全局变量

全局变量可以共享由一个以上的函数。对于这一点,需要将变量声明为全局在所有的函数可使用。

如果想访问该变量从基工作区,然后在命令行声明的变量。

全局声明必须出现在变量中实际上是使用功能。这是一个很好的做法是使用大写字母为全局变量的名称,以区别于其他变量。

例子

让我们创建一个函数文件名为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.5000