1 SciPy中的各模块介绍
- SciPy 是一个开源的 Python 算法库和数学工具包。基于 Numpy 的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用。
- SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
模块名 | 功能 | 参考文档 |
---|---|---|
scipy.cluster | 向量量化 | cluster API |
scipy.constants | 数学常量 | constants API |
scipy.fft | 快速傅里叶变换 | fft API |
scipy.integrate | 积分 | integrate API |
scipy.interpolate | 插值 | interpolate API |
scipy.io | 数据输入输出 | io API |
scipy.linalg | 线性代数 | linalg API |
scipy.misc | 图像处理 | misc API |
scipy.ndimage | N 维图像 | ndimage API |
scipy.odr | 正交距离回归 | odr API |
scipy.optimize | 优化算法 | optimize API |
scipy.signal | 信号处理 | signal API |
scipy.sparse | 稀疏矩阵 | sparse API |
scipy.spatial | 空间数据结构和算法 | spatial API |
scipy.special | 特殊数学函数 | special API |
scipy/stats | 统计函数 | stats.mstats API |
2 连续函数求积分
一重连续积分
scipy.integrate中的integrate.quad
函数
$$
I(f)=∫0π(sinx−cosx)dx
$$
# 答案区
import math
from scipy import integrate
def f(x):
return math.sin(x)-math.cos(x)
v,err = integrate.quad(f,0,math.pi)
print(v)
二重连续积分
scipy.integrate中的integrate.dblquad
函数
$$
I(f(x,y))=∫ab∫h(x)g(x)f(x,y)dxdy
$$
# dblquad函数的第一个形参应是f(x,y)、第2、3、4、5分别是a、b、g(x)、h(x),也就是说dblquad函数的第4和5是一个函数
from scipy import integrate
import numpy as np
def f(x, y):
return x * y
def h(x):
return x
v, err = integrate.dblquad(f, 1, 2, lambda x: 1, h)
print (v)
3 离散函数求积分
trapz和cumtrapz均是用梯形法来计算数值积分,位于scipy.integrate
中,使用方法如下:
scipy.integrate.cumtrapz(a, self.t, initial=0)
trapz
和cumtrapz
的区别:
trapz
只是算出一个最后的结果即把y从t0到t100积分的值;- 而
cumtrapz
会把中间每一步的结果都算出来,即计算出y从t0到t0积分的值,从t0到t1积分的值,从t0到t2积分的值……直到最后结果。
求取一至三重积分的函数分别为:
integrate.quad(func,a,b,args,full_output)
integrate.dblquad(func,a,b,gfun,hfun,args,epsabs,epsrel)
integrate.tplquad(func,a,b,gfun,hfun,qfun,rfun,args,epsabs,epsrel)
以三重积分为例。func为运算对象函数,形式为func(z,y,x)。a,b对应变量x的积分区域,gfun,hfun对应变量y的积分区域,依次类推。
注意:gfun,hfun等的形式应为函数,其中gfun,hfun是自变量为x的函数,qfun,rfun是自变量为x,y的函数。这些函数可以使用lambda函数进行定义,形式通常为:lambda x,y:x*y
如果是常函数,则定义为:lambda x:0
lambda x,y:1
4 求微分
- 使用Scipy求解微分方程主要使用
scipy.integrate
模块,函数是odeint
,solve_ivp
(初值问题),可以求解一阶、二阶以及高阶方程或方程组。