设
\begin{align*}
F(x,y)&=x^2-xy+y^2-\frac16,\\
G(x,y)&=x^2-6xy+y-1,
\end{align*}
用 `F_x` 表示 `F` 对 `x` 的偏导数,设点 `(x_1,y_1)`, `(x_2,y_2)` 分别在 `F=0` 和 `G=0` 上,则这两点处的切向量分别为
\begin{align*}
\vec u&=\bigl(F_y(x_1,y_1),-F_x(x_1,y_1)\bigr),\\
\vec v&=\bigl(G_y(x_2,y_2),-G_x(x_2,y_2)\bigr),
\end{align*}
在两点距离取极值时,必定是以上两切向量均与两点连线垂直,因此有方程组
\[\led
\vec u\cdot(x_1-x_2,y_1-y_2)&=0,\\
\vec v\cdot(x_1-x_2,y_1-y_2)&=0,\\
F(x_1,y_1)&=0,\\
G(x_2,y_2)&=0,
\endled\]
这个方程组最终毫无意外地涉及四次方程,无简单解,只能开软件求近似值。
mma 代码:
- F[x_, y_] = x^2 - x y + y^2 - 1/6;
- G[x_, y_] = x^2 - 6 x y + y - 1;
- u[x_, y_] = {D[F[x, y], y], -D[F[x, y], x]};(*切向量*)
- v[x_, y_] = {D[G[x, y], y], -D[G[x, y], x]};
- {u[x1, y1].{x1 - x2, y1 - y2} == 0, v[x2, y2].{x1 - x2, y1 - y2} == 0,
- F[x1, y1] == 0, G[x2, y2] == 0}
Copy the Code 算出的方程组是:
- {(x1 - x2) (-x1 + 2 y1) + (-2 x1 + y1) (y1 - y2) ==
- 0, (1 - 6 x2) (x1 - x2) + (y1 - y2) (-2 x2 + 6 y2) ==
- 0, -(1/6) + x1^2 - x1 y1 + y1^2 == 0, -1 + x2^2 + y2 - 6 x2 y2 == 0}
Copy the Code 然后用 NSolve 来解它,给出很多解,只有四组是实数,我将它们分别记为:
- j1 = {y2 -> -0.4374599920708491`, x1 -> -0.4072004736133994`,
- y1 -> 0.00208762716062023`, x2 -> 0.46520298782443953`};
- j2 = {y2 -> 0.30012503474685104`, x1 -> 0.1665557500174892`,
- y1 -> -0.2986397250946714`, x2 -> -0.3286693593934353`};
- j3 = {y2 -> 0.3344924728723728`, x1 -> -0.21524153403239277`,
- y1 -> 0.25558713238468383`, x2 -> -0.2897644214120727`};
- j4 = {y2 -> -0.3106629554665209`, x1 -> 0.32057074109792955`,
- y1 -> -0.13903463651810666`, x2 -> 0.5442449235400255`};
Copy the Code 然后在图上把它们给标出来:
- Show[ContourPlot[{F[x, y] == 0, G[x, y] == 0}, {x, -1, 1}, {y, -1,
- 1}], Graphics[{Red, Point[{{x1, y1}, {x2, y2}}] /. j1,
- Line[{{x1, y1}, {x2, y2}}] /. j1,
- Darker[Green], Point[{{x1, y1}, {x2, y2}}] /. j2,
- Line[{{x1, y1}, {x2, y2}}] /. j2,
- Blue, Point[{{x1, y1}, {x2, y2}}] /. j3,
- Line[{{x1, y1}, {x2, y2}}] /. j3,
- Purple, Point[{{x1, y1}, {x2, y2}}] /. j4,
- Line[{{x1, y1}, {x2, y2}}] /. j4}]]
Copy the Code 输出:
那前两组就该舍掉了,最后用
- Norm[{x1 - x2, y1 - y2}] /. j3
- Norm[{x1 - x2, y1 - y2}] /. j4
Copy the Code 得到最短的蓝线和另一支上的紫线长分别为
0.108534
0.281933 |