2変数の曲面
2変数の曲面
$$ z = h(x_1, x_2) $$
を以下のように変形する。
$$ f = - h(x_1, x_2) + z $$
このとき、$k=1, 2$に対して測地線の方程式は次のようになる:
$$ \frac{d v_k}{d t} = - \frac{\frac{\partial h}{\partial x_k}}{{\left(\frac{\partial h}{\partial x_1} \right)}^2 +{\left(\frac{\partial h}{\partial x_2} \right)}^2 + 1} {\left( \frac{{\partial}^2 h}{\partial {x_1}^2} {v_1}^2 + 2\frac{{\partial}^2 h}{\partial x_1 \partial x_2} v_1 v_2 + \frac{{\partial}^2 h}{\partial {x_2}^2} {v_2}^2 \right)} $$
例:双曲面
$$ z = x_1 x_2 $$
測地線の方程式
$$ \frac{d}{dt} \left( \begin{array}{c} x_1 \\ x_2 \\ \end{array} \right)= \left( \begin{array}{c} v_1 \\ v_2 \\ \end{array} \right) $$
,
$$ \frac{d}{dt} \left( \begin{array}{c} v_1 \\ v_2 \\ \end{array} \right)= -\frac{2 v_1 v_2}{1+{x_1}^2+{x_2}^2} \left( \begin{array}{c} x_1 \\ x_2 \\ \end{array} \right) $$
※測地線は以下のコードで書いた
import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def vector_field(var, t): x1, x2, v1, v2 = var y1 = v1 y2 = v2 y3 = -(2*v1*v2*x1)/(1+x1**2+x2**2) y4 = -(2*v1*v2*x2)/(1+x1**2+x2**2) return y1, y2, y3, y4 def hyperbolic_surface(x1, x2): return x1*x2 fig = plt.figure() ax = fig.gca(projection='3d') ax.set_xlabel('x1') ax.set_ylabel('x2') ax.set_zlabel('z') for theta in np.deg2rad(np.arange(0, 360, 30)): v10 = np.cos(theta) v20 = np.sin(theta) y = odeint(vector_field, [0, 0, v10, v20], np.linspace(-1, 1, 1000)) ax.plot(y[:, 0], y[:, 1], np.prod(y[:, :2], axis=1), color='black', linewidth=0.3) x1_list = np.arange(-2, 2, 0.05) x2_list = np.arange(-2, 2, 0.05) x1_list, x2_list = np.meshgrid(x1_list, x2_list) z_list = hyperbolic_surface(x1_list, x2_list) ax.plot_surface(x1_list, x2_list, z_list, alpha=0.2) plt.show()
参考書: