2013-11-26 4 views
2

Я искал немного, и я нахожусь в точке, что, я считаю, я могу задавать неправильный вопрос Google. Если есть еще одна тема, которая имеет эту проблему, сообщите мне.sympy - Используя «solve()», чтобы найти значение в знаменателе

Я относительно новичок в симпы, но документация очень хорошая, поэтому до сих пор у меня не было никаких проблем. Я пытаюсь преобразовать в Python из MATLAB, и я тестирую некоторые скрипты, которые работали в MATLAB. Я использую Python 3.3.

Я пытаюсь решить относительно простое равенство, и я терплю неудачу. Когда я запускаю сценарий ниже, я получаю только пустой список в качестве вывода.

# define the symbols we wish to use 
se = symbols('se') 

# assign some constants 
D = S(0.24) 
sn = S(38e6) 
Q = S(0.64) 

Dprime = 1.0 - D 

mc = 1 + (se/sn) 

# this is the expression that we wish to make equal to Q 
expr = (S(1)/(pi * (mc * Dprime - S(0.5)))) 

# this should print the value for se 
print(solve(Eq(expr, Q),se)) 

Этот блок кода работает совершенно точно, пока не будет выполнена функция «решить».

>>> Eq(expr, Q) 
      1     
──────────────────── = 0.64 
π⋅(2.0e-8⋅se + 0.26) 

Я просмотрел документацию, и я обнаружил, что есть несколько флагов, которые я мог бы использовать. Я сначала попробовал те, которые, как я думал, могут иметь значение. Затем я попробовал те, которые, как я думал, не были очень важны. Затем я попробовал их всех.

Я также пробовал различные операции с входами в переменные. Один из них, который я оставил, - это S(), который, как я понимаю, является функцией «symplify». Возможно, я переделал это, но я подозреваю, что нельзя использовать эту функцию.

Проблема, похоже, связана с наличием переменной в знаменателе. Я пробовал многие из примеров, которые содержатся в документации sympy, и все они работают для меня, поэтому я достаточно уверен в самой установке.

Спасибо за ваше время,

J

ответ

1

Конечно, при поиске ответа, я наткнулся немного об использовании «SciPy» вместо «SymPy» для этого. Как это бывает, простое размещение from scipy import * решило проблему.

1

Флаг, который вы хотите, это rational=False. Я думаю, что это ошибка в SymPy, но, вероятно, ваш коэффициент 2.0e-8 слишком мал.

+0

Для этого я открыл https://code.google.com/p/sympy/issues/detail?id=4112. – asmeurer

+0

Похоже, эта проблема исправлена. Он должен работать лучше в следующей версии SymPy. – asmeurer

 Смежные вопросы

  • Нет связанных вопросов^_^