(三)scipy1.0---积分quad、dblquad、nquad

简介
关键词:数值计算库(线性代数、常微分方程、信号处理、图像处理、矩阵等)
官网:scipy.org
学习大致内容:
integral 积分
optimize 最优化
interpolation 插值
linear 线性计算
others

scipy1.0—积分quad、dblquad、nquad
scipy.integrate.quad

"""
scipy1.0:integrate积分
马玉华   2019.11.5
"""

import numpy as np
import scipy
from scipy import integrate  #解决错误:AttributeError: module 'scipy' has no attribute 'integrate'


def main():
    #  quad一维积分 ,dblquad二维积分(double quad),nquad 多维积分

    result1 = integrate.quad(lambda x:np.exp(-x) , a=0,b=np.inf)  #quad(func,a,b),对函数func从a到b积分。np.inf表示无穷大
    print(result1,type(result1))   # 返回结果为:元组(积分值,误差值)。 因为电脑算的数值积分不同于定积分不定积分,会有一个误差值

    result2 = integrate.dblquad(lambda y,x: x*y**3 , a=0,b=5,gfun= lambda x:0, hfun=lambda x:6)   # ∫_0^6【∫_0^5〖xy^3 ⅆx〗】 ⅆy
    # integral of func(y,x) from x=a..b ,and y=gfun(x)..hfun(x)
    print('积分值,误差值:',result2)

    def f(x,y):              #积分函数
       return x*y
    def bound_x(y):          #积分内容边界
       return [0, 1-2*y]
    def bound_y():           #积分内容边界
        return [0, 0.5]
    result3 = integrate.nquad(f,[bound_x,bound_y])     #nquad(积分函数,积分边界)。 ∫_0^0.5【∫_0^(1-2y)【xyⅆx】】ⅆy
    # 这其中被调用的函数f(x,y)、bound_x(y)均不写括号(),因为我们没有要传入的实参,写了反而会因为没有传入参数而出现错误。bound_y()可写可不写,因为定义的函数中就不需要接收参数
    print(result3)

    """
    为什么要写出这么多函数来调用,直接积分不行吗?
    
    如果直接积分,应该这么写:integrate.nquad(lambda x,y: x*y, [[0,1-2*y],[0,0.5]])
    那就会出现 name 'y' is not defined ,就是x积分域中的1-2*y的y没有被定义没法使用
    
    可写成result3 = integrate.nquad(lambda x,y: x*y, [bound_x,[0,0.5]])
    或result3 = integrate.nquad(f, [bound_x,bound_y()])
    """


if __name__ == '__main__':
    main()

上述例子中的积分为:
(三)scipy1.0---积分quad、dblquad、nquad_第1张图片
输出结果:

"C:\Users\mayuhuaw\Desktop\Python数据分析-基础技术\3. scipy\venv\Scripts\python.exe" "C:/Users/mayuhuaw/Desktop/Python数据分析-基础技术/3. scipy/scipy1.0:integrate积分.py"
(1.0000000000000002, 5.842606703608969e-11) 
积分值,误差值: (4049.9999999999995, 4.4964032497318833e-11)
(0.010416666666666668, 4.101620128472366e-16)

进程已结束,退出代码 0

对quad、dblquad、nquad的用法还有疑问可参见官网:
方法一:https://docs.scipy.org/doc/scipy/reference/integrate.html
方法二:打开官网scipy.org
点documentation
(三)scipy1.0---积分quad、dblquad、nquad_第2张图片
选scipy
(三)scipy1.0---积分quad、dblquad、nquad_第3张图片
点 API reference 下的语句
(三)scipy1.0---积分quad、dblquad、nquad_第4张图片
可得到
(三)scipy1.0---积分quad、dblquad、nquad_第5张图片

你可能感兴趣的:(Python数据分析基础技术)