SciPy
引言
本文介绍了 scipy 中几个最基本的函数模块,需要用到数学函数的时候就需要寻找 scipy 模块的帮助啦~
01 SciPy 简介
1.1 SciPy是什么?
SciPy是NumPy的外拓展,它以NumPy的的数据结构为基础。因此,SciPy中的大多数数据也由一维或者二维的ndarray组成。
SciPy为了完成类似Mathematica等数学软件的功能,它在NumPy的基础上增加了众多的数学计算,科学计算以及工程计算中的常用模块,包含:
• linalg-线性代数
• integrate-积分和常微分方程的数值解
• signal-信号处理
• ndimage-图像处理
• cluster-聚类算法
• fftpack-傅里叶变换
• interpolate-差值运算
……
1.2 SciPy的安装
Anaconda里面已经安装过SciPy
SciPy的一般不导入整个库,根据需要导入相应的模块。
> from scipy import optimize
> from scipy import linalg
> from scipy import stats
05 数值积分-integrate
5.1 数值积分
scipy.integrate.quad(func, a, b):
> from scipy import integrate
> x2 = lambda x: x**2
> integrate.quad(x2, 0, 4)
(21.333333333333332, 2.3684757858670003e-13)
带参数的积分的运算:
> from scipy.integrate import quad
> def integrand(x, a, b):
... return a*x**2 + b
...
> a = 2
> b = 1
> I = quad(integrand, 0, 1, args=(a,b))
> I
(1.6666666666666667, 1.8503717077085944e-14)# 积分值和误差大小
二元函数的积分为integrate.dblquad()
> from scipy.integrate import dblquad
> area = dblquad(lambda x, y: x*y, 0, 0.5, lambda x: 0, lambda x: 1-2*x)
> (0.010416666666666668, 1.1564823173178715e-16)
多元函数的积分为integrate.nquad()
> func = lambda x0,x1,x2,x3 : x0**2 + x1*x2 - x3**3 + np.sin(x0) + (1 if (x0-.2*x3-.5-.25*x1>0) else 0)
> integrate.nquad(func, [[0,1], [-1,1], [.13,.8], [-.15,1]])
(1.5267454070738633, 2.9437360001402324e-14, {'neval': 388962})
5.2 ODE解法
integrate模块中的scipy.integrate.odeint() 函数可以对一阶微分方程,和一阶微分方程组求数值解。
scipy.integrate.odeint(func, y0, t)
> def f(y, t):
return -2 * y * t
> t = np.arange(0, 2, 0.01)
> y0 = 1
> odeint(f, y0, t)
array([[ 1. ],
[ 0.99990001],
...,
[ 0.01906122]])
参考资料:
Python_SciPy课件自编-张祎璘
scipy官方文档
-END-
作者 / 彭越
排版 / 廖宸
领取专属 10元无门槛券
私享最新 技术干货