python - 在 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)))
我怎样才能让它以十进制形式返回答案?
解决方案
您可以使用 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)]
推荐阅读
- javascript - 知道如何更改 A(链接)标签的 .innerHTML 使其不再是链接吗?
- android - 如何将存储库添加到 Dagger Room 模块?
- javascript - 反应期望一个赋值或函数调用,而是看到一个表达式
- excel - EXCEL:单击一个单元格并突出显示另一个
- java - 比较未知整数类型的数字对象
- terraform - 如何在 terraform 中使用代码管道设置代码构建?
- c - 执行重定向到哪个文件描述符?
- python - 当我定义它时没有定义变量?
- java - 如何使用 Android 连接到内部存储中的 sqlite 数据库文件?
- c++ - 单击 QFrame 时出现段错误