Sympy:TypeError:无法将表达式转换为float

时间:2014-11-28 14:26:11

标签: python sympy solver

我试图在同意中解决一个简单的方程组,但我得到错误:“TypeError:无法将表达式转换为浮动”。

import sympy as sy
q0,q1,x,y = sy.symbols('q_0,q_1,x,y')
s = sy.Matrix([sy.Eq(x-sy.cos(q0)-sy.cos(q0+q1),0),
            sy.Eq(y-sy.sin(q0)-sy.sin(q0+q1),0)]);
sol = sy.solve(s.subs({x:2,y:0}),q0,q1)

解决方案应为(0,0)。我使用的是sympy版本:0.7.6-git。

2 个答案:

答案 0 :(得分:1)

以下是部分解决方案:

import sympy as sy

q0, q1, x, y = sy.symbols('q_0,q_1,x,y', real=True, positive=True)
cq0, cq1, sq0, sq1 = sy.symbols('cq0, cq1, sq0, sq1', real=True)
s = sy.Matrix([sy.Eq(x - sy.cos(q0) - sy.cos(q0 + q1), 0),
               sy.Eq(y - sy.sin(q0) - sy.sin(q0 + q1), 0)])
# Matrix([
# [x - cos(q_0) - cos(q_0 + q_1) == 0],
# [y - sin(q_0) - sin(q_0 + q_1) == 0]])

s2 = sy.expand_trig(s).subs({
    sy.cos(q0) : cq0
    , sy.cos(q1) : cq1
    , sy.sin(q0) : sy.sqrt(1-cq0**2)
    , sy.sin(q1) : sy.sqrt(1-cq1**2)})

solns = set(sy.solve(s2.subs({x: 2, y: 0}), cq0, cq1))
for soln in solns:
    print(soln)

产量

(1, 1)

答案 1 :(得分:0)

如果你用exp重写矩阵条目而不检查答案,那么效果很好:

>>> print(filldedent(
... solve(s.applyfunc(lambda x:x.rewrite(exp)).subs({x:2,y:0}), q0, q1, check=0)))

[(0, 0), (zoo, pi), (pi, 0), (-I*log(-sqrt(exp(zoo))), zoo),
(-I*log(sqrt(exp(zoo))), zoo)]