mpmath:无法创建mpf

时间:2019-12-05 17:10:24

标签: python-3.x sympy integral mpmath

我想使用mpmath.quad评估由sympy简化的函数的整数值。

然后我使用了以下代码

 class MyLibTagLib{

  static namespace="myLib"

  def fancy={attrs->
      ....
  }
}

import app.lib.MyLibTagLib
class CallerTagLib{

  //in the default 'g' namespace

  //def myLib //injection fails

  def fancyText={attrs->
      //fails
      out << myLib.fancy(attrs)
      //also fails
      grailsApplication.mainContext.getBean('app.lib.MyLibTagLib')
  }
}

但收到此错误消息

from sympy import *
import mpmath as mp
r = symbols("r")
f = 4**(-r)*r*(0.115391565000863*2**r + 693.147180559945)*exp(-0.000332949677174323*2**r)
mp.quad(lambda r:f,[0,1])

我尝试了另一个简单的功能

    ---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-8-715cd610bbdb> in <module>()
      3 r = symbols("r")
      4 f = 4**(-r)*r*(0.115391565000863*2**r + 693.147180559945)*exp(-0.000332949677174323*2**r)
----> 5 mp.quad(lambda r:f,[0,1])

5 frames

/usr/local/lib/python3.6/dist-packages/mpmath/ctx_mp.py in _convert_fallback(ctx, x, strings)
    632             else:
    633                 raise ValueError("can only create mpf from zero-width interval")
--> 634         raise TypeError("cannot create mpf from " + repr(x))
    635 
    636     def mpmathify(ctx, *args, **kwargs):

TypeError: cannot create mpf from 4**(-r)*r*(0.115391565000863*2**r + 693.147180559945)*exp(-0.000332949677174323*2**r)

并获得相同的错误消息

from sympy import *
import mpmath as mp
x = symbols("x")
f = x*2
mp.quad(lambda x:f,[1,2])

谁能知道导致此错误消息的原因以及如何正确使用四元函数?

1 个答案:

答案 0 :(得分:1)

lambda r:f不会创建您认为的可调用对象。您必须将f的定义复制并粘贴到rhs上,或替换为函数的调用值:

>>> f = r + 1
>>> (lambda r:f)(1)
r + 1
>>> (lambda r: r + 1)(1)
2
>>> (lambda v:f.subs(r,v))(1)
2