2016-09-07 39 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

谢谢!我的班级还有其他定义,但为了简单起见,我没有包含它们。 –

相关问题