如何在匿名函数中使用条件

Jes*_*ica 6 matlab if-statement inline function anonymous-function

函数可以定义为@(x) x^.2(例如)

但是在这种情况下,我们有一个函数,在不同的时间间隔上采用不同的表示形式, if abs(x)<3 fun = x^.2 else 0

我们如何使用相同的方式(我的意思是使用@(x))来定义这样的函数.

Rod*_*uis 17

有几种方法可以做到这一点.

乘以假:

g = @(x) (abs(x)<3) .* x.^2
Run Code Online (Sandbox Code Playgroud)

或者定义一个合适的功能(真正的最佳方式):

function y = g(x)

    y = zeros(size(x), class(x));

    inds = abs(x)<3;
    y(inds) = x(inds).^2;

end 
Run Code Online (Sandbox Code Playgroud)

或者做一些乱七八糟的低效但有趣的事情并使用内联 - 如果:

iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, 'first')}();
g = @(x) iff( ...
    abs(x)<3,  x.^2, ...
        true,  0);
Run Code Online (Sandbox Code Playgroud)

  • 更多解释:当您想要避免计算未被选中的其他部分时,甚至需要正确的功能; 例如:`iif(x == 0; 0; 1/x)'这里`1/x`仍然被评估,即使`x == 0`.这是一个函数,matlab仍然希望将所有参数传递给它,因此评估.避免这种情况的唯一方法(这就是为什么它是最好的,正确的方法)是通过使用一个单独的函数,它允许多行和正常的`if`. (2认同)