我试图在同意中解决一个简单的方程组,但我得到错误:“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。
答案 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)]