2016-09-07 28 views
3

私はsympyの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の定数を解こうとしています。だからあなたは解決策を得ないのです。


ああ、ハ!そこにそれがある!式のうち FP

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

、何の解決策はありません。

+0

驚くばかり!私の方程式FがdWgとdWpのようにfpの関数ではなく定数である理由については興味があります。 –

+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

ありがとう!私のクラスには別の定義がありますが、私は単純化のためにそれらを含めませんでした。 –

関連する問題