4.3 积分

使用Integrate()函数可以轻松完成各种积分的运算,Integrate()函数的使用方法如下:

Integrate(expressions, (integration_variable[, lower_limit, upper_limit])

其中第一个参数为待积分的表达式,第二个参数是以元组形式传入积分变量以及其上下界。

4.3.1 不定积分

当Integrate()函数第二个参数不传入积分上下界时,默认计算表达式的不定积分:

例:求不定积分 arctanx(1+x)x\int \frac{\arctan{\sqrt{x}}}{(1+x)\sqrt{x}}

[]:f=Lambda(x, atan(sqrt(x))/((1+x)\*sqrt(x)))

integrate(f(x), x)

4.3.2 定积分

当Integrate()函数第二个参数传入积分上下界时,默认计算表达式在给定范围内的定积分:

例:求定积分0log2exdx\int_{0}^{log 2} e^{-x} dx

[]:integrate(exp(-x), (x, 0, log(2)))

除了使用Integrate()函数计算函数的定积分以外,还可以使用高斯-勒让德公式公式来求待积分函数在给定区间上的定积分。

在区间[1,1],[1,1][-1,1],[-1,1]上,高斯-勒让德求积公式为: 11f(x)dxk=0nAkfxk\int_{-1}^{1} f(x) dx \approx \sum_{k=0}^{n} A_k f{x_k} Gass点系数都有表可以查询。

使用sympy.integrals.quadrature.gauss_legendre()函数可以查询分布在区间上的高斯点以及对应的高斯系数。

gauss_legendre()函数的使用方法如下:

sympy.integrals.quadrature.**gauss_legendre**(*n**n_digits*)

其中n为高斯点的个数,n_digits为返回的点数和权重的有效位数的个数,该函数返回一个二元组**(x, w)** : x和w是浮点数的点和权值列表。

例:使用高斯勒让德公式求定积分1116+6xx2\int_{-1}^{1} \sqrt{16+6x-x^2}的值

在本例中,我们先使用gass_legendre生成10个高斯点以及对应的高斯系数,然后使用求和函数球的使用高斯-勒让德公式求出的积分值。

[]:from sympy.integrals.quadrature import gauss_legendre

n_point=10

xi, wi = gauss\_legendre(n_point, 5)

print(xi, wi)

[]:[-0.97391, -0.86506, -0.67941, -0.43340, -0.14887, 0.14887, 0.43340, 0.67941,
0.86506, 0.97391] [0.066671, 0.14945, 0.21909, 0.26927, 0.29552, 0.29552,
0.26927, 0.21909, 0.14945, 0.066671]

[]:f=Lambda(x, sqrt(16+6\*x-x\*\*2))

gauss_sum=0

for i in range(0, n_point):

gauss_sum=wi[i]\*f(xi[i])+gauss_sum

gauss_sum

gauss_legendre()函数生成的高斯点分布在区间上,使用线性变换: x=ba2t+a+b2x = \frac{b-a}{2} t + \frac{a+b}{2} 可以将积分区间从变成,由定积分的换元法有: abf(x)dx=ba211f(ba2t+a+b2)dt\int_{a}^{b}f(x) dx = \frac{b-a}{2} \int_{-1}^{1} f(\frac{b-a}{2} t + \frac{a+b}{2}) dt 这样就可以使用高斯-勒让德公式计算一般区间的积分。

4.3.3 广义积分

求广义积分的方法与求定积分的方法是相同而,不同的是广义积分的计算结果有可能是无穷——\infty

4.3.4 无穷积分

例:计算积分0+ex2dx\int_{0}^{+\infty} e^{-x^2} dx

[]:integrate(exp(-x\*\*2), (x, 0, oo))

4.4.5 瑕积分

例:判断广义积分021(1x)2\int_0^2 \frac{1}{(1-x)^2}的敛散性

[]:integrate(1/(1-x)\*\*2, (x, 0, 2))

Last updated