fla*_*awr 6 matlab vectorization anonymous-function
我使用匿名函数实现了一个分段函数,该函数也可以在向量或矩阵中进行求值:
f = @(x) exp(((x-.25).*(x-.75)).^-1) .* (.25 < x & x < .75);
Run Code Online (Sandbox Code Playgroud)
问题是在准确评估时,0.25或者0.75我们试图评估Inf * 0哪些结果NaN.我想将这些NaN值设置为零.我知道这可以使用文件中定义的函数轻松完成,但我想知道是否有一个解决方案可以让你进行内联.(可能定义其他匿名帮助函数.)
为了摆脱它们NaN,你可以利用像maxignore 这样的函数NaN:
>> max(NaN, 0)
ans =
0
Run Code Online (Sandbox Code Playgroud)
它也适用于矢量化:
>> max([1 2 NaN 4], 0)
ans =
1 2 0 4
Run Code Online (Sandbox Code Playgroud)
您正在使用的数学函数是非负数.因此,如果y是由您的问题中定义的匿名函数生成的数组,max(y, NaN)将保留y未触及的数字条目,并将转换NaN为0.
总之,修改匿名函数以包含外部max(..., 0):
f = @(x) max(exp(((x-.25).*(x-.75)).^-1) .* (.25 < x & x < .75), 0);
Run Code Online (Sandbox Code Playgroud)
例如,这给出了
>> f([.2 .25 .4 .5 .6 .75 .8])
ans =
1.0e-06 *
0 0 0.0053 0.1125 0.0053 0 0
Run Code Online (Sandbox Code Playgroud)