Необходимы неотрицательные и плавающие решения - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь решить простую задачу алгебры, решения могут быть реальными и сложными.

Я ищу там только положительные и реальные решения, в этом случае я написал следующий пример:

В основном я пытался спросить python для каждого члена в списке ответов, что "type (ans) является float, а после спрашивает, положительный ли он".

    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 голосов
/ 14 января 2019

Это похоже на причуду SymPy, где sumpy Float! = Python float. (Обратите внимание на заглавные буквы)

Обратите внимание:

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

0 голосов
/ 14 января 2019

В питоне есть функция для этого:

isinstance(0.56, float)



>> true

Редактировать

нет необходимости делать if(expresion == True), вы можете просто сделать if(expresion)

В вашем случае ваш float - это не python float, это sympy float, так что вам просто нужно сделать:

import sympy

isinstance(sympy.Float(0.56),sympy.Float)
for it in res:
    if(isinstance(it,sympy.Floa)):
        print('here')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...