📜  MATLAB 中的匿名函数

📅  最后修改于: 2022-05-13 01:55:44.588000             🧑  作者: Mango

MATLAB 中的匿名函数

以可重用整个程序的方式组织的代码块。函数用于减少编写代码的工作量,并使程序简短易懂。

在不同的编程语言中声明函数有不同的语法。在本文中,我们将专门围绕在 MATLAB 中声明函数的语法展开。

MATLAB 中的函数声明:

Matlab 具有不同类型的功能。一些函数是在几行中定义的,而一些函数则使用以函数命名的整个程序作为其声明。

句法:

function [i1,i2,...,in] = func_dec(o1,o2,...,om)

现在我们看到了 MATLAB 程序。在这个程序中,函数的名称是 funx_dec,因此您必须使用相同的名称保存文件,即 func_dec.m。这里,输入参数是 i1, i2, i3,…, in,输出参数是 o1, o2, o3, …, om。让我们通过实际实现来理解这个语法。

为此,我们创建了一个函数来查找三个数字中的最大值。

示例 1:

Matlab
% MATLAB program for function
function [ans] = greatest_no(x,y,z)
    if x > y
        if x>z
            ans = x;
        else
            ans = z;
        end
    else
        if y>z
            ans= y; 
        else 
            ans=z;
        end
    end
end


Matlab
% MATLAB code for anonymous function
cub = @(x) x.^3;


Matlab
% MATLAB code for function
% variable declaration
a = 3
b = 1
c = 43
para = @(x) a*(x*x) + b*x +c
% parabola equation
clear a b c


Matlab
% MATLAB code for no variable anonymous function
print = @() disp("This is an anonymous function.");
print();


Matlab
% MATLAB code with variable
expression = @(x) x*sqrt(x);
expression(4)


Matlab
% MATLAB Code anonymous function with more than one variable
expression = @(x,y,z) x.*3+y.*2-z;
expression(12,5,19)


Matlab
% MATLAB Code for Nested anonymous function
expression = @() integral(@(x) (12*x.^3 - 9*x.*2 + 2),1,6)
  
expression =
  
  function_handle with value:
  
    @()integral(@(x)(12*x.^3-9*x.*2+2),1,6)


Matlab
function y = functionHandle(fun,x)
    fun = fun(123);
    y = fun * x;
end


输出:

匿名函数:

匿名函数是 MATLAB 最强大的工具之一,因为它可以在没有 M 文件的情况下定义函数。与普通函数不同,MATLAB 中的匿名函数与变量相关联,而不是与文件相关联。当您为匿名函数声明变量时,该特定变量的 data_type 为 function_handle。

由于它是一个匿名函数,其值将存储在一个变量中,因此只能有一个输出,但是,它可能有很多输入。由于函数写在一行中,因此它只包含一个可执行语句。但是,为了执行多个语句,您可以在匿名函数。

句法:

func_name = @(inp_argu)math_exp
// The @ operator is used to initialize anonymous
 functions and handles function .

让我们通过一个查找立方体函数的例子来理解匿名函数的语法:

示例 2:

MATLAB

% MATLAB code for anonymous function
cub = @(x) x.^3;

输出:

这里的语法是匿名函数的初始化是用'@'完成的,后跟输入参数x,写在括号'()'之间,然后编写要执行的语句。

您还可以使用之前在匿名函数中声明的变量。即使您在声明匿名函数后清除变量,这些值仍然存在。让我们通过以下抛物线方程来理解这一点。

示例 3:

MATLAB

% MATLAB code for function
% variable declaration
a = 3
b = 1
c = 43
para = @(x) a*(x*x) + b*x +c
% parabola equation
clear a b c

输出:

我们既可以在命令行窗口中使用匿名函数,也可以在运行其他程序时调用它或通过命令行保存以供稍后加载。如果一个函数的使用次数有限,那么匿名函数非常适合。它也用于构造更高的功能。

现在让我们了解一下 Matlab 匿名函数的不同用法。

无变量的匿名函数:

我们甚至可以在不传递单个变量的情况下使用 Matlab 匿名函数。对于此类匿名函数,请将括号 () 留空。

示例 4:

MATLAB

% MATLAB code for no variable anonymous function
print = @() disp("This is an anonymous function.");
print();

输出:

ans: This is an anonymous function.

在这里,我们没有在输入甚至函数中使用任何变量。在这个函数中,我们甚至没有在函数中使用任何变量,但是,我们也可以通过评估它来分配任何值。

一个变量的匿名函数:

使用没有变量的 Matlab函数一点也不方便。我们不需要同样的事情一次又一次地发生,我们实际上需要随着时间的推移执行一些计算。对于这些,我们需要将一些变量放在括号下。我们有我们之前的变量 cub 示例,让我们有另一个查找示例 x\sqrt{x}  使用匿名函数。

示例 5:

MATLAB

% MATLAB code with variable
expression = @(x) x*sqrt(x);
expression(4)

输出:

ans: 8

具有多个变量的匿名函数:

在某些情况下,需要传递和评估多个变量。对于这种情况,我们可以在匿名函数中传递多个变量进行评估。让我们使用匿名函数计算表达式 {x^3+ y^2 – z} 。

示例 6:

MATLAB

% MATLAB Code anonymous function with more than one variable
expression = @(x,y,z) x.*3+y.*2-z;
expression(12,5,19)

输出:

ans = 27

嵌套匿名函数:

有时我们需要执行多行代码评估,在这种情况下,我们需要使用嵌套匿名函数。嵌套匿名函数首先评估内部函数,然后外部函数给出输出。让我们通过求解定积分 \int_{1}^{6} (12x^3 -9x^2+2) dx 的示例来理解这种函数之王。

示例 7:

MATLAB

% MATLAB Code for Nested anonymous function
expression = @() integral(@(x) (12*x.^3 - 9*x.*2 + 2),1,6)
  
expression =
  
  function_handle with value:
  
    @()integral(@(x)(12*x.^3-9*x.*2+2),1,6)

输出:

ans = 3580

将匿名函数作为函数句柄传递给其他函数:

对于高级函数的构造,我们可以将匿名函数作为函数句柄传递给其他函数。例如,创建一个函数句柄,其输入参数为 func(匿名函数的输出),x。

示例 8:

MATLAB

function y = functionHandle(fun,x)
    fun = fun(123);
    y = fun * x;
end

输出:

>> functionHandle(@(x) sqrt(x), 12) 
   ans = 133.0864