- 注册时间
- 2016-5-4
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 217
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
本帖最后由 yuange1975 于 2023-10-22 20:54 编辑
圆上点P到两点AB距离的和最大最小值。
AB两点坐标(-a,0)、(a,0),a>=0。PA+PB=2m,椭圆方程x^2/m^2+y^2/(m^2-a^2)=1。
圆的圆心坐标(b,c)半径r。圆的方程(x-b)^2+(y-c)^2=r^2。
线段AB如果和圆相交最小值就是2m。
椭圆和圆相切有重根。
圆方程换元
x=b+r*2t/(1+t^2)
y=c+r*(1-t^2/(1+t^2)
带入椭圆方程,得到:
f=m*m-a*a)*(b*(1+t*t)+2*r*t)**2+m*m*(c*(1+t*t)+r*(1-t*t))**2-m*m*(m*m-a*a)*(1+t*t)**2=0
现在就是关于m和t的多项式方程,有重根就是方程和导数方程有同根。
f是t的四次方程,对t求导得到一个t的三次方程,联立方程就可以解出来m和t。
这两个方程对于已知的abcr都不好直接解,更别说都是参数的已知条件。
我们换元的好处出来了,一个是t的四次方程一个是t的三次方程,就可以辗转相除法消去t。过程比较复杂好在有程序可以处理。
消去t后得到m的一个高次方程,好在能分解。这个分解一定有内在原因,可以找找这个分解的原因。
分解后的方程:
g=
(-a**4*b**4 + a**4*b**2*r**2 - m**8 + m**6*(2*a**2 + 2*b**2 + 2*c**2 - 2*c*r + 2*r**2) + m**4*(-a**4 - 4*a**2*b**2 - 2*a**2*c**2 + 2*a**2*c*r - 4*a**2*r**2 - b**4 - 2*b**2*c**2 + 2*b**2*c*r + b**2*r**2 - c**4 + 2*c**3*r - 2*c**2*r**2 + 2*c*r**3 - r**4) + m**2*(2*a**4*b**2 + 2*a**4*r**2 + 2*a**2*b**4 + 2*a**2*b**2*c**2 - 2*a**2*b**2*c*r - 2*a**2*b**2*r**2 + 2*a**2*c**2*r**2 - 4*a**2*c*r**3 + 2*a**2*r**4))**2
*(a**8*b**4 - 2*a**8*b**2*r**2 + a**8*r**4 - 2*a**6*b**6 + 2*a**6*b**4*c**2 + 6*a**6*b**4*r**2 - 4*a**6*b**2*c**2*r**2 - 6*a**6*b**2*r**4 + 2*a**6*c**2*r**4 + 2*a**6*r**6 + a**4*b**8 + 2*a**4*b**6*c**2 - 4*a**4*b**6*r**2 + a**4*b**4*c**4 - 6*a**4*b**4*c**2*r**2 + 6*a**4*b**4*r**4 - 2*a**4*b**2*c**4*r**2 + 6*a**4*b**2*c**2*r**4 - 4*a**4*b**2*r**6 + a**4*c**4*r**4 - 2*a**4*c**2*r**6 + a**4*r**8 + m**8*(a**4 - 2*a**2*b**2 + 2*a**2*c**2 + b**4 + 2*b**2*c**2 + c**4) + m**6*(-2*a**6 + 2*a**4*b**2 - 6*a**4*c**2 - 4*a**4*r**2 + 2*a**2*b**4 - 4*a**2*b**2*c**2 + 6*a**2*b**2*r**2 - 6*a**2*c**4 - 6*a**2*c**2*r**2 - 2*b**6 - 6*b**4*c**2 - 2*b**4*r**2 - 6*b**2*c**4 - 4*b**2*c**2*r**2 - 2*c**6 - 2*c**4*r**2) + m**4*(a**8 + 2*a**6*b**2 + 4*a**6*c**2 + 6*a**6*r**2 - 6*a**4*b**4 + 8*a**4*b**2*c**2 - 8*a**4*b**2*r**2 + 6*a**4*c**4 + 10*a**4*c**2*r**2 + 6*a**4*r**4 + 2*a**2*b**6 + 8*a**2*b**4*c**2 + 4*a**2*b**4*r**2 + 10*a**2*b**2*c**4 + 6*a**2*b**2*c**2*r**2 - 6*a**2*b**2*r**4 + 4*a**2*c**6 + 2*a**2*c**4*r**2 + 6*a**2*c**2*r**4 + b**8 + 4*b**6*c**2 - 2*b**6*r**2 + 6*b**4*c**4 - 6*b**4*c**2*r**2 + b**4*r**4 + 4*b**2*c**6 - 6*b**2*c**4*r**2 + 2*b**2*c**2*r**4 + c**8 - 2*c**6*r**2 + c**4*r**4) + m**2*(-2*a**8*b**2 - 2*a**8*r**2 + 2*a**6*b**4 - 6*a**6*b**2*c**2 + 4*a**6*b**2*r**2 - 6*a**6*c**2*r**2 - 6*a**6*r**4 + 2*a**4*b**6 - 4*a**4*b**4*c**2 - 8*a**4*b**4*r**2 - 6*a**4*b**2*c**4 + 6*a**4*b**2*c**2*r**2 + 10*a**4*b**2*r**4 - 6*a**4*c**4*r**2 - 2*a**4*c**2*r**4 - 4*a**4*r**6 - 2*a**2*b**8 - 6*a**2*b**6*c**2 + 6*a**2*b**6*r**2 - 6*a**2*b**4*c**4 + 10*a**2*b**4*c**2*r**2 - 6*a**2*b**4*r**4 - 2*a**2*b**2*c**6 + 2*a**2*b**2*c**4*r**2 - 2*a**2*b**2*c**2*r**4 + 2*a**2*b**2*r**6 - 2*a**2*c**6*r**2 + 4*a**2*c**4*r**4 - 2*a**2*c**2*r**6))
=0
分解成了两个偶数次的8次因子,有一个还是2次幂,相当于两个4次方程了,就可以正常求解了。
求出来的正根m如果带入方程t有实数解,那就是一个符合的切点。所有符合的切点m的最大最小值就是所求的最大最小值。
此方法很多光滑曲线距离问题或者说相切问题都可以。
Python代码如下:
# 曲线相切问题 copy by yuange 2023.10.22
from sympy import *
rn="\r\n"
a,b,c,r,t=symbols('a b c r t',real=True)
m=symbols('m',positive=True)
f=(m*m-a*a)*(b*(1+t*t)+2*r*t)**2+m*m*(c*(1+t*t)+r*(1-t*t))**2-m*m*(m*m-a*a)*(1+t*t)**2
g=diff(f,t)/4
re,h=div(f,g,t)
h1,h2=fraction(cancel(h))
re,i=div(g,h1,t)
i1,i2=fraction(cancel(i))
re,j=div(h,i1,t)
j1,j2=fraction(cancel(j))
jf=collect(factor(j1),m)
print(rn,rn,"jf=",jf)
j=jf.evalf().subs({a:2.5,b:0.7,c:2.4,r:6})
print(rn,rn,"j=",j)
res=solve(j,m)
print(rn,"ok!",res)
最后带入这图中题目数据,得到m的方程为:
j= (-m**8 + 68.2*m**6 - 1358.655*m**4 + 8412.3625*m**2 + 679.68359375)**2*(144.0*m**8 - 19152.0*m**6 + 763479.0*m**4 - 12321121.5*m**2 + 70929005.625)
可以解方程求出精确解,数值解为:
ok! [4.17001776116019, 6.22537143642668, 8.83832239143296]
Pytho3IDE run end!
结果三个相切情况,距离最大最小17..68和8.34。
这题做出来通解还是有些难度的,没有数据的通解太复杂了。所幸有程序可以帮着处理一些数据,辗转相除没有程序手工不可能做出来,还有最后的分解。
拉格朗日系数法、切线法等方法可以得到两个方程,最后要得到m的直接方程的形式也是很复杂的。
换元得到多项式形式导数低一次就辗转相除可以消元。
这方法距离之差双曲线等两曲线相切别的很多情况,都可以这么做。
|
-
-
|