首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mpmath :无法创建mpf

mpmath :无法创建mpf
EN

Stack Overflow用户
提问于 2019-12-06 01:10:24
回答 1查看 246关注 0票数 0

我想用mpmath.quad来计算一个函数的积分值。

然后我使用了下面的代码

代码语言:javascript
运行
复制
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])

但是得到这个错误信息

代码语言:javascript
运行
复制
    ---------------------------------------------------------------------------

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)

我尝试了另一个简单的函数

代码语言:javascript
运行
复制
from sympy import *
import mpmath as mp
x = symbols("x")
f = x*2
mp.quad(lambda x:f,[1,2])

并得到相同的错误消息

代码语言:javascript
运行
复制
TypeError: cannot create mpf from 2*x

有没有人知道是什么导致了这个错误,以及如何正确使用quad函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-06 03:24:28

lambda r:f不会创建您所认为的callable。您必须将f的定义复制并粘贴到rhs上,或者替换为函数的CALL值:

代码语言:javascript
运行
复制
>>> f = r + 1
>>> (lambda r:f)(1)
r + 1
>>> (lambda r: r + 1)(1)
2
>>> (lambda v:f.subs(r,v))(1)
2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59200142

复制
相关文章

相似问题

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