内容目录
						
						- 环境安装
推荐安装anaconda,怎么装很简单,百度。 
sympy使用介绍
sympy是python的一个科学计算库,用强大的符号计算体系完成诸多如多项式求值、求极限、求导、解方程、求积分、解微分方程、级数展开、矩阵运算等计算。
- 常用的sympy内置符号
 
自然对数 sympy.E
import sympy
display(sympy.E)
display(float(sympy.E))
sympy.log(sympy.E)
    e
    2.718281828459045
    1
无穷 sympy.oo
import sympy
1/sympy.oo
    0
圆周率\( \pi \) sympy.pi
sympy.sin(sympy.pi)
    0
- 用sympy进行初等运算
 
常见的运算函数有:
- 求对数函数sympy.log
 - 正弦函数sympy.sin
 - 求平方根函数sympy.sqrt
 - 求n次方根函数sympy.root
 - 求阶乘sympy.factorial
等等 
- 表达式与表达式求值
 
sympy可以用一符号系统来表示一个表达式,如函数、多项式等,并且可以进行求值。
# 定义x为一个符号,表示一个变量
import sympy
x = sympy.Symbol('x')
fx = 2*x + 1 # fx是一个表达式
fx.evalf(subs={x:2}) # 用evalf函数,传入变量的值,对表达式进行求值
    5.0
x,y = sympy.symbols('x,y') # 注意:定义多变量的时候,这里的symbols方法首字母是小写的
f = 2*x + y
f.evalf(subs={x:1,y:2}) # 以字典的形式传入多个变量的值
# 如果只传入一个变量的值,则输出将值代入后的表达式
f.evalf(subs={y:2}) 
\( 2.0x + 2.0 \)
- 求极限用sympy.limit
 - 求导用sympy.diff
 
numpy使用介绍
numpy的使用在前面的文章介绍过了(numpy基本使用),这里就是再提一下,在绘制三维图标时,需要使用numpy中的mgrid函数。它会返回一个密集的多维网格,一般形式为np.mgrid[start:end:step], 其中start表示开始值,end表示结束坐标(不包括此点),step表示步长
import numpy as np
np.mgrid[-1:4:2]
array([-1,  1,  3])
np.mgrid[-1:4:2,-3:1:1]
array([[[-1, -1, -1, -1],
        [ 1,  1,  1,  1],
        [ 3,  3,  3,  3]],
       [[-3, -2, -1,  0],
        [-3, -2, -1,  0],
        [-3, -2, -1,  0]]])
np.mgrid[-1:4:2,-3:1:2]
array([[[-1, -1],
        [ 1,  1],
        [ 3,  3]],
       [[-3, -1],
        [-3, -1],
        [-3, -1]]])
scipy的使用介绍
scipy是世界上著名的python开源科学计算库,构建于numpy之上,功能更为强大,是较numpy更高阶的科学计算库。
附:求导的几种方式
- 使用sympy的diff函数,可以得到\(f(x)\)的导数表达式,给出数学表达式里数学符号描述符
 - 使用scipy.misc模块下的derivative函数。
 
import numpy as np
from scipy.misc import derivative
def f(x):
    return x**5
print(derivative(f,2,dx=1e-6))
80.00000000230045
C:\Users\xhs20\AppData\Local\Temp\ipykernel_2416\782970982.py:7: DeprecationWarning: scipy.misc.derivative is deprecated in SciPy v1.10.0; and will be completely removed in SciPy v1.12.0. You may consider using findiff: https://github.com/maroba/findiff or numdifftools: https://github.com/pbrod/numdifftools
  print(derivative(f,2,dx=1e-6))
这里提示我们scipy.misc.derivative被弃用了,推荐使用findiff或者numdifftools。
- 使用numpy模块里的poly1d函数构造[latexf(x)[/latex],poly1d函数的形参是多项式的系数,最左侧的是最高此项的系数,构造的函数为多项式。numpy的polyder函数和deriv函数的作用差不多,都是对多项式求导,可以得到函数导数的表达式和在某点的导数。
 
例:对多项式\(x^5+2x^4+3x^2+5\)求导
import numpy as np
p = np.poly1d([1,2,0,3,0,5]) # 构造多项式
print(p)
   5     4     2
1 x + 2 x + 3 x + 5
print(np.polyder(p,1)) # 求一阶导数
   4     3
5 x + 8 x + 6 x
print(np.polyder(p,1)(1.0)) # 求一阶导数在x=1处的值
19.0
print(p.deriv(1)) # 求一阶导数
   4     3
5 x + 8 x + 6 x
print(p.deriv(1)(1.0)) # 求一阶导数在x=1处的值
19.0
- 
使用findiff
待更 - 
使用numdifftools
待更