我正在试图将一个包含各种次数的符号变量z_s的表达式,通过在Python中使用sympy.Poly()来转换为多项式,以便我可以使用.coeffs()提取系数。
我要转换的表达式是一个高次多项式,并且具有独立的符号变量z_s。但是,当我使用sympy.Poly()将表达式转换为多项式时,它似乎会截断小系数的项。下面是我的函数,并且我加入了重新定义为符号多项式的那行代码:
这将返回:
正如您所看到的,包含系数为
我在多个论坛和SymPy文档中都没有找到相关信息(除非我漏掉了)。但是,我发现人们正在尝试做与我相反的事情(例如,请参见这里):他们尝试削减具有小系数的项,而我正试图防止python将这些项削减掉。
有没有一种方法可以告诉python/sympy我不想将这些小系数设置为零?
或者,为了避免这个问题,是否有另一种方法按顺序从我的原始函数中提取系数,而不使用
f = -1.29096669270427e-61*z_s**33 + 6.24438995041203e-59*z_s**32 - 6.41125090009095e-57*z_s**31 - 8.30852813320818e-55*z_s**30 + 5.84175807723288e-53*z_s**29 + 1.88577332997761e-50*z_s**28 + 9.46504910106607e-49*z_s**27 - 2.28903644846359e-46*z_s**26 - 4.63321594171589e-44*z_s**25 - 1.78254194888339e-42*z_s**24 + 6.43406800910469e-40*z_s**23 + 1.20425521347205e-37*z_s**22 + 3.4116753522246e-36*z_s**21 - 1.92084369416715e-33*z_s**20 - 3.04107684362554e-31*z_s**19 + 2.89289551256439e-30*z_s**18 + 6.38382842182985e-27*z_s**17 + 5.46438700248253e-25*z_s**16 - 8.50501280745176e-23*z_s**15 - 1.6344595302306e-20*z_s**14 + 1.07764488797684e-18*z_s**13 + 3.47026242660686e-16*z_s**12 - 2.93966702403133e-14*z_s**11 - 5.25394006214533e-12*z_s**10 + 1.21642330162702e-9*z_s**9 - 1.16577645027166e-7*z_s**8 + 6.82117624588787e-6*z_s**7 - 0.000267513120031891*z_s**6 + 0.00723589681411793*z_s**5 - 0.134846078975788*z_s**4 + 1.69035817278476*z_s**3 - 13.5277365002646*z_s**2 + 62.3459673862853*z_s - 76.5029927727737
sympy.Poly(f,z_s)
这将返回:
Poly(-2.93966702403133e-14*z_s**11 - 5.25394006214533e-12*z_s**10 + 1.21642330162702e-9*z_s**9 - 1.16577645027166e-7*z_s**8 + 6.82117624588787e-6*z_s**7 - 0.000267513120031891*z_s**6 + 0.00723589681411793*z_s**5 - 0.134846078975788*z_s**4 + 1.69035817278476*z_s**3 - 13.5277365002646*z_s**2 + 62.3459673862853*z_s - 76.5029927727737, z_s, domain='RR')
正如您所看到的,前几项已经被削减了。
起初我认为它会切断我的高阶项,因为高阶多项式有一些内置的截止值,但我在任何文档中都找不到这种情况。然后我发现被截断的项似乎是因为低系数值而被截断的(我假设sympy或Python认为该项是微不足道的,因为其系数非常接近于零)。 您可以看到,在我的函数中,第一项的系数约为-1.3e-61
。 我使用一个简单的二次多项式例子进行了测试,该多项式具有一条“小”的截断项:
h = 10e-27*z_s + 1
sympy.Poly(h,z_s)
(编辑:应将+ 1
放在h
函数内部,我已经修复了它,使其读取正确。这不会改变输出结果。)
这将返回:
Poly(1.0, z_s, domain='RR')
正如您所看到的,包含系数为
10e-27
的项已从多项式中删除,只剩下常数项(1.0
)。我在多个论坛和SymPy文档中都没有找到相关信息(除非我漏掉了)。但是,我发现人们正在尝试做与我相反的事情(例如,请参见这里):他们尝试削减具有小系数的项,而我正试图防止python将这些项削减掉。
有没有一种方法可以告诉python/sympy我不想将这些小系数设置为零?
或者,为了避免这个问题,是否有另一种方法按顺序从我的原始函数中提取系数,而不使用
sympy.Poly()
和.coeffs()
?