资源描述
椭圆周长和旋转椭球面积近似值的简单算法
——第十六届北京高中数学知识应用竞赛论文
论文标题: 椭圆周长和旋转椭球面积近似值的简单算法
作者姓名: 吴欢庆 、吴斯乾(合作)
性别: 男 学校: 北京市通州区第四中学
年级: 高二 指导教师: 曹凤华、李江涛
准考证号: 0311
[内容摘要]:我选这个课题是因为我父亲在工作中遇到了需要计算椭圆周长而又不会算的问题,我为了解决我父亲的困难,所以对这方面做了一些研究。我们用类比推理的方法,提出了椭圆周长近似的简单算法,并推广到怎样计算旋转椭球体的表面积。我们采用简单推导加上用C语言编程计算的方法,让程序运行了约一个小时,得到了一组比较精确的数据,一定程度上解决了计算椭圆周长难的问题。对一些需要计算椭圆周长的工程应用有一定的帮助。
[关键词]:椭圆周长,椭球表面积,椭圆积分,修正因子
本人郑重声明:所呈交的数学应用论文是本人在指导教师的指导下独立进行研究的成果,除文中已经注明引用的内容外,本文不含其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。
论文作者签名:吴欢庆 吴斯乾
2013年3月30日
椭圆周长和旋转椭球面积近似值的简单算法
圆是最美的图形,但自然界中的正圆,少之又少。行星运行的轨道是椭圆的,地球是一个椭球体,在生物界里很难看到完美的圆。许多的图形都是不规则的,椭圆是独特的,与众不同。
众所周知,椭圆积分属于高等微积分的知识,求解椭圆周长的积分存在着很大的难度,在实际的生活应用中给人们带来很大的困扰。当你需要求一个椭圆物体的周长时,总是会没有头绪,仿佛不知道它的计算公式(其实本来就没有公式),没有了这些数据,做起研究就会不知所措。
我的一个朋友以前做关于种子完整度的研究,用到了圆形度来描述种子的形状。他在他的博客中这样写道:
“为了检测表皮破裂种子,我调用IMAQ Vision里的形状分析函数得到了面积周长长度宽度等一些形状参数。根据种子图像轮廓,发现用种子的圆形度:,(P为周长,A为面积)可以比较好地区分完整和破碎种子。后来我想,种子的轮廓更接近椭圆,何不用‘椭圆形度’衡量面积和周长的关系呢?可是我记不得椭圆周长的计算方法,百度之,发现我原本就不可能知道。”
椭圆是一个不怎么完美的图形,椭圆周长的积分不能用像圆的周长和面积那样简单的公式表达,所以我们只能计算椭圆周长的近似值。因为没有一个确定的公式,当我们需要精确计算椭圆周长的时候,麻烦就来了。
我父亲是做机床生意的,有次我和父亲去公司,遇到了一位做管道设备的客户,他需要把圆形的管道截成斜面,然后沿着斜面再接上一个椭圆形的管道,这位客户要求把铝板卷成椭圆的管道,至于用多宽的铝板,就需要计算椭圆截面的周长。由于这样一个斜的截面不方便测量,虽然可以做一些试验,来确定铝板的宽度,而这样必定会耗费很多时间和精力。如果材料比较贵的话,用试验的方法就不太可取了。对于普通的工人来说,没有多少数学知识,又不能设计程序计算,怎样求椭圆的周长就成了一个问题。而我,懂得一些微积分,也想帮父亲解决这个问题,所以我想找出一个计算椭圆周长的简单方法。
§ 椭圆周长的积分
我们在计算曲线图形的面积和周长通常都要用到微积分,下面我们简单地推导一下椭圆周长的积分表达式:
我们知道椭圆的参数方程为
我们先求四分之一椭圆的周长,取参数为积分变量,它的变化区间为
相应于上任一小区间的小弧段的长度近似等于对应的长度,
因为:
所以:的近似值,即弧长元素为
==
=
=
其中=(是离心率)
所以椭圆周长C的积分表达式如下:
C=
就是上面这个看似简单的积分实际上是很难积出的,如果你觉得你的微积分很厉害,不妨也试试。实际上人们把椭圆周长的积分叫做“第二类不完全椭圆积分”,到此为止,接下来只能将展开成无穷级数,再进行积分,过程稍复杂,这里就不再讨论了。
§ 猜想椭圆周长的公式
我们知道,圆的面积:,类似的,椭圆的面积:;圆的周长公式是:,而椭圆的周长却不等于乘上半长轴与半短轴之和。那么椭圆的周长和有什么关系呢?其实很容易想到,当离心率很小的时候,周长是近似等于的;离心率越接近1,给出的结果就越不精确,我们先猜想,下面来看看这个猜想公式的精度如何。
要想知道精确度,首先要得到精确的周长。我们的方法很简单,只要借助计算机将椭圆n等分,把每一个弧长“微元”相加就行了。根据上面推出的积分表达式,先将四分之一椭圆20万等分。我们采用C语言编写计算不同离心率下椭圆周长、面积的程序,程序的原理很简单,其实就是取的值为,这样求的近似值,就变成了算出 的值,以下是程序内容:
#include"stdio.h"
#include"math.h"
#define pi 3.1415926535897932384626
int main()
{
printf("--不同离心率下椭圆的周长和面积--(a=1)\n离心率 计算周长 猜想周长 计算面积 理论面积\n");
double e,x1,x2,y1,y2;
for(e=0.05;e<1.00;e+=0.05)
{
for(x1=0,y1=0;x1<pi/2;x1+=pi/200000)
{
y1+=4*sqrt(1-e*e*cos(x1)*cos(x1))*pi/200000;
}
for(x2=0,y2=0;x2<1;x2+=1.0/100000)
{
y2+=4*sqrt((1-e*e)*(1-x2*x2))*1/100000;
}
printf("%4.2f %4.9f %4.9f %4.9f %4.9f\n",e,y1,pi*(1+sqrt(1-e*e)),y2,pi*sqrt(1-e*e));
}
}
(注:此程序在C-Free 5.0中测试通过,不同的编译器可能需要稍做修改。)
为了粗略地估计程序给出的椭圆周长的精度,计算周长的同时,程序还将椭圆分割成10万个矩形求面积。因为是一个精确公式,对比计算机得出的面积和公式给出的面积,可以估计出计算机计算的误差。
下面是运行结果:
--不同离心率下椭圆的周长和面积--(a=1)
离心率 计算周长 猜想周长 计算面积 理论面积
0.05 6.279319266 6.279255859 3.137683143 3.137663205
0.10 6.267510442 6.267437876 3.125865086 3.125845223
0.15 6.247754348 6.247641317 3.106068401 3.106048664
0.20 6.219936382 6.219712246 3.078139152 3.078119592
0.25 6.183890859 6.183426661 3.041853336 3.041834007
0.30 6.139395245 6.138481041 2.996907431 2.996888387
0.35 6.086161920 6.084478629 2.942904675 2.942885975
0.40 6.023826659 6.020909881 2.879335524 2.879317228
0.45 5.951932559 5.947124601 2.805549775 2.805531948
0.50 5.869907460 5.862291700 2.720716335 2.720699046
0.55 5.777031606 5.765339796 2.623763815 2.623747143
0.60 5.672390126 5.654866776 2.513290093 2.513274123
0.65 5.554800713 5.528996378 2.387418895 2.387403724
0.70 5.422698394 5.385138562 2.243560165 2.243545909
0.75 5.273940628 5.219560874 2.077981425 2.077968221
0.80 5.105450038 5.026548246 1.884967570 1.884955592
0.85 4.912481219 4.796529275 1.654947138 1.654936622
0.90 4.686833321 4.510981143 1.369397192 1.369388490
0.95 4.410927819 4.122554645 0.980968225 0.980961992
对比计算面积和理论面积,可以知道计算周长的误差大约在0.00002以内,直到离心率为0.5时,给出的值的误差还控制在0.01以内。
根据以上结果,我们提出椭圆周长近似值的公式:,其中是一个修正因子,为了精确地得到修正因子和离心率之间的关系,我们将椭圆2亿等分,程序运行结果如下:
离心率 计算周长 猜想周长 计算面积 理论面积 修正因子
0.05 6.279256474 6.279255859 3.137663220 3.137663205 1.000000098
0.10 6.267447768 6.267437876 3.125845237 3.125845223 1.000001578
0.15 6.247691871 6.247641317 3.106048678 3.106048664 1.000008092
0.20 6.219874184 6.219712246 3.078119607 3.078119592 1.000026036
0.25 6.183829023 6.183426661 3.041834021 3.041834007 1.000065071
0.30 6.139333858 6.138481041 2.996888401 2.996888387 1.000138930
0.35 6.086101074 6.084478629 2.942885989 2.942885975 1.000266653
0.40 6.023766447 6.020909881 2.879317241 2.879317228 1.000474441
0.45 5.951873084 5.947124601 2.805531961 2.805531948 1.000798450
0.50 5.869848833 5.862291700 2.720699059 2.720699046 1.001289109
0.55 5.776973948 5.765339796 2.623747155 2.623747143 1.002017947
0.60 5.672333572 5.654866776 2.513274135 2.513274123 1.003088808
0.65 5.554745415 5.528996378 2.387403735 2.387403724 1.004657091
0.70 5.422644533 5.385138562 2.243545919 2.243545909 1.006964718
0.75 5.273888422 5.219560874 2.077968230 2.077968221 1.010408452
0.80 5.105399760 5.026548246 1.884955601 1.884955592 1.015687010
0.85 4.912433239 4.796529275 1.654936629 1.654936622 1.024164132
0.90 4.686788194 4.510981143 1.369388496 1.369388490 1.038973129
0.95 4.410886572 4.122554645 0.980961996 0.980961992 1.069940110
(由于运算数据较长,这里就只给出了上面这么多数据,更详细的结果在文章最后的附录A中)
根据上面这些比较精确的数据,可以看出当离心率很小的时候给出的结果是很精确的,所以引入修正因子是个不错的选择。
修正因子与离心率的关系图像如下:
根据计算机给出的数据和图像可以得出修正因子和椭圆离心率的函数近似关系:
§ 猜想公式和其它近似公式的对比
查阅资料,我们找到了一个常见的椭圆周长的近似公式:,我们取了一些不同的离心率值,计算后和我们的猜想公式给出的数值对比,猜想公式中的修正因子的值是根据上面给的近似函数关系算出的,对比结果如下:(其中)
两亿等分周长的计算结果
0.05 6.280329540 6.279255859 6.279256474
0.10 6.271740697 6.267437876 6.267447768
0.15 6.257353341 6.247641317 6.247691871
0.20 6.237055596 6.219712246 6.219874184
0.25 6.210684668 6.183426661 6.183829023
0.30 6.178019969 6.138481041 6.139333858
0.35 6.138773151 6.084478629 6.086101074
0.40 6.092573899 6.020909881 6.023766447
0.45 6.038949676 5.947124601 5.869848833
0.50 5.977296478 5.862291700 5.862291700
0.55 5.906835668 5.765339796 5.776973948
0.60 5.826548246 5.654866776 5.672333572
0.65 5.735070617 5.528996378 5.554745415
0.70 5.630520446 5.438989948 5.422644533
0.75 5.510185130 5.271756483 5.273888422
0.80 5.369911184 5.127079211 5.105399760
0.85 5.202742493 4.892459861 4.796529275
0.90 4.995217402 4.691420389 4.510981143
0.95 4.712924384 4.411133470 4.122554645
可以看出我们的猜想公式引入修正因子后比近似公式更接近标准值,而且
一直到为0.4时,给出的值误差还在0.005之内。这里的修正因子取的只是近似值,如果要更精确的结果,可以查看文章最后的“附录A”,我们给出了0.01到0.99的共99个离心率下修正因子的较精确的值,并且精确到了小数点后9位,足以满足对精度要求较高的计算。
至于前面提到的怎么计算管道截面的周长,只需用卡尺量出椭圆的长半轴、短半轴,在附录A中找到对应的修正因子值,就可以很精确地算出来了。
§ 推广:计算旋转椭球体的表面积
生活中需要计算椭球体的例子并不多,但我们还是推广一下。举个例子,比如我们要给一个椭球状的建筑物刷漆,要用多少油漆,就需要计算表面积。而椭球表面积的积分也是不完全椭圆积分,也没有具体的公式。
我们一般通过将椭圆绕坐标轴旋转得到旋转椭球体,再沿一个轴拉伸得到一般的椭球。因为我们能力有限,就只讨论到旋转椭球的表面积。
以焦点在x轴的椭圆为例,可以绕焦点所在轴旋转,也可以绕y轴旋转,这样就得到了两种椭球,我们称前者为长椭球,后者为扁椭球。以绕x轴旋转得到长椭圆为例,我们简单推导一下它的面积积分。
前面已经推导出了椭圆的弧微分元素,将每一个弧元素绕x轴旋转,得到面积元素:
积分可以得到半个椭球面积的积分表达式:
所以整个椭球的面积
这个积分比椭圆周长的积分更难积出。而且对于怎样计算椭球的表面积,我们查阅资料,并没有找到近似公式。
和前面类比推出椭圆周长的近似公式一样,对比球的表面积是,有了上面求椭圆周长的经验,当离心率很小时,我们推测旋转椭球的面积近似等于,而对于较大的离心率,它的面积,其中也是一个修正因子。
为了得到较精确的面积值,我们还是采用C语言编写程序计算,其实只要对前面的程序稍做修改就行了,程序内容如下:
#include"stdio.h"
#include"math.h"
#define pi 3.1415926535897932384626
int main()
{
printf("--不同离心率下由椭圆绕x轴旋转所得椭球的表面积--(a=1)\n离心率 计算面积 猜想面积 修正因子\n");
double e,x1,y1;
for(e=0.01;e<1.00;e+=0.01)
{
for(x1=0,y1=0;x1<pi/2;x1+=pi/200000000)
{
y1+=4*pi*sqrt(1-e*e)*sin(x1)*sqrt(1-e*e*cos(x1)*cos(x1))*pi/200000000;
}
printf("%4.2f %4.9f %4.9f %4.9f\n" ,e,y1,pi*(1+sqrt(1-e*e))*(1+sqrt(1-e*e)),y1/(pi*(1+sqrt(1-e*e))*(1+sqrt(1-e*e))));
}
}
运行的结果详见“附录B”
我们得到了修正因子和用来旋转的椭圆的离心率之间的图像关系:
§ 总结
生活中、生产中涉及椭圆的计算也许不多,但是要是遇到了,那就是一个坎儿。椭圆积分是积分学中重要的一个分支,它最初出现在有关椭圆弧长的问题中,关于椭圆弧长的积分,最早的研究者正是大名鼎鼎的数学巨匠——欧拉。而本文的内容主要是简单推导和巨量的计算,其中这些巨量计算和数据分析都是由计算机完成的,计算机的发展使得我们,21世纪的中学生能够得到几百年前的大数学家算不出来的数据。
数学推动了计算机的发展,计算机也必将推动数学的发展,事实即是如此,本文就是一个很好的例子。今天的计算机有着强大的数据处理能力,并且体积更小,更便携,这让今天的应用数学更离不开计算机。
也许这篇文章理论性的东西很多,我想说的是,理论和应用是紧密相连的,应用需要理论指导,而理论必然要应用到实践中去,它们都是科学发展中必不可少的一部分。
附录A
--不同离心率下椭圆的周长和面积(a=1)--
离心率 计算周长 猜想周长 计算面积 理论面积 修正因子
0.01 6.283028225 6.283028224 3.141435585 3.141435570 1.000000000
0.02 6.282556941 6.282556926 3.140964287 3.140964272 1.000000002
0.03 6.281771352 6.281771272 3.140178633 3.140178619 1.000000013
0.04 6.280671279 6.280671027 3.139078388 3.139078373 1.000000040
0.05 6.279256474 6.279255859 3.137663220 3.137663205 1.000000098
0.06 6.277526618 6.277525342 3.135932703 3.135932688 1.000000203
0.07 6.275481319 6.275478953 3.133886314 3.133886300 1.000000377
0.08 6.273120115 6.273116074 3.131523435 3.131523420 1.000000644
0.09 6.270442468 6.270435987 3.128843348 3.128843333 1.000001033
0.10 6.267447768 6.267437876 3.125845237 3.125845223 1.000001578
0.11 6.264135331 6.264120826 3.122528187 3.122528172 1.000002316
0.12 6.260504398 6.260483818 3.118891179 3.118891165 1.000003287
0.13 6.256554132 6.256525733 3.114933094 3.114933079 1.000004539
0.14 6.252283620 6.252245343 3.110652704 3.110652690 1.000006122
0.15 6.247691871 6.247641317 3.106048678 3.106048664 1.000008092
0.16 6.242777813 6.242712214 3.101119575 3.101119560 1.000010508
0.17 6.237540293 6.237456480 3.095863841 3.095863827 1.000013437
0.18 6.231978076 6.231872450 3.090279811 3.090279796 1.000016949
0.19 6.226089842 6.225958339 3.084365700 3.084365686 1.000021122
0.20 6.219874184 6.219712246 3.078119607 3.078119592 1.000026036
0.21 6.213329608 6.213132145 3.071539506 3.071539491 1.000031782
0.22 6.206454530 6.206215885 3.064623245 3.064623231 1.000038453
0.23 6.199247270 6.198961184 3.057368544 3.057368530 1.000046151
0.24 6.191706058 6.191365627 3.049772987 3.049772973 1.000054985
0.25 6.183829023 6.183426661 3.041834021 3.041834007 1.000065071
0.26 6.175614195 6.175141589 3.033548950 3.033548935 1.000076534
0.27 6.167059500 6.166507568 3.024914929 3.024914915 1.000089505
0.28 6.158162758 6.157521601 3.015928962 3.015928947 1.000104126
0.29 6.148921678 6.148180532 3.006587893 3.006587878 1.000120547
0.30 6.139333858 6.138481041 2.996888401 2.996888387 1.000138930
0.31 6.129396777 6.128419635 2.986826996 2.986826982 1.000159444
0.32 6.119107791 6.117992645 2.976400006 2.976399992 1.000182273
0.33 6.108464134 6.107196215 2.965603575 2.965603561 1.000207611
0.34 6.097462906 6.096026293 2.954433654 2.954433640 1.000235664
0.35 6.086101074 6.084478629 2.942885989 2.942885975 1.000266653
0.36 6.074375461 6.072548755 2.930956115 2.930956102 1.000300814
0.37 6.062282747 6.060231987 2.918639347 2.918639333 1.000338396
0.38 6.049819457 6.047523404 2.905930764 2.905930750 1.000379668
0.39 6.036981957 6.034417842 2.892825202 2.892825189 1.000424915
0.40 6.023766447 6.020909881 2.879317241 2.879317228 1.000474441
0.41 6.010168952 6.006993830 2.865401190 2.865401176 1.000528571
0.42 5.996185316 5.992663713 2.851071073 2.851071059 1.000587652
0.43 5.981811192 5.977913254 2.836320613 2.836320600 1.000652057
0.44 5.967042034 5.962735860 2.821143219 2.821143206 1.000722181
0.45 5.951873084 5.947124601 2.805531961 2.805531948 1.000798450
0.46 5.936299365 5.931072195 2.789479554 2.789479541 1.000881320
0.47 5.920315666 5.914570978 2.772978338 2.772978325 1.000971277
0.48 5.903916532 5.897612891 2.756020250 2.756020237 1.001068846
0.49 5.887096250 5.880189445 2.738596804 2.738596791 1.001174589
0.50 5.869848833 5.862291700 2.720699059 2.720699046 1.001289109
0.51 5.852168005 5.843910232 2.702317591 2.702317579 1.001413056
0.52 5.834047184 5.825035101 2.683442460 2.683442448 1.001547129
0.53 5.815479463 5.805655814 2.664063173 2.664063161 1.001692083
0.54 5.796457591 5.785761286 2.644168645 2.644168633 1.001848729
0.55 5.776973948 5.765339796 2.623747155 2.623747143 1.002017947
0.56 5.757020524 5.744378942 2.602786300 2.602786288 1.002200687
0.57 5.736588892 5.722865582 2.581272941 2.581272928 1.002397979
0.58 5.715670176 5.700785784 2.559193143 2.559193131 1.002610937
0.59 5.694255024 5.678124756 2.536532115 2.536532103 1.002840774
0.60 5.672333572 5.654866776 2.513274135 2.513274123 1.003088808
0.61 5.649895401 5.630995113 2.489402471 2.489402459 1.003356474
0.62 5.626929503 5.606491935 2.464899293 2.464899282 1.003645340
0.63 5.603424226 5.581338217 2.439745575 2.439745563 1.003957117
0.64 5.579367228 5.555513621 2.413920979 2.413920968 1.004293682
0.65 5.554745415 5.528996378 2.387403735 2.387403724 1.004657091
0.66 5.529544880 5.501763140 2.360170497 2.360170486 1.005049607
0.67 5.503750828 5.473788826 2.332196183 2.332196172 1.005473723
0.68 5.477347495 5.445046436 2.303453793 2.303453782 1.005932192
0.69 5.450318058 5.415506844 2.273914201 2.273914190 1.006428062
0.70 5.422644533 5.385138562 2.243545919 2.243545909 1.006964718
0.71 5.394307654 5.353907464 2.212314821 2.212314811 1.007545926
0.72 5.365286741 5.321776471 2.180183828 2.180183818 1.008175892
0.73 5.335559548 5.288705183 2.147112540 2.147112530 1.00885
展开阅读全文