内容目录
- 环境安装
推荐安装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
待更