python - 估计 SymPy 函数的进度

标签 python sympy

我已经发出了 sympy 命令来求解某个方程或另一个方程。现在已经好几天了,我不知道什么时候能完成。

我可以使用 sympy 来记录调用 .solvers.solve 的进度吗?如果不是,我如何估计 sympy 求解一组方程所需的最坏情况时间?

例如

import sympy, sympy.solvers
from sympy import sqrt

a,c,d,e,f,x = tuple(map(sympy.Symbol, 'acdefx'))

# when will this finish?
print(sympy.solvers.solve(
    3*sqrt((16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2 + (-8*a**2*c*x - 2*a*e + 2*a*x + 2*a*sqrt(16*a**2*c**2*
x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2) + d)**2)**3/(16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2)**3)*(a*(2*c
*(8*a**2*c*x + 2*a*e - 2*a*x - d) - (4*a*c - 1)*sqrt(16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2))*(-8*a**2*c*x - 2*a*e + 2*a
*x + 2*a*sqrt(16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2) + d) + c*(8*a**2*c*x + 2*a*e - 2*a*x - d)*sqrt(16*a**2*c**2*x**2 +
 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2))*(16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2)/((a*(4*a*c - 1)*(16*a**2*c**
2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2) - c*(8*a**2*c*x + 2*a*e - 2*a*x - d)**2)*(16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*
d*x - 4*c*f + e**2 + (-8*a**2*c*x - 2*a*e + 2*a*x + 2*a*sqrt(16*a**2*c**2*x**2 + 8*a*c*e*x - 4*a*c*x**2 - 4*c*d*x - 4*c*f + e**2) + d)**2))
,x))

最佳答案

SymPy 不提供任何完成时间估计。它的一些算法依赖于以各种方式重写表达式;如果结果表达式变得更复杂而不是更复杂,则该过程可能永远不会终止。

在具体示例中,对表达式进行因式分解并求解各个因子会有所帮助。

factors = expr.factor().args
solve(factors[4], x)   # "4" by trial and error

返回

[(c*(-2*a*e + d) - sqrt(c*(16*a**2*c**2*f - 4*a*c*d*e - 4*a*c*f + a*e**2 + c*d**2)))/(2*a*c*(4*a*c - 1)),
 (c*(-2*a*e + d) + sqrt(c*(16*a**2*c**2*f - 4*a*c*d*e - 4*a*c*f + a*e**2 + c*d**2)))/(2*a*c*(4*a*c - 1))]

关于python - 估计 SymPy 函数的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52706723/

相关文章:

python - 从 Pox Controller 停止切换

python - 使用 tkinter 生成随机数

python - 用于特殊渲染的 sympy 符号命名约定的文档?

Julia 使用符号变量在循环中更改名称

python - 在任意精度浮点上评估 sympy 函数

python - Sympy 简化逻辑

python - Sympy:如何显示导致除以零的条件?

python - 使用 lambda 了解 pandas 中的分配行为

python - 在工作簿的新工作表上创建 pandas 数据透视表

python - Windows 脚本宿主 (Python) 对话框无响应