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 示例,让我们有另一个查找示例使用匿名函数。
示例 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