Matlab 在匿名函数中用数字替换Inf

Matlab 在匿名函数中用数字替换Inf,matlab,conditional-statements,anonymous-function,Matlab,Conditional Statements,Anonymous Function,本文介绍了如何使用逻辑索引除去INF。问题是我没有数组;INF由匿名函数生成。我曾尝试使用嵌入式条件来消除它们,但用NaN替换Inf无法正常工作。以下是我的例子: fun = @(x) 1./x.*(x~=0)+10.*(x==0) 当x=0时,应该得到10,但在这种情况下,输出是NaN,因为Inf.*0=NaN。如果有任何建议,我将不胜感激。一个简单的解决方法是将条件移到分母中: fun = @(x) 1./( x.*(x~=0) + (x==0)/10 ); 一个简单的解决方法是将条件移

本文介绍了如何使用逻辑索引除去INF。问题是我没有数组;INF由匿名函数生成。我曾尝试使用嵌入式条件来消除它们,但用NaN替换Inf无法正常工作。以下是我的例子:

fun = @(x) 1./x.*(x~=0)+10.*(x==0)

当x=0时,应该得到10,但在这种情况下,输出是NaN,因为
Inf.*0=NaN
。如果有任何建议,我将不胜感激。

一个简单的解决方法是将条件移到分母中:

fun = @(x) 1./( x.*(x~=0) + (x==0)/10 );

一个简单的解决方法是将条件移动到分母中:

fun = @(x) 1./( x.*(x~=0) + (x==0)/10 );

我刚刚找到了另一个使用复数的解决方案

a = 1e-10*1j;    % very small imaginary number
fun = @(x) real(1./(x+a).*(real(x+a)~=0)+10.*(real(x+a)==0));

我刚刚找到了另一个使用复数的解决方案

a = 1e-10*1j;    % very small imaginary number
fun = @(x) real(1./(x+a).*(real(x+a)~=0)+10.*(real(x+a)==0));

如果替换及其逆是已知且简单的,这是一个很好的解决方案,如本例中的10。如果我放置另一个函数而不是10,可能会出现问题。无论如何,这不在问题的范围之内。如果替换和它的逆是已知的且简单的,这是一个很好的解决方案,如本例中的10。如果我放置另一个函数而不是10,可能会出现问题。不管怎么说,这是不可能的。因为我的大部分工作都是在现实中进行的,所以我总是忘记提供一个复杂的解决方案。由于我的大部分工作都在现实中,我总是忘记提供一个复杂的解决方案。