割圆术与极限思想
3318字,阅读需时12分钟

中国古代数学家刘徽在整理数学著作《九章算术》时发现,所谓的“周三径一”,实质上是把圆的内接正六边形的周长作为圆的周长,这显然不够精确,于是他想到用圆的内接正十二边形边形、二十四边形、四十八边形、九十六边形……的周长作为圆的周长,会比使用内接正六边形的周长作为圆的周长更精确。

刘徽在求圆周率时用到了这个方法,用来计算圆的周长,当内接正多边形的面积与圆的面积非常相近时,内接正多边形的周长就可以表示圆的周长,这个方法也称为割圆术。割圆术是用圆内接正多边形的面积去无限逼近圆面积,并以此求圆周长的方法。

具体计算过程为:

设有一圆,首先做内接正六边形,把它的面积记为A1;再做正十二边形,其面积记为A2;再做正二十四边形,其面积记为A3;循环下去,每次边数都加倍,一般把内接正6*2^(n-1)边形的面积记为An,这样就会得到一系列的面积:

A1,A2,A3,……,An

随着n的增大,圆内接正多边形的面积愈来愈接近于圆的面积,作为圆面积的近似值也越来越精确,但无论n取如何大的值,An的面积只是近似于圆的面积,而不是圆的面积。

设想一下,若n无限增大,An的面积无限接近于圆,An也逐渐趋向于一确定的数值,这个确定的数值可以理解为圆的面积,这个确定的数值也称为A1,A2,A3,……,An序列中,当n趋向于无穷大时的极限。

一幅图胜过千言万语,要理解割圆术与极限思想,可以编写一个Python程序,来动态展示圆内接正多边形边数不断增大时,内接正多边形的面积逼近圆面积的过程。

例1 圆内接正多边形边数不断增大时,逼近圆面积动态图

案例代码见课程资源(unit1/case14.py)

import numpy as np
import matplotlib.pyplot as plt
# 导入matplotlib库的交互组件
from matplotlib.widgets import Slider,Button
 
# 绘制内接正多边形
# r:半径  sidenum:正多边形边数
def polygon(r,sidenum):
    # 0~360范围内均匀创建sidenum个数据点  
    data = np.linspace(0,2*np.pi,sidenum,False)
    # 计算边数为sidenum正多边形顶点x坐标
    x = r * np.sin(data)
    # 正多边形顶点首尾相连
    x = np.append(x,x[0])
    # 计算边数为sidenum正多边形顶点y坐标
    y = r * np.cos(data)
    # 正多边形顶点首尾相连
    y = np.append(y,y[0])
    return (x,y)
 
# 绘制正多边形的外接圆
def circle(r):
    # 0~360范围内均匀创建200个数据点
    data = np.linspace(0, 2 * np.pi, 200)
    # 计算圆周点x坐标
    x =  r * np.cos(data)
    # 计算圆周点y坐标
    y =  r * np.sin(data)
    return (x,y)
 
 
# 程序入口
if __name__ == '__main__':
 
    # 调整绘图区域,让底部容纳Slider组件
    plt.subplots_adjust(bottom=0.25)
    # 获取正多边边形数据
    # r:20  sidenum:6
    x,y = polygon(20,6)
    # 绘制正多边形
    # plot函数返回存储Line2D绘图实例对象的列表
    figure, = plt.plot(x,y,color='blue',linewidth=1.5,label='polygon')
    # 获取正多边形外接圆数据
    # r:20
    x1,y1 = circle(20)
    # 绘制正多边形外接圆
    plt.plot(x1,y1,color='r',linestyle='-')
    plt.plot(x1,-y1,color='r',linestyle='-')
    # 绘制圆心
    plt.scatter(0,0,c='r',marker='o')
    # 调整坐标轴,使坐标轴各轴数据单位相同
    plt.axis("equal")
 
 
    # 设置Slider组件绘图区域
    s_area = plt.axes([0.1,0.1,0.75,0.03])
    # 创建Slider组件
    slider_control = Slider(s_area,'slider',0,30,6)
 
    # 定义更新绘图函数
    def update(var):
        # 获取slider_control的当前数值  
        num = int(slider_control.val)
        # 获取正多边形数据
        x,y = polygon(20,num)
        # 设置Line2D绘图实例对象的数据
        figure.set_data(x,y)
        # 按照设置的数据绘制正多边形
        plt.draw()
    # 绑定Slider组件on_changed事件
    slider_control.on_changed(update)
    plt.show()

圆内接正多边形为6条边的效果图。圆内接正多边形的面积和圆的面积还是有很大差距的。

17.png

圆内接正多边形为12条边的效果图。观察图像可以发现,内接正多边形的面积离圆的面积愈来愈近了。

18.png

圆内接正多边形为24条边的效果图。内接正多边形的面积几乎和圆的面积重合了。

19.png

圆内接正多边形为48条边的效果图。仔细观察图像,还稍微能看出正多边形的痕迹,在这种情况下,内接正多边形的面积已经非常逼近圆的面积了。

20.png

圆内接正多边形为96条边的效果图,几乎看不到内接正多边形的痕迹了。

21.png

从割圆术可以理解极限思想,极限是一个动态逼近的过程,从内接正六边形到内接正九十六边形,再到内接正n边形,内接正多边形的面积随着边数的不断增大,会愈来愈近似于圆的面积,在经过无限增大过程后,多边形就会变换为圆,多边形面积便转化为圆面积。

我要评论
全部评论