目录
[TOC]
前言
符号化运算也是数值运算中的一个主要的领域,今天我们来学习以下,python里强大的符号运算库—sympy。今天讲的是第一讲,sympy的操作。
对应于官网的:Basic Operations
https://docs.sympy.org/latest/tutorial/basic_operations.html
(一)符号的初始化与输出设置-symbol() symbols() latex()
1.作用:
在sympy里进行符号运算之前,必须先定义sympy的符号,这样sympy才能识别该符号。
.init_printing(use_latex=True)开启时,在jupyter运行时,输出的是LaTeX的格式
使用:latex()函数,同样返回LaTeX的格式。
2.操作:
(1)说明:
符号的初始化分为两种形式:
- 单个符号的初始化:x = sympy.Symbol(‘x’)
- 多个符号的初始化:x,y=sympy.symbols(“x y”)
(2)源代码:
import sympy as sy# 符号化变量x = sy.Symbol('x')y, z = sy.symbols('y z')# 输出设置sy.init_printing(use_latex=True)# 输出结果print("x:", type(x))print("y:", type(y))print(x**2+y+z)print(sy.latex(x**2+y+z))
(3)输出效果
(二)替换符号-subs(old,new)
1.说明:
sub是Substitution的简称,也就是替换,其有两个作用:
语法是:expr.sub(old,new)
- 数值替换,用数值替换符号,进行带入计算。
- 符号替换,用一些符号替换符号。
2.源代码:
from sympy import *# 符号化变量x, y, z = symbols('x y z')expr = x**2+1# 数值替换result = expr.subs(x, 2)print("原式:", expr)print("数值计算的结果:", result)# 符号替换new_expr = expr.subs(x, y+z)print("符号替换的结果:", new_expr)
3.输出效果:
4.注意点:
(1)是否改变原表达式
subs()函数不改变原表达式,并且返回一个修改的表达式。
(2)替换多个表达式
当需要替换多个表达式时,可以在subs()里使用列表
如:subs([(x,2), (y, 3), (z, 4)])
表示:将x替换成2,y替换成3,z替换成4
(三)将字符串变为sympy的表达式-sympify()
1.说明:
不要混淆了sympify()函数与 simplify()函数,前者是转化,后者是简化。
2.源代码:
from sympy import *string = "x**2+2*y + z/2"# 转化expr = sympify(string)print("类型:", type(expr))print("表达式:", expr)
3.输出效果:
(四)数值计算-evalf()
1.说明:
相当于python自带的eval()函数,只是进行的是float浮点数运算。
2.操作:
(1)对于数值表达式的运算
直接使用.evalf()函数
from sympy import *expr = sqrt(8)# 进行计算result = expr.evalf()print(result)
(2)对于符号表达式的运算
对于表达式常用的是:
.evalf(subs={x: 2.4})
from sympy import *# 符号化x = Symbol('x')# 进行计算expr = x**2+3result = expr.evalf(subs={x: 2})print(result)
(五)自定义表达式-lambdify()
1.说明:
该函数有点类似于lambda(),用于自己构造一个函数表达
2.源代码:
from sympy import *import numpy as npx = Symbol('x')a = np.arange(10)expr = x**2# 构造自己的函数f = lambdify(x, expr, "numpy")print(f(a))
3.输出效果:
作者:Mark
日期:2019/03/15 周五
文章转载于:https://www.jianshu.com/p/17c908f2e66d
原著是一个有趣的人,若有侵权,请通知删除
评论前必须登录!
立即登录