【求教】椭圆与点之间的最小距离【数学高人请进】

求点到椭圆的最短距离仿佛一直是个没有最佳方法的问题。

设椭圆为标准方程形式,长轴a,短轴b:
x^2/a^2 + y^2/b^2 = 1

椭圆外一点p0(x0,y0)

一般思路是找一条过该点与椭圆垂直并过垂点p1(x1,y1)的直线,然后再求直线与p1与p0的距离作为结果。

在此为了简化问题,作假设:点p0和p1同在第一象限。

但上述思路会涉及到解一元四次方程的问题,最终解起来又很困难。网上已经有人给出了上述思路,但没有在解一元四次方程上给出方案,在此请写出具体步骤,以及(如果能归纳出来的话)最短距离的式子。

除了上述思路,如果还有其他方法的话也欢迎赐教。请写出具体计算步骤。

另外,有人将p0与椭圆中心,即长短轴交点连接起来,把椭圆与此直线交点作为p1,并将p0与p1间的距离作为最短距离的近似解。请问这样的近似解与真实最短距离的误差怎样分析?

谢谢!
补充(1)
谢谢大家的解答。但看到的答案大多都是思路性的,或者仅仅列出方程。实际列出方程并不是难事,关键是在如何计算上;在网上搜罗到的思路大多都无法简单求得多项式解,比如提问中说到的这个思路。因此如果有好方法的话,麻烦把每一步,直至最终距离的计算结果,用公式写下来,以便于理解。一经认可立即采纳,谢谢!

补充(2)
看到大家回答的都是思路性的,这个问题之所以提出来是因为具体计算的时候遇到困难无法解决,请写出最终答案,谢谢。

补充(3)
谢谢xiongxionghy的耐心解答。也许解方程没有并没有那么简单,如果对自己数学有自信的话可以试试看。至今找到的令我满意的方法只有2004年D.Eberly总结的牛顿迭代法。
但由于我程序中需要计算大量这样的距离,这个方法不免会引起计算时间的问题。在上面我也写了一个近似求解的方法,虽然可以大大缩短迭代法的时间,但计算精度却不高。因此想求教一个普通的多项式解来解决时间和精度的问题。

补充(4)
不是觉得算到底是“应该”。而是大家提供的方程式提问之前就搜索出来了,解方程才是这个问题未解决的部分。自己要是水平够高,能解决的话,也不会在这里发问了。

椭圆外一点到椭圆的最值距离(任意点到椭圆的两个最值距离)

求解椭圆外一点到椭圆上的点的距离之最大值和最小值,这个问题由来已久。高中阶段在学习圆锥曲线时会涉猎这个问题,但是常规思路都会步入一元四次方程的领域,求解一元四次方程的超凡计算量让人望而生畏,能从理论上解决问题而不具操作性,因此只能是浅尝辄止。本文利用二次曲线系及其退化、最简单形式的一元三次方程以及二元二次多项式在实域内的因式分解等相关初等知识来处理,从而逃脱一元四次方程的求解,实际上也表达了求解一元四次方程的另一数形结合途径。

这个是本人的论文,共十几页很多公式没法在这里弄

最终结论

判断P点与直线y=xa/b的位置关系,代入相应公式即可求解

本人搜遍互联网均无此答案,前段时间研究一元四次方程的求解,看了网上另一篇获奖论文《椭圆外一点到椭圆的距离最值问题初探》,意在探索四次方程求法,可是该论文最后公式错误,并没有解决这两个最值问题,跨越三次方程求解四次方程那真该是是个飞跃啊,所以结论错误也必然。后来我想他既然没有解决这个问题,我就想看看这个问题到底该怎么处理,哎浪费了我不少的时间弄出来这个,因为自己上学时也没怎么弄懂这个问题到底除了四次方程该怎么处理,所以就写了个论文打算帮助曾经和我一样迷惑的同学,需要详细资料可以私信我

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-21
楼上的回答都很不错。我比较倾向于二楼的参数方程,因为化为一个自变量之后可以用导数来看最小值。思路明确且不易出错。这个绝对是求解本题的上上策!!

如果LZ还没学导数,只能用联立方程组解最小值的话,就不宜用参数方程了。在此,我推荐一个公式:

对于任何椭圆x^2/a^2 + y^2/b^2 = 1有如下结论:
过椭圆上的点Q(m,n)的切线方程为:
mx/a^2 + ny/b^2 = 1

记忆起来就是:x^2之中,一个x不变,另一个x换成m;y^2之中,一个y不变,另一个y换成n.

这个结论希望背下来,真的很有用。绝大部分涉及椭圆的题目,如果你知道这个公式,计算量会大减!结论也很整齐,背下来轻而易举。

例如本题,设椭圆上的点Q(m,n)离点p0(x0,y0)最近,那么过Q的切线就能直接写出来了。是mx/a^2 + ny/b^2 = 1,切线的斜率也直接得到,是 -[m(b^2)]/[n(a^2)],由题意得到切线与两点的连线垂直,那么一个方程直接写出:-[m(b^2)]/[n(a^2)]*[(y0-n)/(x0-m)]=-1

接下去就联立方程什么的,要减少计算量只能靠小技巧,就像楼上说的那样,个人认为没什么革命性的新方法,能够是计算量大幅下降。

****************************************************

大家不要再喷了,我觉得LZ挺有礼貌的啊。耐心看大家的回答,也写了自己的思路看法,还一直说谢谢。
比起那些只写个题目,再打个RT的人好多了吧。本回答被提问者采纳
第2个回答  2009-10-18
可以用数形结合
圆形在椭圆外面,则一定可以找到一个适当的半径使得该圆与椭圆相切(交与一点,肯定有交于一点的那个半径),设交点为(x,y),则可以列两个方程
(1)该点在椭圆上
(2)先求出椭圆该点处的斜率(求导),然后圆心(x1,y1)与该点的连线一定是椭圆在该点斜率的负倒数(垂直)
两个方程解出x,y;距离当然就算出来了
不过要考虑一些特殊情况,如斜率在某些情况下不存在

不会吧,两个方程都很好列出来,也很好解出来……
(1)x^2/a^2 + y^2/b^2 = 1
(2) y' = (a*sqrt(1-x^2/a^2))', 求导,具体方程更好求
y'在x = x 处的斜率为
(a*sqrt(1-x^2/a^2))' = - (x-x0)/(y-y0)
就是这两个方程
求出x,y
距离是sqrt((x-x0)^2+(y-y0)^2)
第3个回答  2009-10-21
你提到的方法是可行的,二楼和四楼的做法也都是对的。计算量大可能是无法避免的,我没有算过,不过我相信这个问题最后的表达式应该不是仅仅有二次根号那么简单。
另给你一些建议:
1.一元四次方程有求根公式的,不要把解一元四次方程认为是行不通的。
2.四楼的图有另一种解法:
考察方程组(x-x0)^2+(y-y0^2)=A和x^2/a^2+y^2/b^2=1,消元之后是带参数A的一元四次方程,这个方程有重根(因为相切),可以用(f(x),f'(x))!=1或者判别式来做,把A解出来。

补充:
1.既然你要在计算机上实现,那么可以这样说,这里大家提供的所有方法都是在O(1)时间内解决你的问题的,包括你提到的Newton迭代法(因为这个是二次收敛的)。如果你要算n次的话复杂度就是O(n),从渐进行为上讲已经最优了,差别只不过在系数。
2.即使有人有耐心给你写一个显式的公式出来,你去代公式可能也比其他方法慢。比如数值上解复系数一元四次方程的四个复根不是利用求根公式算的。
3.大家提供给你的方法都是可行的,你应该自己去算,中间的计算过程虽然繁琐,但是都是可以算的,而根本不是像你所说的“无法解决”,取决于你的水平和耐心而不是方法本身的问题。这个既然是你的课题,别人给你思路就够了,不要认为放200分在那里别人就应该帮你算到底。

再补充:
正如xiongxionghy所说,你还是挺有礼貌的。也许我说话有点重,不过你确实应该自己动手,上面所有的解法都可以归结为一个多项式求根问题,然后可以转化为代数特征值问题,数值上相当容易求解。既然已经告诉你这一点了,如果你还不会的话就应该去补习一下相关知识,而不是要求别人把方程解完。
第4个回答  2009-10-24
不论何种方法,4次方程不可避免。我用极坐标大致算了算,具体如下:
设椭圆上的任意点是(acost,bsint) 0<=t<=2pai
设椭圆外的一点P坐标是(pcosw,psinw) 其中,p表示PO到原点的距离,w表示0P与极轴的夹角。
则P点到椭圆上任意点的距离的平方d^2=(pcosw-acost)^2+(psinw-bsint)^2
记d^2为y,t为x
则此函数是y=(pcosw-acosx)^2+(psinw-bsinx)^2 0<=x<=2pai
化简该函数y=(pcosw)^2-2ap(cosw)(cosx)+(acosx)^2+(psinw)^2-2bp(sinw)(sinx)+(bsinx)^2=p^2-2ap(cosw)(cosx)-2bp(sinw)(sinx)+(acosx)^2+(bsinx)^2
函数取最值时,它的导数为0
则对y求导得2ap(cosw)(sinx)-2bp(sinw)(cosx)-2acosxsinx+2bsinxcox
令之等于0
则有等式2ap(cosw)(sinx)-2bp(sinw)(cosx)-2acosxsinx+2bsinxcox=0
2ap(cosw)(sinx)-2bp(sinw)(cosx)-(2a-2b)cosxsinx=0
为了简便计算,将等式里面的一些常数进行简化
计2ap(cosw)=A
2bp(sinw)=B
(2a-2b)=C
则原等式就变为Asinx-Bcosx-Ccosxsinx=0
第一种情况:cosx=0
则Asinx=0推出sinx=0
此种情况无解(因为sinx和cosx不可能同时为0)
第二种情况:cosx不等于0
等式2边同时除以cosx
Atgx-B-Csinx=0
用三角函数的万能公式得
[Atg(x/2)]/[1-tg(x/2)^2]-B-[Ctg(x/2)]/[1+tg(x/2)^2]=0
为了书写方便,记tg(x/2)=X
则AX/(1-X^2)-B-CX/(1+X^2)=0
AX/(1-X^2)-CX/(1+X^2)=B 等式2边同时乘以(1-X^2)(1+X^2)
AX(1+X^2)-CX(1-X^2)=B(1-X^4)
AX+AX^3-CX+CX^3=B-BX^4
BX^4+(A+C)X^3+(A-C)X=B
我没法解这个4次方程,能把这个X解出来之后还需要代回原函数,逐个判断哪一个解才是最小值,确实很繁琐。