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.m将包含的主要函数二次和子函数盘,其计算的判别。
    创建一个函数文件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 函数

    私有函数是仅对有限的其他函数组可见的主要函数。如果您不想公开某个函数的实现,则可以将它们创建为私有函数。
    专用函数驻留在具有特殊名称private的子文件夹中。
    它们仅对父文件夹中的函数可见。
    让我们重写二次函数。但是,这次,计算判别式的光盘函数将是私有函数。
    在工作目录中创建一个名为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