1、问题描述
我们昨天提出了四足机器人的初始姿态的问题,里面给出了很多公式,例如下面这条。:
如果我们想要知道 关于 的表达式,可能得经过一系列化简才能得出答案,这时候我们可以借助强大的计算机来帮我们实现这些运算,最终得出答案:
这个关于 的表达式一看就很复杂,是作者手算出来的吗?当然不是,我是利用smypy这个库计算出来的表达式。
sympy是一个Python的科学计算库,用一套强大的符号计算体系完成诸如多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等等计算问题
2、代码
这里直接给出代码
from sympy import *
import numpy as np
# 定义我们的符号
l1 = symbols('11')
l2 = symbols('l2')
L = symbols('L')
a = symbols('a')
# 定义等式,右边要等于0
eq = cos(a) - (l1**2 + L**2 - l2**2)/(2*l1*L)
# 求解
result = solve(eq, L)
# 打印结果
print('L:', result)
# 将结果转化成latex格式
print(latex(result))
输出如下,因为是二次函数,所以这里会给出两个解,实际上只有一个是符合实际情况的。
L: [11*cos(a) - sqrt(-11**2*sin(a)**2 + l2**2), 11*cos(a) + sqrt(-11**2*sin(a)**2 + l2**2)]
\left[ 11 \cos{\left(a \right)} - \sqrt{- 11^{2} \sin^{2}{\left(a \right)} + l_{2}^{2}}, \ 11 \cos{\left(a \right)} + \sqrt{- 11^{2} \sin^{2}{\left(a \right)} + l_{2}^{2}}\right]
solve()
函数第一个参数是一个方程式(等于零),第二个参数是想要求解的符号。
3、求解一般代数方程
from sympy.solvers import solve
from sympy import Symbol
x = Symbol('x')
result = solve(x**2 - 1, x)
[-1, 1]
更多使用方法可以参考官方文档