首页 > 解决方案 > 通过仅替换一个变量来获取两个变量中多项式的值

问题描述

我在 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

我在文档中没有找到任何关于通过仅替换一个变量来获取表达式的值的内容。
如何获得qfor的价值x = 3

标签: pythonpython-3.xsympy

解决方案


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


有一些可以探索的资源evalfgithubsympy.core.evalf

As one can see (when verboseoption is True) the evalfperforms calculation as a sequence of "atomic operations":

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评估表达式:

if 'subs' in options:
    x = x.subs(evalf_subs(prec, options['subs']))
xe = x._eval_evalf(prec)
re, im = xe.as_real_imag()    

最终结果xa,但评估结果x._eval_evalf(prec)None。既然xeNone,最后提到的线提高了NotImplementedError

class EvalfMixin在返回输入的下一行中处理此异常:

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

PS。严格来说,我注意到我回答了@ForceBru 的评论为时已晚。让它保持原样。


推荐阅读