数值积分

 原文地址:http://old.sebug.net/paper/books/scipydoc/scipy_intro.html#id4,转载请注明出处!

数值积分是对定积分的数值求解,例如可以利用数值积分计算某个形状的面积。下面让我们来考虑一下如何计算半径为1的半圆的面积,根据圆的面积公式,其面积应该等于PI/2。单位半圆曲线可以用下面的函数表示:

def half_circle(x):
    return (1-x**2)**0.5

下面的程序使用经典的分小矩形计算面积总和的方式,计算出单位半圆的面积:

import numpy as np
N = 10000
x = np.linspace(-1, 1, N)
dx = 2.0/N
y = half_circle(x)
print(y)
print(y[:-1])
print(y[1:])
print(dx * np.sum(y[:-1] + y[1:])) # 3.1412751679989044

用上述方式计算出的圆上一系列点的坐标,还可以用numpy.trapz进行数值积分:

print(np.trapz(y, x) * 2) # 面积的两倍 3.1415893269315975

此函数计算的是以x,y为顶点坐标的折线与X轴所夹的面积。同样的分割点数,trapz函数的结果更加接近精确值一些。

如果我们调用scipy.integrate库中的quad函数的话,将会得到非常精确的结果:

from scipy import integrate
pi_half, err = integrate.quad(half_circle, -1, 1)
print(pi_half*2) #3.141592653589797

多重定积分的求值可以通过多次调用quad函数实现,为了调用方便,integrate库提供了dblquad函数进行二重定积分,tplquad函数进行三重定积分。下面以计算单位半球体积为例说明dblquad函数的用法。

单位半球上的点(x,y,z)符合如下方程:

x^2 + y^2 + z^2 = 1

因此可以如下定义通过(x,y)坐标计算球面上点的z值的函数:

def half_sphere(x, y):
    return (1-x**2-y**2)**0.5

X-Y轴平面与此球体的交线为一个单位圆,因此积分区间为此单位圆,可以考虑为X轴坐标从-1到1进行积分,而Y轴从 -half_circle(x) 到 half_circle(x) 进行积分,于是可以调用dblquad函数:

A = integrate.dblquad(half_sphere, -1, 1,lambda x:-half_circle(x),lambda x:half_circle(x))
print(A) #(2.094395102393199, 1.0002356720661965e-09)
#通过球体体积公式计算的半球体积)
print(np.pi*4/3/2) #2.0943951023931953

dblquad函数的调用方式为:

dblquad(func2d, a, b, gfun, hfun)

对于func2d(x,y)函数进行二重积分,其中a,b为变量x的积分区间,而gfun(x)到hfun(x)为变量y的积分区间。

半球体积的积分的示意图如下:

X轴的积分区间为-1.0到1.0,对于X=x0时,通过对Y轴的积分计算出切面的面积,因此Y轴的积分区间如图中红色点线所示。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值