2016-09-07 36 views
3

我想用sympy的solve命令解決方程式,但是我的輸出是一個空列表[]。我認爲這可能發生的唯一原因是因爲沒有解決辦法,但我懷疑這是原因。任何人都知道我爲什麼沒有得到答案?謝謝!爲什麼我使用solve命令獲取空列表作爲我的輸出?

from sympy import * 

class WaterModel: 

    def fp_requirement(self, Ws0, Wp0, Wg0): 
     greyW = 60.0 
     potW = 126.0 
     rainW = 17.05 

     self.Ws0 = Ws0 
     self.Wp0 = Wp0 
     self.Wg0 = Wg0 

     self.fp = var('fp') 

     filt_greyW = self.fp*greyW 
     dWg = self.Wg0 - greyW + (1 - self.fp)*greyW + rainW 
     dWp = self.Wp0 - potW + filt_greyW 
     F = self.Ws0 + dWp + dWg 
     self.fp = solve(F,self.fp) 

     return self.fp 

a = WaterModel() 
fp = a.fp_requirement(1500, 100, 100) 
print(fp) 

回答

3

我嘗試添加一些跟蹤陳述你的函數,只需調用上述解決

print "dWg\t", dWg, type(dWg) 
    print "dWp\t", dWp, type(dWp) 
    print "F\t", F, type(F) 
    print "self.fp\t", self.fp 
    self.fp = solve(F,self.fp) 

輸出:

dWg 117.050000000000 - 60.0000000000000*fp <class 'sympy.core.add.Add'> 
dWp -26.0000000000000 + 60.0000000000000*fp <class 'sympy.core.add.Add'> 
F 1591.05000000000 <class 'sympy.core.numbers.Real'> 
self.fp fp 
[] 

如果我正確地讀這篇文章,你的函數計算表達式,而不是保持的象徵性˚F。因此,當您發佈指令時,您試圖解決變量fp的常量。這就是爲什麼你沒有得到解決方案。


啊,哈!它是!

1500 + 117 - 26 - 60*fp + 60*fp => 1591 

隨着FP的方程,有沒有解決辦法。

+0

太棒了!我很好奇爲什麼我的方程F是一個常數而不是fW的函數,因爲dWg和dWp是。 –

+0

我不是一個** sympy **用戶......但是,我的猜測是sympy對象上的「+」運算符是* evaluate-and-add *,而不是您期望的字符串連接。 – Prune

+0

這些計算都是以符號方式完成的 - 請注意「dWg」和「dWp」在其中有一個「fp」項。但是,請注意這些「fp」術語彼此是否定的。 'fp'取消! – user2357112

2

self.fp將取消您的計算。 F的值是一樣的,不管是什麼self.fp是,所以solve不能幫你。

你確定你有你的方程嗎?

+0

所以我只是想解決方程0 = Ws0 + dWp + dWg,但我試圖使用sympy的'solve'函數。我確定我使用的方程式是正確的。也許我錯誤地使用了「自我」?另外,無論fp是什麼,爲什麼F都是相同的? dWg和dWp是fp –

+0

的一個函數@ZachThomas:這個類沒有意義,但是在使用'self'時沒有什麼技術上的錯誤。但是,如果你期望'F'對'fp'有任何依賴,那麼你的數學可能有些問題。嘗試用手工處理,看看'fp'發生了什麼。 – user2357112

+0

謝謝!我的班級還有其他定義,但爲了簡單起見,我沒有包含它們。 –

相關問題