亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Sympy 可以通過收集多個項來簡化有理表達式嗎?

Sympy 可以通過收集多個項來簡化有理表達式嗎?

catspeake 2023-06-06 15:35:42
E給定如下所示的有理表達式,我希望使用 Sympy 將其簡化為類似的東西F(在下面的第二個 Python 代碼塊中定義):import sympy as spa, b, c, d, n, t, A, B, C = sp.symbols('a, b, c, d, n, t, A, B, C', real = True)E = n/(c-b) * ( B - (c-b)/(c-a)*A - (b-a)/(c-a)*B ) * (c-t)/(c-b) + n/(c-b) * ( (d-c)/(d-b)*B + (c-b)/(d-b)*C - B ) * (t-b)/(c-b)print(sp.pretty( E ))print(sp.pretty( E.simplify() ))這打印           ?     B?(-c + d)   C?(-b + c)?             ?  A?(-b + c)   B?(-a + b)    ?n?(-b + t)??-B + ────────── + ──────────?   n?(c - t)??- ────────── - ────────── + B?           ?       -b + d       -b + d  ?             ?    -a + c       -a + c      ?───────────────────────────────────────── + ─────────────────────────────────────────                        2                                           2                                (-b + c)                                    (-b + c)                                -n?((a - c)?(b - t)?(-B?(b - d) + B?(c - d) + C?(b - c)) + (b - d)?(c - t)?(A?(b - c) + B?(a - b) - B?(a - c))) ────────────────────────────────────────────────────────────────────────────────────────────────────────────────                                                           2                                                                                                (a - c)?(b - c) ?(b - d) 但是,可以手動進一步簡化該表達式,我將其結果標記為F:F = n/(c-a) * (B - A) * (c-t)/(c-b) + n/(d-b) * (C - B) * (t-b)/(c-b)print(sp.pretty( F ))print((F-E).simplify())這輸出n?(-A + B)?(c - t)   n?(-B + C)?(-b + t)────────────────── + ───────────────────(-a + c)?(-b + c)     (-b + c)?(-b + d) 0我研究了各種選項,包括factor(),collect()和apart(),但這些選項似乎都不會產生與 具有相同結構的表達式F。關于如何進行的任何指示?此外,我想知道是否可以通過某種方式調整 Sympy 的漂亮打印功能以保持分子和分母中變量的原始順序(例如,B - A而不是-A + B)。目前,在大多數情況下順序是顛倒的,前導減號看起來相當難看。將復合分數顯示為簡單分數的乘積(例如,a/b c/d而不是ac/bd),盡管在某些情況下,在何處/如何“拆分”此類復合分數當然可能不明確。
查看完整描述

1 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

這里的情況是你有Add兩個術語。每項單獨使用都可以簡化factor,但取消的因素各不相同,因此factor整體調用Add未能找到可能的取消。


Add考慮到這一點,我們需要小心地獨立處理我們可以通過訪問來完成的條款.args:


In [122]: E.func(*(factor(term) for term in E.args))

Out[122]: 

n?(A - B)?(-c + t)   n?(B - C)?(-b + t)

────────────────── - ──────────────────

 (a - c)?(b - c)      (b - c)?(b - d) 

變量的順序實際上是由打印機在顯示表達式時確定的,不一定與參數的內部順序相同,也不一定與創建表達式時使用的順序相同。調用signsimp可以規范化表達式中的減號


In [123]: signsimp(_)

Out[123]: 

  n?(A - B)?(c - t)   n?(B - C)?(b - t)

- ───────────────── + ─────────────────

   (a - c)?(b - c)     (b - c)?(b - d) 


查看完整回答
反對 回復 2023-06-06
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號