【python数据建模】Sympy库

概述

Sympy库是进行符号运算的库。
与Scipy库的数值运算不同,Sympy的运算是在推理基础上进行的,不用考虑误差问题。
例如,在Scipy库中, 7 \sqrt7 7 计算中使用的是近似值,但是Sympy中, 7 \sqrt7 7 是以sqrt(7)的形式显示的。

符号类 Symbol

Symbol 是 symPy 库中最重要的类。 如前所述,符号计算是用符号完成的。 SymPy 变量是 Symbols 类的对象。
Symbol() 函数的参数是一个包含可以分配给变量的符号的字符串。
例如:

from sympy import Symbol 
x=Symbol('x') 
y=Symbol('y') 
expr=x**2+y**2 
print(expr)
"""
x**2 + y**2
"""

当然,也可以类似列表传输数据。在一个语句中定义多个符号变量。

abc模块

Sympy中的abc模块中,所有拉丁字母和希腊字母都被定义为符号。 引用该模块,可以不用实例化符号对象,提供方便。
例如:

from sympy.abc import x,y,z
print(x)

索引定义字符

可以使用类似于 range() 函数的语法来定义索引符号。 范围用冒号表示。 范围类型由冒号右侧的字符确定。
例如:

from sympy import symbols 
x=symbols('a:5')
"""
(a0, a1, a2, a3, a4)
"""

Sympy表达式的转换

evalf()& lambdaify()转换成python函数进行数值计算

转换成sympy表达式 sympify()

sympify() 函数用于转换任意表达式,使其可以用作 SymPy 表达式。 在 SymPy 中转换普通的 Python 对象,例如整数对象。 整数等,字符串也被转换为 SymPy 表达式。

import sympy as sy
from sympy.abc import x
expr="x**2+3*x+2" 
expr1=sy.sympify(expr) 
"""
x**2 + 3*x + 2
"""

simplify&expand

simplify()函数简化sympy表达式。
expand()函数可以进行多项式展开。
例如:

from sympy import * 
x=Symbol('x')
expr=sin(x)**2 + cos(x)**2 
print(simplify(expr))
"""
1
"""

积分

integrate()用于计算定积分和不定积分。定积分的计算只需传递参数

from sympy import * 
x,y = symbols('x y') 
expr=x**2 + x + 1 
print(integrate(expr, x))
"""
x**3/3 + x**2/2 + x
"""
print(integrate(expr, (x,1)))
"""
11/6
"""

积分变换

sympy.integrals.transforms 模块中定义了许多积分变换。
常用的是Laplace变换和傅里叶变换,对应的函数是:laplace_transform和fourier_transform

求方程

由于符号 = 和 == 在 Python 中被定义为赋值和相等运算符,因此它们不能用于制定符号方程。 SymPy 提供了 Eq() 函数来建立方程。

import sympy as sy
from sympy.abc import x,y
f=sy.Eq(x**2+y**2,4)
"""
建立了方程x^2+y^2=4
"""

代数方程 solveset()

solveset 的输出是解决方案的有限集。 如果没有解决方案,则返回 EmptySet

import sympy as sy
from sympy.abc import x
# solveset(f, symbol, domain=S.Complexes)
# domain:解的数域,默认在复数域上
f=sy.Eq(x**2+2*x+1,4)
print(sy.solveset(f,symbol=x))
"""
{-3, 1}
"""
f=sy.Eq(x**2,-1)
print(sy.solveset(f,symbol=x))
"""
{-I, I}
"""

线性方程 linsolve()

非线性方程 linsolve()

微分方程 dsolve()

打印输出Latex形式

latex()函数获得sympy表达式的latex形式,方便在latex编辑器中阅读。
例如:

import sympy as sy
from sympy.abc import x
print(sy.latex(sy.sqrt(x**2)))
"""
\sqrt{x^{2}}
"""
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值