本节介绍专用于符号计算的SymPy 库。
包括:
1.基本介绍
2.方程式
3.积分
4.微分
1.基本介绍
SymPy 引人了 新的对象类。最基本的是Symbol 类,
import sympy as sy x = sy.Symbol('x') y = sy.Symbol('y') type(x)
sympy.core.symbol.Symbol
可以用符号对象定义任何函数。它们不会和Python 函数混淆:
f = x ** 2 + 3 + 0.5 * x ** 2 + 3/2-sy.sqrt(x) #化简 sy.simplify(f)
-sqrt(x) + 1.5*x**2 + 4.5
2.方程式
对于$x^2-1=3$这样的方程,可以用slove函数求解
sy.solve(x**2-1-3)
[-2,2]
3.积分
SymPy 的另一个长处是积分和微分。下面.我们用到用于数值和模拟积分的示例的数,现在既要求出符号解,也要求出精确的数值解我们需要积分上下限的符号:
a, b = sy.symbols('a b')
定义新符号之后,可以"漂亮地打印"符号积分:
print(sy.pretty(sy.Integral(sy.sin(x) + 0.5*x ,(x,a,b))))
b ⌠ ⎮ (0.5⋅x + sin(x)) dx ⌡ a
使用 integrate. 我们可以得积分函数的反导数 (不定积分):
int_func = sy.integrate(sy.sin(x) + 0.5 * x, x) print(sy.pretty(int_func))
2 0.25⋅x - cos(x)
有了反导数,求积分只需要三步:
1.要求取SymPy 表达式的值,
2.用方法subs 将数值代人对应的符号, 在
3.新表达式上调用方法evalf:
Fb = int_func.subs(x , 9.5).evalf(n=7) #evalf()函数可以用求出表达式的浮点数。 Fa = int_func.subs(x, 0.5).evalf(n=7) #Fb 和Fa 的差就是积分的准确值: Fb-Fa
提供量化的积分上下限,在一步中得出准确的值:
sy.integrate(sy.sin(x) + 0.5 * x, (x, 0.5, 9.5))
24.3747547180867
4.微分
对不定积分求导通常应该得出原函数我们对前面的符号反导数应用diff函数. 检查这一点:
int_func.diff()
0.5*x + sin(x)