【问题标题】:Overflow error in piecewise lambda function分段 lambda 函数中的溢出错误
【发布时间】:2017-03-14 03:38:38
【问题描述】:

我正在使用 numpy 为自定义 ODE 求解器编写分段函数。

我想要一个指数衰减的函数,但是在一段时间之前t0 我希望该函数完全为零。这是一些示例代码,可以满足我的要求

t0 = 50.0
myF = lambda t:  np.piecewise(float(t), [t<t0, t>=t0],[0, math.pow( math.e ,-(t-t0) ) ] )
print myF(0)

但是,如果我创建t0=1000,则会出现溢出错误

t0 = 1000.0
myF = lambda t:  np.piecewise(float(t), [t<t0, t>=t0],[0, math.pow( math.e ,-(t-t0) ) ] )
print myF(0)

我假设如果我将它分段为函数,如果条件不成立,它就不会调用表达式。但是,似乎确实如此。无论如何,我可以防止这种情况并且没有溢出错误阻止我的代码运行?

为清楚起见编辑:当我调用这个 lambda 函数时,它似乎同时调用了两个条件,'0' 和 'math.e ,-(t-t0)' 然后只返回'0'。问题是当't0 = 1000'时,当't = 0'时值溢出。我希望能够在没有溢出错误的情况下调用 't =0'。

【问题讨论】:

  • 它应该是t &lt; t0而不是t &lt; 0吗?因为否则t = 0 不满足分段定义中的两个条件中的任何一个...
  • 仅供参考:您应该使用math.exp(-(t - t0)),而不是math.pow( math.e ,-(t-t0) );见math.exp
  • @Praveen,是的,实际上应该是,'t

标签: python-2.7 numpy


【解决方案1】:

你可以这样写:

t0 = 1000.0;
myF = lambda t: 0.0 if t<0.0001 else math.pow( math.e ,-(t-t0) ) 
print(myF(0))

请注意,我将您的 0 更改为 0.0001,因为您的输入不满足任何条件 [t=t0](因为您没有 0

【讨论】:

  • 对不起,我的情况应该是't
  • 如果您运行我提供的答案(使用 t0 而不是 0.0001)怎么办?我在 python2 和 python3 上都试过了,它对我有用......
  • 我玩过您的代码,现在可以使用了!即使有,'t
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2013-09-16
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
相关资源
最近更新 更多