前言
scipy 包含的功能有最优化,线性代数,积分,插值,拟合常微分等等,是数据分析中完成数学计算最重要的库之一。
第一部分 scipy积分
quad 一元积分模块
quad(func, a, b, args=())
func函数; a:float 积分下限 ; b:积分上限; args 可选,tuple,func的参数
输出是 tuple(值,误差),数值积分是有误差的,所以提供了一个误差值
dbquad 二元积分模块
dblquad(func, a, b, gfun, hfun, args=())
func(x,y)二元函数,a,b是x的范围,gfun(x),hfun(x)是y的范围这里最好用lamaba,args()可选参数
nquad n元积分模块
nquad(func, ranges) func是函数,ranges:iterable object
范围的每个元素可能是2个数字的序列,从后到前的积分,和实际的积分写法是一样的。
import numpy as np
from scipy.integrate import quad,dblquad,nquad
def main():
print quad(lambda x : np.exp(-x),0,np.inf)
# np.inf 无穷大
print dblquad(lambda t,x : np.exp(-x*t)/t**3,0,np.inf,lambda x:1,lambda x : np.inf)
def f(x,y):
return x*y
def bound_y():
return [0,0.5]
def bound_x(y):
return [0,1-2*y]
print nquad(f,[bound_x,bound_y])
if __name__ == "__main__":
main()
输出结果
(1.0000000000000002, 5.842606744944177e-11)
(0.33333333325010883, 1.3888461883425516e-08)
(0.010416666666666668, 4.101620128472366e-16)
scipy 优化器 Opteimizer
import numpy as np
from scipy.optimize import minimize
# 最小值模块
# minimize(fun, x0, optionalargs())
# x0 初始化数据
# option={"xtol":精读;"disp":中间过程}
def main():
"全局最小值"
def rosen(x):
return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0+(1-x[:-1])**2.0)
x0 = np.array([1.3,0.7,0.8,1.9,1.2])
res = minimize(rosen,x0,method="nelder-mead",options={"xtol":1e-8,"disp":True})
#res = minimize(rosen,x0,method="nelder-mead",options={"xtol":1e-8})
print res
# print res.x
if __name__ == "__main__":
main()
输出
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 339
Function evaluations: 571
final_simplex: (array([[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1.00000001, 1.00000001],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 0.99999999]]), array([ 4.86115343e-17, 7.65182843e-17, 8.11395684e-17,
8.63263255e-17, 8.64080682e-17, 2.17927418e-16]))
fun: 4.8611534334221152e-17
message: ‘Optimization terminated successfully.’
nfev: 571
nit: 339
status: 0
success: True
x: array([ 1., 1., 1., 1., 1.])