解释SymPy.solveset()分段结果

时间:2017-06-30 13:18:56

标签: python sympy piecewise

Sympy处理具有特别难看的系数的四次方程的解决方案给人留下了深刻的印象。

在一个名为Tb的变量上求解四次,并且解的一般形式为Tb = f(Tc)

我没有在Sympy文档中找到关于返回的分段结果solveset()的详细信息(我将尝试在此处通过解决我自己的答案来尝试为此文档做出贡献)。

有4个分段的部分为“{Piecewise((...”(对于四次解决方案而言合理)。

但是,每个Piecewise部分显然都被分成了“chunk”,其中有一个单独的逗号,显示了一个特殊的子句。

例如,一个分段有一个三分之一(为简洁而在此处截断),

  

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

接着是另一个“chunk”(再次用逗号分隔),

  

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,True)),

关于上述问题有两个问题:

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

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

1 个答案:

答案 0 :(得分:0)

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

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