数学工具(五)符号数学

本节介绍专用于符号计算的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
24.37475
提供量化的积分上下限,在一步中得出准确的值:
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)

 

 
posted @ 2018-08-01 10:05  Jin_liang  阅读(803)  评论(0编辑  收藏  举报