一般的數學算式math函數庫就可以解決了,如果是涉及到高等數學極限,微積分等知識,就需要用到sympy科學計算庫,它是專門用來解決數學的運算問題的。
Sympy是一個符号計算的Python庫。它的目标是成為一個全功能的計算機代數系統,同時保持代碼簡潔、易于了解和擴充。它完全由Python寫成,不依賴于外部庫。SymPy支援符号計算、高精度計算、模式比對、繪圖、解方程、微積分、組合數學、離散 數學、幾何學、機率與統計、實體學等方面的功能。
官方文檔:SymPy 1.11 documentation
安裝 sympy:
# 第一種
pip install sympy
# 第二種 推薦,鏡像下載下傳更快
pip install sympy -i Simple Index
使用 jupyter 顯示效果更好。Project Jupyter | Home
導入庫的方式為 from sympy import *
常見的數學符号在sympy中的表示方式:
數學符号 | sympy表達 | 數學符号 | sympy表達 |
sinx | sin(x) | arccosx | acos(x) |
cosx | cos(x) | arcsinx | asin(x) |
tanx | tan(x) | imaginary number i | I(大寫i) |
exp(x) 或者 E**x | oo(兩個o) | ||
y**x | linx | log(x) | |
x/y | pi |
基本數學方法
from sympy import * # 導入sympy 全部函數
#數學表達式,用到symbols() 聲明數學符号
x, y = symbols('x, y') # symbols() 聲明了兩個符号x, y。否則就會報 x 未定義錯誤
expr = x + 2*y # 定義了表達式:x + 2y
expr # x + 2*y
#可以對表達式進行簡單的四則運算
expr = expr + x + 1 # 表達式可以進行基本運算
expr # 2*x + 2*y + 1
expr = expr * x + 2 # 相當于:(2*x + 2*y + 1) * x + 2
expr # x*(2*x + 2*y + 1), 并沒有進行展開計算
#表達式展開成最終形式,用到 expand() 函數
expanded_expr = expand(expr)
expanded_expr # 2*x**2 + 2*x*y + x,表達式以最終能夠展開的形式顯示
#平方根
sqrt(8) #
#如果想求8的算數平方根的具體的值,就需要用的 math 類
import math
math.sqrt(8) # 2.82842712474619
#簡化表達式,用到simplify()函數
expr = (3*x**2+9)/3
expr #
#分解因式,用到 factor() 函數
expr = factor(expanded_expr) #expanded_expr = 2*x**2 + 2*x*y + x
expr # 𝑥(2𝑥+2𝑦+1)
#解方程,用到solve(equation, symbol),equation為等式或者表達式,symbol聲明的符号即變量
x = Symbol("x")
expression = x**2+3*x-4 # 即方程
,x為變量
solve(expression, x) # 方程的解有兩個:[-4,1]
solve(x**2 - 2, x) #
的解為:
#替代變量為具體值,用到expression.subs(symbol, constant),equation為等式或者表達式,symbol為要替換的變量,constant具體的數值
expression = x**2+3*x-4
expression.subs(x, 3) #将表達式expression中的x的值替換為3,結果為:14
高等數學方法
#求極限,用到limit(expr, symbol, value),expr表達式,symbol變量,value變量的值
limit(x**2, x, 5) #
在點5處的極限值為 25
limit(x**3, x, oo) #
在點正
處的極限值為
limit(1/x, x, 0) # 1/x 從正方向逼近0時的極限值為
limit(1/x, x, 0, dir="-") #1/x 從負方向逼近0時的極限值為 -
limit(1/x, x, 0, dir='+-') #1/x 從正負方向逼近0時的極限值為
limit(sin(x)/x, x, 0) #計算
的極限值為1
#計算階乘,用到factorial()
factorial(5) #計算5的階乘,即5×4×3×2×1=120
#求一階導數,用到diff(expr),計算表達式的導數
x = Symbol('x') #聲明變量
expression = x**3 + x**2 + 9*x #要求導的表達式
diff(expression) #求導結果:
diff(sin(x)) #求導結果:cos(x)
diff(x**3*y*z,x) #表達式
對x求導,結果為:
expr = x**4+x**3+x+1
expr.diff(x) #導數為:
#求高階導數
expr=sin(x)
expr.diff(x,4) #求sin(x)的4階導數,為:sin(x)
expr=x**5 + x**4
expr.diff(x,3) #求
的3階導數,為:12x(5x+2)
#求不定積分,用到Integrate(expr),求表達式的不定積分,即計算∫ expr dx
expr = 3*x**2 + 2*x + 9 # 表達式
integrate(3 * x ** 2 + 2 * x + 9) #積分為:
integrate(x*y, x) #表達式xy對x進行積分,結果為
integrate(sin(x**2), (x, -oo, oo)) #計算
積分,結果為
#求定積分,用到Integrate(expr, (x, a,b )),求表達式的定積分,即計算
integrate(log(x), (x, 1, a)) #log(x)對x從1到a求積分,結果為alog(a)-a+1
#二重積分,用到integrate(expr,x,y),對表達式expr進行對x,y的二重積分。
# 計算
,即計算 xy在抛物線
與直線 y=x−2 所圍成的區域上的二重積分
expr=x*y # 表達式
integrate(expr,(x, y**2,y+2),(y,-1,2)) # y區間[-1,2],x區間[y**2, y+2],結果: 45/8
附圖如下: