首页 > 解决方案 > 在 sympy 中以十进制而不是精确值返回解决方案

问题描述

我正在使用 sympy 来解决以下三个方程:

t(x-40cos(70))=-300cos(40)
t(y-40sin(70))=300sin(40)
x^2+y^2=250^2

我有这行代码可以返回解决方案:

print(nonlinsolve([Eq(x*t-40*t*cos(70), -300*cos(40)),
                   Eq(y*t-40*t*sin(70), 300*sin(40)),
                   Eq(x**2 + y**2, 250**2)],
                   [x, y, t]))

但是,它返回的值是精确的形式:

FiniteSet((10*(sqrt(-16*sin(70)**2*cos(40)**2 - 16*sin(40)**2*cos(70)**2 - 32*sin(40)*sin(70)*cos(40)*cos(70) + 625*cos(40)**2 + 625*sin(40)**2)*cos(40) + 4*sin(40)*sin(70)*cos(40) + 4*sin(40)**2*cos(70))/(cos(40)**2 + sin(40)**2), 10*(-sqrt(-16*sin(70)**2*cos(40)**2 - 16*sin(40)**2*cos(70)**2 - 32*sin(40)*sin(70)*cos(40)*cos(70) + 625*cos(40)**2 + 625*sin(40)**2)*sin(40) + 4*sin(40)*cos(40)*cos(70) + 4*sin(70)*cos(40)**2)/(cos(40)**2 + sin(40)**2), 30*sqrt(-16*sin(70)**2*cos(40)**2 - 16*sin(40)**2*cos(70)**2 - 32*sin(40)*sin(70)*cos(40)*cos(70) + 625*cos(40)**2 + 625*sin(40)**2)/(-625 + 16*cos(70)**2 + 16*sin(70)**2) + 120*(-sin(40)*sin(70) + cos(40)*cos(70))/(-625 + 16*cos(70)**2 + 16*sin(70)**2)), (10*(4*sin(40)*sin(70)*cos(40) + 4*sin(40)**2*cos(70) - sqrt(-16*sin(70)**2*cos(40)**2 - 16*sin(40)**2*cos(70)**2 - 32*sin(40)*sin(70)*cos(40)*cos(70) + 625*cos(40)**2 + 625*sin(40)**2)*cos(40))/(cos(40)**2 + sin(40)**2), 10*(4*sin(40)*cos(40)*cos(70) + 4*sin(70)*cos(40)**2 + sqrt(-16*sin(70)**2*cos(40)**2 - 16*sin(40)**2*cos(70)**2 - 32*sin(40)*sin(70)*cos(40)*cos(70) + 625*cos(40)**2 + 625*sin(40)**2)*sin(40))/(cos(40)**2 + sin(40)**2), 120*(-sin(40)*sin(70) + cos(40)*cos(70))/(-625 + 16*cos(70)**2 + 16*sin(70)**2) - 30*sqrt(-16*sin(70)**2*cos(40)**2 - 16*sin(40)**2*cos(70)**2 - 32*sin(40)*sin(70)*cos(40)*cos(70) + 625*cos(40)**2 + 625*sin(40)**2)/(-625 + 16*cos(70)**2 + 16*sin(70)**2)))

我怎样才能让它以十进制形式返回答案?

标签: pythonpython-3.xsympy

解决方案


您可以使用 evalf。这有点繁琐,因为 set 和 tuple 对象没有 evalf 方法,所以:

>>> [tuple(s.evalf() for s in si) for si in sol]                                                                                          
[(-168.048969910891, -185.093337837666, -1.03464484562728), (165.411705775208, 187.453907914815, 1.42834762919956)]

推荐阅读