首页 > 解决方案 > 反幂律的lambdify积分解

问题描述

我正在使用 sympy 来评估 1/t^p 形式的积分,然后对表达式进行lambdify 来评估它。在 p=1 时计算,分辨率表达式应返回 ln(t),但会返回 ZeroDivisionError。我希望我需要围绕 p=1 扩展解决方案。这是必要的吗?如何解决这个问题?

>> expr = integrate(1/t**p,t)
>> expr
Out: 
⎧ 1 - p           
⎪t                
⎪──────  for p ≠ 1
⎨1 - p            
⎪                 
⎪log(t)  otherwise
⎩                 

>> lam_expr = lambdify((t,p),expr)
>> lam_expr(10,1)
Traceback (most recent call last):

  File "<ipython-input-84-8763c416d5cb>", line 1, in <module>
    lam_expr(10,1)

  File "<lambdifygenerated-33>", line 2, in _lambdifygenerated
    return (select([not_equal(p, 1),True], [t**(1 - p)/(1 - p),log(t)], default=nan))

ZeroDivisionError: division by zero

更新

使用 NumPy 数组时,尽管仍然发出警告,但我没有遇到错误

>> In: lam_expr(np.array([1,2,3,5]),1)
<lambdifygenerated-101>:2: RuntimeWarning: divide by zero encountered in true_divide
  return (select([not_equal(p, 1),True], [t**(1 - p)/(1 - p),log(t)], default=nan))
>> Out: array([0.        , 0.69314718, 1.09861229, 1.60943791])

这个问题的一个(坏)解决方案似乎是将所有输入转换为 NumPy 数组。

标签: pythonsympylambdify

解决方案


推荐阅读