2014-02-22 65 views
0
一個簡單的不平等

比方說,我知道,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) 

非常感謝!

+0

參數應該是'foo('x1 + x2','2 * x1')'? – zhangxaochen

+0

@zhangxaochen:在Python中有相同的意思 – hivert

+0

@hivert np在OP編輯之前;) – zhangxaochen

回答

0

在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)是積極的,因爲xy,並且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事實上在這一點上並不是非常好的,