Python-Scipy包中的各模块介绍与数值微积分


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)

trapzcumtrapz的区别

  • 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(初值问题),可以求解一阶、二阶以及高阶方程或方程组。

参考:SciPy 教程 | 菜鸟教程 (runoob.com)


文章作者: BITBCI
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BITBCI !
  目录