我使用IPython(Anaconda分布式)与sympy符号数学库。在较大分数内收集分数表达式(sympy)
我有以下表现:
t⋅(h + l)
───────────────────────
l⋅(h + l⋅sin(θ))⋅cos(θ)
我想重新安排这让它在(h/l)
和(t/l)
方面:
(t/l)⋅((h/l)+1)
─────────────────────
((h/l)+sin(θ))⋅cos(θ)
这是很容易做手工;只需将分数的两边除以l
并重新排列。
到目前为止,我没有与sympy的内置函数运气。
我试过使用expand
后跟collect(expr,h/l)
,但它不会改变表达式。我怀疑这是行不通的,因为是否h/l
它首先收集的条款。
如何获得sympy来做到这一点?
为第一表达Python代码为您节省时间: t*(h + l)/(l*(h + l*sin(theta))*cos(theta))
确定这似乎工作,但我想确保我完全信任它之前了解发生了什么。如果我理解正确,你创建替代'x = h/l'和'y = t/l',(2)使用solve来重新排列这些变量,使得't'或'l'是主题,(3)替换为'expr'并使用'simplify'来取消任何非'x' /'y'变量,以及(4)替代'x = h/l'和'y = t/l'。我将在我正在使用的一些更复杂的表达式上尝试这一点,如果它有效,我会将这个答案标记为已接受。 – byntje
顺便说一下,我不知道'solve'可能需要一整套方程,我不知道你可以用'subs'来使用字典。我一直在使用嵌套列表!头脑风暴! – byntje
是的,这就是我的意思。尽管我手动解决了这个问题。 (顺便说一下)。 – strubbly