我使用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