解释 SymPy.solveset() 分段结果

Interpreting SymPy.solveset() piecewise results

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

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

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

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

但是,每个 Piecewise 部分显然被分成 "chunks",并用逗号分隔,显然表示一个特殊的子案例。

例如,一个分段有一大块三个(为简洁起见,此处截断),

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

最后一个 "chunk" 随后是

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

上面有两个问题:

  1. 我是否正确地解释了最后一个块末尾的“, True)),”意味着我只是有一般解决方案 Tb = f(Tc)对于 3 个特殊情况块中的两个,Eq 仅表示 Tb = f(Tc) = 0?

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

分段参数的一般格式是Piecewise((expr1, cond1), (expr2, cond2), ... [, (exprn, True)])。如果条件为 True,则在其前面的条件均不适用时适用。我相信四次解是在各种表达式适用的条件下返回的。不存在一般四次方程的 "general solution",因为解的形式取决于系数的值。因此,剖析结果的一种方法是只查看条件:

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