【数学问题】利用python求解表达式

1、问题描述

我们昨天提出了四足机器人的初始姿态的问题,里面给出了很多公式,例如下面这条。:

α = arccos ( l 1 2 + L 2 l 2 2 2 l 1 L ) \begin{matrix} \alpha =& \arccos{\left(\frac{l_1^2 + L^2 -l_2^2}{2l_1L} \right)}\\ \\ \end{matrix}

如果我们想要知道 L L 关于 α \alpha 的表达式,可能得经过一系列化简才能得出答案,这时候我们可以借助强大的计算机来帮我们实现这些运算,最终得出答案:

L = l 1 cos ( α ) + l 1 2 sin 2 ( α ) + l 2 2 L =l_1 \cos{\left(\alpha \right)} + \sqrt{- l_1^{2} \sin^{2}{\left(\alpha \right)} + l_{2}^{2}}

这个关于 L L 的表达式一看就很复杂,是作者手算出来的吗?当然不是,我是利用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]

更多使用方法可以参考官方文档

发布了43 篇原创文章 · 获赞 265 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_41045354/article/details/104844333