Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SymPy';s';展开';作用_Python_Precision_Sympy - Fatal编程技术网

Python SymPy';s';展开';作用

Python SymPy';s';展开';作用,python,precision,sympy,Python,Precision,Sympy,我试图展开形式为(X+Y+Z)^N的函数,其中N足够大,因此展开的乘积将包含系数远大于2^64的项;为了便于讨论,让我们假设N大于200。这是一个问题,因为我希望对这个函数的展开形式进行分析,这个分析需要所有项及其系数的精确精度 为了扩展函数,我使用Python模块SymPy,到目前为止,它似乎非常有希望,能够在相对较短的时间内扩展N大于150的函数。不过,我担心的是,在查看了一些扩展函数之后,我发现系数的尾随零比我预期的要多。我知道在函数展开后,我可以运行所有的分析,但到目前为止,我不确定一些

我试图展开形式为
(X+Y+Z)^N的函数,其中N足够大,因此展开的乘积将包含系数远大于2^64的项;为了便于讨论,让我们假设N大于200。这是一个问题,因为我希望对这个函数的展开形式进行分析,这个分析需要所有项及其系数的精确精度

为了扩展函数,我使用Python模块
SymPy
,到目前为止,它似乎非常有希望,能够在相对较短的时间内扩展N大于150的函数。不过,我担心的是,在查看了一些扩展函数之后,我发现系数的尾随零比我预期的要多。我知道在函数展开后,我可以运行所有的分析,但到目前为止,我不确定一些较大的系数是否在一开始就完全正确

在for Symphy的
expand
函数下,没有明确说明在处理非常大的数字时,展开系数的精度。我知道
SymPy
使用了
mpmath
模块来实现它的一些功能,所以我知道它可以实现任意精度,我只是不知道任意精度是否明确适用于这种情况

我知道我也可以通过对给定函数的所有系数求和并检查其和是否等于N来确认
expand
函数是否任意精确,但我不想花几个小时对所有必要的部分进行编码以进行评估,结果发现
expand
不精确

如果有人对确认
expand
精度的更简单方法有任何建议,那么如果无法直接确认其精度,我将不胜感激。

虽然尚未合并,但您可以确认系数是正确的:

>>> multinomial(15,16,14)
50151543548788717200
>>> ((x+y+z)**(15+16+14)).expand().coeff(x**15*y**16*z**14)
50151543548788717200
>>> _ > 2**64
True

由于Python支持无限整数,并且系数是整数,我不知道它们不准确的原因。

我只想补充一点,重要的是X、Y、Z和N都是精确的。如果你想让系数精确,就不应该在计算中使用浮点数。我想我只是不确定在展开过程中是否有浮点数转换。我仍然发现自己使用了很多C/Java原则,而且“bignum”Python整数现在已经成为标准,这对我来说仍然不是很直观。我相信你的话,没有发生浮点转换,继续使用
symphy
。感谢您的帮助。需要记住的一点是,如果您不使用浮点数,并且输出中没有浮点数,那么Symphy的计算应该是准确的,因为一切都是象征性地处理的。考虑圆周为<代码>椭圆((0,0),3,2)。圆周>12*椭圆曲线(5/9)< /代码>是精确的(虽然不是浮点);为了获得近似值,可以对其进行评估(例如:椭圆((0,0),3,2)。周长n(3)->15.9