解释 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)),
上面有两个问题:
我是否正确地解释了最后一个块末尾的“, True)),”意味着我只是有一般解决方案 Tb = f(Tc)对于 3 个特殊情况块中的两个,Eq 仅表示 Tb = f(Tc) = 0?
是否有 Sympy 方法以编程方式隔离和提取这些(假设的)特殊情况以供进一步处理? 我可能在 Sympy 文档中错过了它。
分段参数的一般格式是Piecewise((expr1, cond1), (expr2, cond2), ... [, (exprn, True)])
。如果条件为 True,则在其前面的条件均不适用时适用。我相信四次解是在各种表达式适用的条件下返回的。不存在一般四次方程的 "general solution",因为解的形式取决于系数的值。因此,剖析结果的一种方法是只查看条件:
for arg in piecewise.args:
print(arg.cond) # or arg[1]
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)),
上面有两个问题:
我是否正确地解释了最后一个块末尾的“, True)),”意味着我只是有一般解决方案 Tb = f(Tc)对于 3 个特殊情况块中的两个,Eq 仅表示 Tb = f(Tc) = 0?
是否有 Sympy 方法以编程方式隔离和提取这些(假设的)特殊情况以供进一步处理? 我可能在 Sympy 文档中错过了它。
分段参数的一般格式是Piecewise((expr1, cond1), (expr2, cond2), ... [, (exprn, True)])
。如果条件为 True,则在其前面的条件均不适用时适用。我相信四次解是在各种表达式适用的条件下返回的。不存在一般四次方程的 "general solution",因为解的形式取决于系数的值。因此,剖析结果的一种方法是只查看条件:
for arg in piecewise.args:
print(arg.cond) # or arg[1]