Matlab内联函数与匿名函数

Matlab内联函数与匿名函数,matlab,anonymous-function,inline-functions,Matlab,Anonymous Function,Inline Functions,在MATLAB中选择使用内联函数还是匿名函数,有什么好的理由吗?这个确切的问题已经被提出和回答,但是这个答案对新手MATLAB用户没有帮助,因为代码片段不完整,所以粘贴到MATLAB命令窗口时它们不会运行。有人能提供一个答案,并将代码片段粘贴到MATLAB中吗 匿名函数取代了内联函数(如文档和您发布的链接中所述) 文件警告: 内联将在将来的版本中删除。使用匿名函数 相反 以下是我将以自己的风格呈现的方式: 案例1-使用参数a和参数xin a = 1; y = @(x) x.^a; xin = 5

在MATLAB中选择使用内联函数还是匿名函数,有什么好的理由吗?这个确切的问题已经被提出和回答,但是这个答案对新手MATLAB用户没有帮助,因为代码片段不完整,所以粘贴到MATLAB命令窗口时它们不会运行。有人能提供一个答案,并将代码片段粘贴到MATLAB中吗

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

文件警告:

内联将在将来的版本中删除。使用匿名函数 相反


以下是我将以自己的风格呈现的方式:

案例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

就性能而言,匿名>>内联。

也许这包含了您想要的内容:“但是答案没有帮助,因为代码片段不完整,所以粘贴到MATLAB命令窗口时它们不会运行”这不是真的。仔细阅读答案。不,这正是我在问题链接中发布的问答。我无法运行Oleg答案中不完整的代码段,如果无法运行代码,我就无法理解答案。@OlegKomarov,您没有定义x。因此,我不能简单地复制和粘贴你的答案,以了解问题的关键。你让你的读者承担了很大的责任去弄清楚你想展示什么,这可以通过对你的答案做一个很小的改变来解决。@Chad在Oleg的第1步中,
x
被匿名函数定义为它的输入参数。因此,这是100%完成。对于步骤2,
x
可以是任何内容。使用
x=2
可能是最简单的。我认为重点是比较设置
a=3
前后的
y(2)
。试试看,好极了。这是一个建设性的回答。我的MATLAB版本已经足够旧了,文档中没有这个版本,但它是有意义的。@Chad这也在你发布的链接中,作为对Oleg答案的评论。我想我在试图弄清楚代码片段在做什么的过程中失败了。如果你真的想非常清楚,然后不要在匿名函数和主代码中都使用
x
。函数中的
x
无论如何都是一个伪变量。另外,您应该在匿名函数之后定义
x=5
。但就我个人而言,我发现奥列格的答案非常清楚,非常诚实。你完全没有理解匿名函数的意义。请先阅读文档,然后通过“清理”我的答案来引入混淆。此外,代码开头的用于指示目的的
清除所有
完全被误用和冗余。我对其进行了编辑,以表明必须在定义函数之前定义参数。它还显示函数中的参数没有绑定到基本工作空间。最后,它显示了参数变量可以在定义函数后传递给函数。我还完成了发布一个将在MATLAB命令窗口中运行的答案的目标。我感谢您详细阐述我的答案,我的答案以个人风格简洁明了(通常根据海报的推断知识进行裁剪)。如果你用“详细阐述”、“扩展”或类似的词语来修改“清理”,我会很高兴扭转否决票。顺便说一句,我完全同意你改进了我的答案,我只是不知道怎么会有任何东西需要清理,因为它已经很小了。