通过仅替换一个变量

时间:2018-11-29 19:06:38

标签: python python-3.x sympy

我在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}}的值?

1 个答案:

答案 0 :(得分:2)

您无法使用evalf和不完整的变量字典获取值。 正如@ForceBru在评论中提到的那样,您可以使用Substitution函数subs()


有人可以探索evalfgithubsympy.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。由于xeNone,因此最后提到的行将引发NotImplementedError

此异常在返回输入的class EvalfMixinnext lines中处理:

except NotImplementedError:
    # Probably contains symbols or unknown functions
    return v

PS。严格来讲,我发现我回答@ForceBru的评论为时已晚。保持原状。