gpt4 book ai didi

python - sympy 求解器中的 float 与整数

转载 作者:行者123 更新时间:2023-11-28 17:44:12 27 4
gpt4 key购买 nike

我正在尝试求解由任意方程组成的大型系统(对于具有以简单数学编写的物理组件模型的工艺流程表应用程序)。

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

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

如我所料,给我 [(5,5)]。但是,当我将数字更改为 float 时:

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

我得到错误:raise DomainError("无法在 %s 上计算 Groebner 基础"% opt.domain)sympy.polys.polyerrors.DomainError:无法通过 RR 计算 Groebner 基础

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

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

我在 Windows 7 上使用 python 2.7。

最佳答案

尝试使用 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__x 上调用方法和 5.1 (a Symbol ),立即转换 5.1Float(5.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)/4 ( Ssympify 的简写)。

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

如果您仍然看到更多非平凡示例的错误,请在 SymPy issue tracker 中将其报告为错误.

关于python - sympy 求解器中的 float 与整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com