比方說,我知道,x比y大,且x與y都大於0簡化與Sympy
是否有人可以幫我寫一個函數,採用兩個線性公式(+/- 只)並返回哪一個更大?
例如:
foo("x+y","2*x") #should return 2
foo("2*x","x+y") #should return 1
foo("x","2*y") #should return 0 (can't decide)
非常感謝!
比方說,我知道,x比y大,且x與y都大於0簡化與Sympy
是否有人可以幫我寫一個函數,採用兩個線性公式(+/- 只)並返回哪一個更大?
例如:
foo("x+y","2*x") #should return 2
foo("2*x","x+y") #should return 1
foo("x","2*y") #should return 0 (can't decide)
非常感謝!
在SymPy中執行此操作的最佳方法是使用假設系統。
首先,不要試圖做標記。只是使用的符號,像
x, y = symbols('x y')
a = x - y
b = 2*x
使用sympify
,如果你要輸入字符串,如果你沒有,只需要創建一個表達式更多信息,請閱讀SymPy tutorial。
假設系統並不直接支持不等式,所以要表示x > y
,您需要聲明x - y
是正數。要問2*x > x - y
,即如果2*x - (x - y)
是積極的,因爲x
,y
,並且x - y
是積極的,做
In [27]: ask(Q.positive((2*x) - (x - y)), Q.positive(x) & Q.positive(y) & Q.positive(x - y))
Out[27]: True
的第一個參數ask
是你所要求的,第二個參數是我們假定你是什麼。 &
是合乎邏輯的,因此Q.positive(x) & Q.positive(y) & Q.positive(x - y)
意味着承擔所有這三件事情。
如果它知道它是假的,它將返回False,如果它不能確定則返回None。請注意,SymPy適用於複雜的領域,因此不積極並不一定意味着消極。因此,如果您得到None,您應該也可以打電話詢問否定表達式,或者用negative
而不是positive
再次調用它。如果你想包括0(即,使用>=
而不是>
,請使用非負值而不是正值和負值,而不是負值。
它不像它那麼聰明,所以你會得到很多現在可以知道答案了,尤其是我認爲x > y
事實上在這一點上並不是非常好的,
參數應該是'foo('x1 + x2','2 * x1')'? – zhangxaochen
@zhangxaochen:在Python中有相同的意思 – hivert
@hivert np在OP編輯之前;) – zhangxaochen