- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2a02b0已知长方形的长边为
2a0
2b0
Doublea0=2a0;a0=b00
短边的长为
Doubleb0=2b0;
求包含该长方形(也就是长方形的四个顶点在椭圆上)的具有最小周长的椭圆方程。
根据题意可以建立等式,假设该椭圆方程为
x2/a2 + y2/b2 = 1且a = b 0;------------------------------------------------------- (1)
则a02/a2 + b02/b2 = 1---------------------------------------------------------------------(2)
令e = sqrt(a2-b2)/a,可以最终推导出其周长的积分表达式
C=
该积分用初等数学的办法无法获得其积分方程的表达式,不过该方程通过如下无穷级数表达。
其中,这个方程对于工程运算则过于冗长,幸好Ramanujan, S., 在其论文(Modular Equations and Approximations to , Quart. J. Pure. Appl. Math., vol. 45 (1913-1914), pp. 350-372)给出了两个近似公式分别为:
----------------------------------(3)
其中(3)式的精确度非常的高,其相对误差大约为,主要是因为方程(3)的级数展开式为
----------------------(4)
与椭圆周长积分的无穷级数表达式进行对比可以发现它们的前五项完全相等,同时还可以明显看出他们的第六项也非常接近。
因为由(1)得x1,所以2.2888e-005,该精度足以满足工程运算需要。
目前还没有公认的比Ramanujan II更好的近似方程。
由于计算过程中需要利用数值非常大的阶乘进行计算使得该无穷级数收敛得相当缓慢,特别当椭圆很扁时也就是离心率比较大时。所以在下面的计算过程以Ramanujan II(3)作为计算椭圆周长的公式
那么由(2)
a02/a2 + b02/b2 = 1推出a=或者b=
分别带入方程(3)中
从而分别建立以短轴或长轴为变量的一元椭圆周长函数
---短轴为变量。方程(5)
-----长轴为自变量。方程(6)
问题最终被转换为求方程(5)在b0附近的最小值,或者求方程(6)在a0附近的最小值。为验证该方法的可靠性,通过matlab程序分别对方程(5)和(6)进行运算。
该matlab程序的基本思想是输入长方形的长边和短边,输出为最小周长椭圆的长轴和短轴。
并对数据进行可视化。恰巧matlab7中提供了一种利用嵌套函数的方法建立一个用户自定义的方程并且使数据在函数间共享。
Function fcn=rec_ell_pemeter_a(double_a0,double_b0)
% double_a0---长方形的长边;
% double_b0---长方形的短边;
% rec_ell_pemeter_a(double_a0,double_b0)该方程是以椭圆的长轴为变量;
Fcn=@myfcn;
Function y=myfcn(x)
a0= double_a0./2;
b0= double_b0./2;
b=b0.*x./sqrt(x.^2-a0.^2);
lumda=(x-b)./(x+b);
y=pi.*(x+b).*(1+3.*lumda.^2./(10+sqrt(4-3.*lumda.^2)));
end
end
function [a,b,perimeter]=ell_min_pe(double_a0,double_b0)
rec_perimeter =2*double_a0+2*double_b0;
fcn=rec_ell_pemeter_a(double_a0,double_b0);
a0=double_a0./2;
b0=double_b0./2;
a=fminsearch(fcn, a0);
b= b0.*a./sqrt(a.^2-a0.^2);
e = sqrt(a.^2-b.^2)./a;
fun=inline([‘sqrt(1-‘,num2str(e),’^2.*sin(t).^2)’]);
start=0;
end=atan(b0./a0);
q1= quad(fun,star,end);
q2=quad(fun,star,pi./2);
ell_perimeter=fcn(a);
a0ratioa=a0./a;
b0ratiob=b0./b;
prratiope= rec_perimeter./ell_perimeter;
q1ratioq2=q1./q2;
if nargo
文档评论(0)