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 $$

f:id:gllas3020paktetrs:20200505233752p:plain

f:id:gllas3020paktetrs:20200505233838g:plain
双曲面

測地線の方程式

$$ \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) $$

f:id:gllas3020paktetrs:20200506123719p:plain
測地線

※測地線は以下のコードで書いた

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()

参考書: