我在Windows 7上使用python 3.6.3。我有以下代码:
from sympy import *
x, a = symbols('x a')
q = 23*a + x**4 + 6*x**3 + x**2*(a + 14) + x*(8*a + 14) + 1
我想得到x = 3时q的值,我做到了:
q.evalf(subs={x:3})
我希望得到:56*a + 412
,但我得到的只是:
23.0*a + x**4 + 6.0*x**3 + x**2*(a + 14.0) + x*(8.0*a + 14.0) + 1
我没有在文档中找到任何有关获得价值的信息
一个表达式,只需替换一个变量即可。
如何获得q
的{{1}}的值?
答案 0 :(得分:2)
您无法使用evalf
和不完整的变量字典获取值。
正如@ForceBru在评论中提到的那样,您可以使用Substitution函数subs()
。
有人可以探索evalf
:github或sympy.core.evalf。
正如人们所见(当verbose
选项为True
时,evalf
作为“原子操作”序列执行计算:
q.evalf(subs={x:3}, verbose=True)
### input x
### output 3.0
### raw ((0, 3, 0, 2), None, 74, None)
### input x**4
### output 81.0
### raw ((0, 81, 0, 7), None, 67, None)
当evalf
最后一次接近a
时(尝试两次),将引发KeyError
,并使用next lines来计算表达式:
if 'subs' in options:
x = x.subs(evalf_subs(prec, options['subs']))
xe = x._eval_evalf(prec)
re, im = xe.as_real_imag()
x
最终以a
结尾,但评估结果x._eval_evalf(prec)
为None
。由于xe
是None
,因此最后提到的行将引发NotImplementedError
。
此异常在返回输入的class EvalfMixin
的next lines中处理:
except NotImplementedError:
# Probably contains symbols or unknown functions
return v
PS。严格来讲,我发现我回答@ForceBru的评论为时已晚。保持原状。