Matlab内联VS匿名函数

时间:2013-08-15 13:00:39

标签: matlab anonymous-function inline-functions

有没有充分的理由在MATLAB中使用内联函数和匿名函数之间进行选择?已经询问并回答了这个确切的问题here,但答案对新手MATLAB用户没有帮助,因为代码片段不完整,因此在粘贴到MATLAB命令窗口时它们不会运行。有人可以提供可以粘贴到MATLAB的代码片段的答案吗?

2 个答案:

答案 0 :(得分:8)

匿名函数替换了内联函数(如文档和您发布的链接中所述)

文档警告:

  

inline将在以后的版本中删除。使用匿名函数   代替。

答案 1 :(得分:2)

以下是我以自己的风格呈现Oleg's answer的方式:

案例1 - 使用参数a和参数xin

定义匿名函数
a = 1;
y = @(x) x.^a;
xin = 5;
y(xin) 
% ans =
%      5

案例2 - 更改工作空间中的参数a,以显示匿名函数使用原始值a

a = 3;
y(xin)
% ans =
%      5

案例3 - 如果内联函数和匿名函数包含定义时未定义的参数,则不能使用这些函数

clear all
y = @(x) x.^a;
xin = 5;
y(xin)
% ??? Undefined function or variable 'a'.

% Error in ==> @(x)x.^a

z = inline('x.^a','x');
z(xin)
% ??? Error using ==> inlineeval at 15
% Error in inline expression ==> x.^a
% ??? Error using ==> eval
% Undefined function or variable 'a'.
% 
% Error in ==> inline.subsref at 27
%     INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

案例4比较绩效并将a作为变量传递。

clear all;
y = @(x,a) x.^a;
ain = 2;
xin = 5;
tic, y(xin, ain), toc
% ans =
%     25
% Elapsed time is 0.000089 seconds.

tic, z = inline('x.^a','x','a'), toc
z(xin, ain)
% z =
%      Inline function:
%      z(x,a) = x.^a
% Elapsed time is 0.007697 seconds.
% ans =
%     25

在表现方面,匿名>>内联。