我有以下表達 -
x > 4.5
2x y == 4.5
我想擺脫系數中的浮點數并將它們轉換為整數。我如何使用 Sympy 做到這一點?(或與此相關的任何其他 python 庫)。我已經絞盡腦汁好幾個小時了。
順便說一句,預期的輸出應該是 -
2x > 9
4x 2y == 9
提前致謝!
uj5u.com熱心網友回復:
您可以使用nsimplify()關系并將兩邊乘以 RHS 的分母,如下所示。
from sympy import nsimplify, Rel
from sympy.abc import x
r0 = x > 4.5
r = nsimplify(r0)
q = r.rhs.q
r = Rel(r.lhs * q, r.rhs * q, r.rel_op)
print([r0, r])
這輸出
[x > 4.5, 2*x > 9]
如果你想處理 LHS 中的系數,你可以primitive()像下面這樣使用。
from sympy import nsimplify, Rel, lcm
from sympy.abc import x, y
r0 = 2*x - 0.4*y <= 0.5
r = nsimplify(r0)
g, _ = r.lhs.primitive()
q = lcm(g.q, r.rhs.q)
r = Rel(r.lhs * q, r.rhs * q, r.rel_op)
print([r0, r])
這輸出
[2*x - 0.4*y <= 0.5, 20*x - 4*y <= 5]
uj5u.com熱心網友回復:
如果您想清除所有分母(即使是那些可能是象征性的),那么這可能是一種可靠的方法:
def clear_relden(r):
from sympy.core.relational import Relational
from sympy import Piecewise
assert isinstance(r, Relational)
n, d = zip(*[i.as_numer_denom() for i in r.args])
l = lcm(*d)
args = [n[i]*l/d[i] for i in range(2)]
return Piecewise(
(r.func(*args), l>0),
(r.reversed.func(*args), l<0))
例如,

如果你有花車,那么通過nsimplify(r, rational=True).
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537663.html
標籤:Python数学同情
