一般的数学算式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
附图如下: