2013-05-28 1 views
1

Я пытаюсь получить один из углов уравнения Freudenstein (пси):Ошибка в sympy.solve по уравнению Freudenstein

k1 * соз (пси) - k2 * соз (р) + k3 - соз (psi - fi) = 0

У меня есть значения k1, k2, k3 и fi. Я попытался следующие:

from sympy import Symbol, solve, cos 

x = Symbol('x') 
realPsi = solve(k1 * cos(x) - k2 * cos(fi) + k3 - cos(x - fi), x) 

Я получаю эту ошибку:

File "/usr/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 484, in solve solution = _solve(f, *symbols, **flags) 
File "/usr/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 700, in _solve soln = tsolve(f_num, symbol) 
File "/usr/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 1143, in tsolve "(tsolve: at least one Function expected at this point") 
NotImplementedError: Unable to solve the equation(tsolve: at least one Function expected at this point 

Я не использую этот вид инструментов, прежде чем, может быть, я делаю что-то действительно неправильно ...
Любая идея ?

Thanks,

Héctor.

EDIT:
Спасибо за быстрый ответ.

Я попробовал следующее (простое уравнение с COS):

eq = 3.2 * cos(x + 0.2).rewrite(exp) + 1.7 

eq 

Out[1]: 1.6*exp(I*(-x - 0.2)) + 1.6*exp(I*(x + 0.2)) + 1.7 

solve(1.6*exp(I*(-x - 0.2)) + 1.6*exp(I*(x + 0.2)) + 1.7, x) 

NotImplementedError: Unable to solve the equation(tsolve: at least one Function expected at this point 

я использую правильно .rewrite ??

+1

Ах ты просто не передавая «Уравнение» должным образом на SymPy. Взгляните на [здесь] (http://stackoverflow.com/questions/9440337/solving-systems-of-equations-with-sympy?rq=1) – Shark

+0

'NotImplementedError' означает, что он говорит - эти типы уравнений не разрешимый sympy. Вышеупомянутый комментарий неверен, ваш код верен. – Krastanov

ответ

2

Конечно, это должно «просто работать», но здесь тот случай, когда, с небольшой помощью для «простого уравнения с соз», приведенной выше вы можете получить ответ:

>>> eq=3.2*cos(x+.2)+1.7 
>>> [w.n(3,chop=True) for w in solve(expand(eq.rewrite(exp)))] 
[-2.33, 1.93] 
+0

Извините за мое невежество, но я попробую с этим решением, и я также получаю NotImplementedError. Я не понимаю этого: w.n (3, chop = True) – kmsdev

+0

убедитесь, что вы используете текущий мастер. Аргумент chop = True исключает небольшие значения из оцененного выражения. Без этого вы получите – smichr

+0

>>> [wn (3) для w в решении (развернуть (eq.rewrite (exp)))] [-2.33 + 1.05e-140 * I, 1.93 + 1.05e-140 * I] – smichr

2

NotImplementedError означает, что он говорит, а именно, что решатель для этого типа уравнений «не реализован».

Вы можете помочь SymPy немного, чтобы найти решение:

>>> k * cos(x) - m * cos(y) + n - cos(x - y) 
k*cos(x) - m*cos(y) + n - cos(x - y) 
>>> _.rewrite(exp) 
k*(exp(I*x)/2 + exp(-I*x)/2) - ..... 
>>> solve(_, x) 
..... long solution 

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

+0

У вашего второго уравнения нет реальных решений. Наверное, поэтому SymPy терпит неудачу. В любом случае решатели для трансцендентных уравнений ненадежны. – Krastanov

+0

Хорошо, спасибо! Я подумаю об этом. – kmsdev

+0

Я неправильно читаю второе уравнение. Мой комментарий выше неправильный. См. Другой ответ для второго уравнения. – Krastanov

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