參考鏈接: 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}
? ? ? ?
? ? ??
? ? ?α=?arccos(2l1?Ll12?+L2?l22??)??
如果我們想要知道
? ??
? ? ?
? ? ??
? ? ? ?
? ? ? ? L
? ? ? ?
? ? ??
? ? ??
? ? ? ?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=l1?cos(α)+?l12?sin2(α)+l22?
? ? ? ? ? ??
? ? ? ? ? ? ?
? ? ? ? ? ? ??
這個關于
? ??
? ? ?
? ? ??
? ? ? ?
? ? ? ? L
? ? ? ?
? ? ??
? ? ??
? ? ? ?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]
?
更多使用方法可以參考官方文檔?
?
?
?如果覺得ok,點個贊,點個關注,也歡迎給個打賞支持一下編者的工作