在情感解决者中浮动与对冲

时间:2013-12-10 21:02:47

标签: python sympy

我正在尝试解决任意方程的大型系统(对于使用简单数学编写的物理组件模型的过程流程图应用程序)。

在处理非整数数字时,我对sympy的solve_poly_system函数的行为感到困惑,并且无法通过文档找出它。这个简单的代码片段:

sympy.solve_poly_system([x-5,y-x])
正如我所料,

给了我[(5,5)]。当我将数字更改为浮点数时:

sympy.solve_poly_system([x-5.1,y-x])

我收到错误: 提出DomainError(“无法在%s上计算Groebner基础”%opt.domain) sympy.polys.polyerrors.DomainError:无法计算基于RR的Groebner基础

文档中提到sympy更喜欢使用自己的变量类型,所以我尝试使用'sympify'将我的输入函数转换为更适合没有运气的东西。关于如何解决这个问题的任何建议?我只是使用了错误的工具吗?

注意:显然这是一个微不足道的例子,我只是想说明我已经提炼出的基本问题。

我在Windows 7上使用python 2.7。

1 个答案:

答案 0 :(得分:2)

尝试使用SymPy 0.7.4(几天前刚刚发布)。这现在有效。

In [37]: solve_poly_system([x-5,y-x])
Out[37]: [(5, 5)]

In [38]: solve_poly_system([x-5.1,y-x])
Out[38]: [(5.1, 5.1)]

要澄清这个问题的一些困惑:

  • SymPy确实使用自己的类型,但在大多数情况下,您无需担心这一点。评估x - 5.1时,会在__sub__x5.1)上调用Symbol方法,该方法会立即将5.1转换为{Float(5.1) 1}}使用sympify。您唯一需要担心的是当您执行操作时,两个操作数都不是SymPy类型,并且SymPy行为与内置行为不同(例如,您不必担心1 - 4sympify(1) - sympify(4))。唯一的例子是int/int,例如1/4。 Python会将此评估为0(或Python 3中的0.25),而SymPy会将其评估为Rational(1, 4)。因此,在这种情况下,您需要同意其中一个论点以获得理性,例如S(1)/4Ssympify的简写)。

  • DomainError事件是指解算器使用的多项式的内部表示。它从未打算被用户看到(这是一个错误)。特别是,这个错误与某些算法没有实现浮点数(与有理数相反)的事实有关。

如果您仍然看到错误的更多非常重要的示例,请在SymPy issue tracker中将其报告为错误。