在用SciPy数值积分一节我们介绍了如何使用数值定积分计算球体的体积,而SymPy的符号积分函数 integrate则可以帮助我们进行符号积分。integrate可以进行不定积分:
from sympy import integrate ,cos,sin
from sympy.abc import a,x,y
import numpy as np
integrate(x*sin(x), x)
如果指定x的取值范围的话,integrate则进行定积分运算:
import math
from sympy import *
integrate(x*sin(x), (x, 0, 2*pi))
为了计算球体体积,首先让我们来看看如何计算圆形面积,假设圆形的半径为r,则圆上任意一点的Y 坐标函数为: y(x) = √ r 2 − x 2 因此我们可以直接对上述函数在-r到r区间上进行积分得到半圆面积,注意这里我们使用symbols函数 一次创建多个符号:
x, y, r = symbols('x,y,r')
2 * integrate(sqrt(r*r-x**2), (x, -r, r))
很遗憾,integrate函数没有计算出结果,而是直接返回了我们输入的算式。
这是因为 SymPy 不知道 r
是大于 0
的,如下重新定义 r
,就可以得到正确答案了:
r = symbols('r', positive=True)
circle_area = 2 * integrate(sqrt(r**2-x**2), (x, -r, r))
circle_area
接下来对此面积公式进行定积分,就可以得到球体的体积,但是随着X轴坐标的变化,对应的切面的的 半径会发生变化,现在假设X轴的坐标为x,球体的半径为r,则x处的切面的半径为可以使用前面的公 式y(x)计算出。 图 4.1 - 球体体积的双重定积分示意图 因此我们需要对circle_area中的变量r进行替代:
circle_area = circle_area.subs(r, sqrt(r**2-x**2))
circle_area
integrate(circle_area, (x, -r, r))