首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复匿名函数中的nan?

如何修复匿名函数中的nan?
EN

Stack Overflow用户
提问于 2018-08-03 03:28:05
回答 2查看 190关注 0票数 2

假设我定义了一个函数f(x),当它非常大时,比如x>100,它会给出nan。幸运的是,当为x>100时,我可以用另一个函数g替换f。所以我想定义一下:

代码语言:javascript
复制
h = @(x)isnan(f(x)).*f(x)+isnan(f(x)).*g(x)

然而,当我替换h(1001)时,它给出了nan。有没有可能定义h,让它提供g(1001)而不是nan?唯一的限制是我需要有匿名函数h供以后使用,比如说我想在集成中使用它,即integral(h,0,inf)

例如:假设我有一个函数:

代码语言:javascript
复制
f = @(x)x.*1./x

此函数非常简单,必须为1。我构造一个函数:

代码语言:javascript
复制
g = @(x)isnan(f(x)).*0+isnan(f(x)).*1

如何使g定义良好,以便我仍然可以评估integral(g,-1,1)?对于这个例子,我知道我可以很容易地计算它,但我的限制是我需要定义匿名函数g并使用integral来完成它。

EN

回答 2

Stack Overflow用户

发布于 2018-08-03 08:14:54

您需要创建一个常规函数,并将其与匿名函数包装在一起。

代码语言:javascript
复制
function r = ternary(a, b, c)
  if (a)
    r = b;
  else
    r = c;
  end
end

h = @(x)ternary(isnan(f(x)), g(x), f(x));

请注意,这将对您的函数求值两次。一种不太通用的解决方案,适用于您的特定情况,不会对函数进行两次计算。

代码语言:javascript
复制
function r = avoidNAN(a, b)
  if (isnan(a))
    r = b;
  else
    r = a;
  end
end
票数 1
EN

Stack Overflow用户

发布于 2018-08-03 20:01:37

有一个不需要任何附加功能的解决方案:

代码语言:javascript
复制
f = @(x)x.*1./x;
g = @(x)100+x;
h= @(x)getfield(struct('a',f(x),'b',g(x)),char(isnan(f(x))+'a'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51660881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档