需要非负和浮动解决方案

时间:2019-01-14 15:54:15

标签: python sympy

我正在尝试解决一个简单的代数问题,解决方案可能是真实且复杂的。

我只在这里寻找正面和实际的解决方案,在这种情况下,我编写了以下示例:

大多数情况下,我试图向答案列表中的每个成员询问python,“类型(ans)是浮点型,然后询问其是否为阳性”。

    res = sp.solve(self.dflux * (self.u - u_0) - (self.flux - flux_0), self.u)

        for it in res:
            print(it)
            if(type(it) is float):
                print('here')

    print(type(res),res)

例如在以下情况下

<class 'list'> [-0.707106781186548, 0.0, 0.707106781186548]

我根本看不到“这里”。

下一种情况也是如此

<class 'list'> [0.0, 0.793216505472184, -0.398143686499772 - 0.949955974569196*I, -0.398143686499772 + 0.949955974569196*I, 0.603391747263908 - 2.16302515309992*I, 0.603391747263908 + 2.16302515309992*I]

我希望第一个示例在这里看到3次,第二个示例在这里看到两次,但是什么也没有。

新部分:

我对以下版本的脚本进行了稍微更改:

    for it in res:
        print(it)
        print(isinstance(it,float),type(it))
        if(isinstance(it,float) == True):
            print('here')

我在第一种情况下看到的输出是下一个:

-0.707106781186548
 False <class 'sympy.core.numbers.Float'>

 0.0
 False <class 'sympy.core.numbers.Float'>

 0.707106781186548
 False <class 'sympy.core.numbers.Float'>

 <class 'list'> [-0.707106781186548, 0.0, 0.707106781186548]

这种行为对我来说真的很奇怪。蟒蛇一方面说不是浮点数,但另一方面却说是浮点数。

2 个答案:

答案 0 :(得分:2)

这似乎是SymPy的古怪之处,其中sumpy Float!= python浮点数。 (请注意大写)

观察:

import sympy

x=float(16)
x
16.0

isinstance(x,float)
True

y=sympy.Float(x)
y
16.0000000000000

type(y)
sympy.core.numbers.Float

isinstance(y,float)
False

isinstance(y,sympy.Float)
True

所以我想说类型检查的解决方案在最后一行sympy.Float

答案 1 :(得分:0)

在python中有一个功能:

isinstance(0.56, float)



>> true
  

编辑

无需执行if(expresion == True),您只需执行if(expresion)

在您的情况下,您的浮点数不是python浮点数,而是sympy浮点数,因此您只需要这样做:

import sympy

isinstance(sympy.Float(0.56),sympy.Float)
for it in res:
    if(isinstance(it,sympy.Floa)):
        print('here')