【问题标题】:Interpreting SymPy.solveset() piecewise results解释 SymPy.solveset() 分段结果
【发布时间】:2017-06-30 13:18:56
【问题描述】:

Sympy 对系数特别难看的四次方程解的处理给我留下了深刻的印象。

四次方程是在我称为 Tb 的变量上求解的,该解具有一般形式 Tb = f(Tc)

我在 Sympy 文档中没有找到关于返回的分段结果 solveset() 的详细信息(一旦我在这里艰难地解决自己的答案,我将尝试在需要的地方为文档做出贡献)。

有 4 个分段部分,以“{Piecewise(( ...”) 为标题(对于四次解是合理的)。

但是,每个 Piecewise 部分显然都被分成“块”,用逗号分隔显然表示一个特殊的子情况。

例如,一个分段包含三个中的一个块(为简洁起见,此处截断),

(-sqrt(1.68483078787199*Tc**2 - 3.36390287324716*Tc - 2*(-(-15738.9526511382*Tc >+ .... + 5.04585430987074*Tc + 6222.41209283579)**3/1)(83579)**3/1 /3) - >8296.54945711438)/2 + 0.998291014581918,

后跟另一个“块”(同样用逗号分隔),

Eq(-1.81898940354586e-12*Tc - (-2.52724618180798*Tc**2 + 5.04585430987074*Tc + 6222.41209283579)**2/12 + 14816961.9123814, 0)),

最后一个“块”后跟

... + 5.04585430987074*Tc + 6222.41209283579)**3/216)**(1/3) - >8296.54945711438)/2 + 0.998291014581918, 真)),

关于上述有两个问题:

  1. 我是否正确解释了最后一个块末尾的“, True))”意味着我只是有 3 个特殊字符中的两个的通用解 Tb = f(Tc) case 块和 Eq 仅仅意味着 Tb = f(Tc) = 0?

  2. 是否有 Sympy 方法以编程方式隔离和提取这些(假定的)特殊情况以供进一步处理?我可能在 Sympy 文档中错过了它。

【问题讨论】:

  • 感谢 Stelios 的兴趣。有些事情不是很清楚。完整的 4 Piecewise 部分绝不是最小的。您想查看 solveset 返回的全部结果吗?需要验证的是什么?你想看看我用来设置求解集的一些代码吗?
  • 你不能想出一个最小/简单的例子来证明你的问题吗?无论如何,我建议提供完整的可重现代码 sn-p 并清楚地指出问题所在。
  • 我的问题涉及正确解释 sympy 的求解集的分段结果,而不是代码结果有任何问题 - 我认为没有任何问题。我是否正确假设每个子部分(用逗号分隔 - 显然是一种分段语法表示)作为给定分段解决方案中的特殊情况解决方案。求解了一个四次方程后,有 4 个分段解,但每个分段解都有子部分。一切都说了,我的问题是:分段解决方案中的逗号是否描述了 {Piecewise} 中的特殊情况?
  • Stelios,我明白你在说什么。看起来我不会在这里得到直接的答案,而是会寻求其他方法来分析应该如何解释 solveset() 结果。在简化方面,只需要 3 行 sympy 代码就可以解决一般的四次 aX**4+bX**3+cX**2+dX+e = 0。我得到了与我的问题相同的一般格式,即4个分段,每个有3个“特殊情况”。在我能破译我的之前,我会用一般的解决方案来回答。感谢您的意见。

标签: python sympy piecewise


【解决方案1】:

分段参数的一般格式是Piecewise((expr1, cond1), (expr2, cond2), ... [, (exprn, True)])。如果条件为真,则如果它之前没有条件适用,则它适用。我相信四次解是在各种表达式适用的条件下返回的。没有一般四次的“一般解”,因为解的形式取决于系数的值。因此,剖析结果的一种方法是只查看条件:

for arg in piecewise.args:
    print(arg.cond)  # or arg[1]

【讨论】:

  • args 将 22,936 个字符的求解集结果拆分为 4 个分段集。尽管如此,它并没有进一步将每个分段拆分为 (expr, cond) 格式;给定每个分段结果中的 (expr, cond) 格式块,我的特定问题巧妙地拆分为每个分段字符串的两个这样的 (expr, cond) 块。两者中的第一个具有格式(exprA,Eq(exprB,0),第二个具有(exprC,True)。正确理解第一个块,如果exprB = 0,exprA是一个可能的根。exprC是一个独特且独立的来自 exprA 的根提供 exprB not= 0。
  • > exprA 是一个可能的根,前提是 exprB = 0。exprC 是与 exprA 不同且独立的根,前提是 exprB 不 = 0。是的。
猜你喜欢
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多