「高さ h からの斜方投射の最大到達距離を求める準備」のページを参照。
最大水平到達距離となる打ち出し角度 $\theta$ を,陰関数定理を使い,連立方程式の形にして SymPy や Maxima を使って求めてみる。
SymPy で高さ $h$ からの斜方投射の最大水平到達距離を陰関数定理を使って求める
from sympy import *
# 1文字変数の Symbol の宣言が省略できる
from sympy.abc import *
init_printing()
無次元化された斜方投射の解
\begin{eqnarray}
X(T, \theta) &=& \cos\theta\cdot T \\
Y(T, \theta) &=& H+ \sin\theta\cdot T – \frac{1}{2} T^2
\end{eqnarray}
var('H')
def X(T, theta):
return cos(theta)*T
def Y(T, theta):
return H + sin(theta)*T - T**2/2
X(T, theta)
Y(T, theta)
滞空時間 $T_1$
滞空時間 $T_1\ \ (>0)$ は以下の式を満たす。
$$Y(T_1, \theta) = 0 \quad\Rightarrow\quad T_1 = T_1(\theta)$$
var('T1')
solve(Y(T1, theta), T1)
陰関数定理を使う
簡単な場合は,$T_1$ は $\theta$ の陽関数として求めることができるが,一般にはそうはいかないかもしれない。そこで,$T_1$ は $\theta$ の陰関数であるとして話を進める。
$Y(T_1(\theta), \theta) = 0$ であるから,
$$\frac{d Y(T_1(\theta), \theta)}{d\theta} =
\frac{\partial Y}{\partial T_1} \frac{d T_1}{d\theta} +
\frac{\partial Y}{\partial \theta}
= 0$$
より,$\displaystyle \frac{d T_1}{d\theta}$ を求めることができる。
T1 = Function('T1')(theta)
dY = diff(Y(T1, theta), theta)
sol1 = solve(dY, diff(T1, theta))
sol1
dT1 = sol1[0]
Eq(Derivative(T1, theta), dT1)
水平到達距離 $L$
滞空時間 $T_1(\theta)$ の間に水平方向に進む距離は
$$L = X(T_1(\theta), \theta)$$
def L(theta):
return X(T1, theta)
$L$ が最大となる角度を求める
$\displaystyle \frac{dL}{d\theta} = 0$ となる角度 $\theta \equiv \theta_{\rm max}$ を求める。陰関数定理の結果を .subs()
で代入して…
dL = diff(L(theta), theta).subs(diff(T1, theta), dT1)
dL = simplify(dL)
Eq(Derivative(L(theta), theta), dL)
$L$ が最大となる角度は,連立方程式
\begin{eqnarray}
Y(T_1(\theta), \theta) &=& 0 \\
\frac{d}{d\theta} L(\theta) &=& 0
\end{eqnarray}
を,$\sin\theta$ と $T_1(\theta)$ について解いて求めることができる。
sol2 = solve([Y(T1, theta), dL],
[sin(theta), T1])
sol2
$\sin\theta > 0, \ T_1(\theta) > 0$ であるから,解は…
sinth = sol2[1][0]
sinth
$$ \sin\theta_{\rm max} = \frac{1}{\sqrt{2 (1+H)}}$$であることがわかったから,$\tan\theta_{\rm max}$ は…
simplify(sinth/sqrt(1-sinth**2))
# 二乗して平方根
sqrt(_**2)
なかなか簡単化してくれませんが,要するに
$$\tan\theta_{\rm max} = \frac{1}{\sqrt{1+2 H}}$$
ということです。
最大水平到達距離
$$L_{\rm max} = X(T_1(\theta_{\rm max}), \theta_{\rm max})$$
T1max = sol2[1][1]
thmax = asin(sol2[1][0])
Lmax = X(T1max, thmax)
simplify(Lmax)
# 二乗して平方根
sqrt(_**2)
これもなかなか簡単化してくれませんが,要するに
$$L_{\rm max} = \sqrt{1 + 2H}$$
ということです。
別解
陰関数定理を使い,連立方程式の形にしますが,$\sin\theta$ を消去する方針でやってみます。
$\displaystyle \frac{dL}{d\theta} = 0$ を $\theta$ について解きます。
Eq(dL, 0)
solsin = solve(dL, sin(theta))
solsin
この $\sin\theta$ を $Y(T_1, \theta) = 0$ に代入して1変数 $T_1$ に関する方程式にし,$T_1$ について解きます。
Eq(Y(T1, theta).subs(sin(theta), solsin[0]), 0)
eqT1 = Y(T1, theta).subs(sin(theta), solsin[0])
sols = solve(eqT1, T1)
sols
$T_1 > 0$ ですから…
T1max = sols[1]
T1max
このときの $\theta$ の値は…
thmax = asin(1/T1max)
thmax
$\sin \theta_{\rm max} = $ …
sin(thmax)
$\tan \theta_{\rm max} = $ …
tan(thmax)
sqrt(factor(_)**2)
最大到達距離 $L_{\rm max}$ は…
X(T1max, thmax)
sqrt(simplify(_)**2)
Maxima で高さ $h$ からの斜方投射の最大水平到達距離を陰関数定理を使って求める
無次元化された斜方投射の解
\begin{eqnarray}
X(T, \theta) &=& \cos\theta\cdot T \\
Y(T, \theta) &=& H+ \sin\theta\cdot T – \frac{1}{2} T^2
\end{eqnarray}
X(T, theta):= cos(theta)*T;
Y(T, theta):= H + sin(theta)*T - T**2/2;
滞空時間 $T_1$
滞空時間 $T_1\ \ (>0)$ は以下の式を満たす。
$$Y(T_1, \theta) = 0 \quad\Rightarrow\quad T_1 = T_1(\theta)$$
solve(Y(T1, theta) = 0, T1);
陰関数定理を使う
簡単な場合は,$T_1$ は $\theta$ の陽関数として求めることができるが,一般にはそうはいかないかもしれない。そこで,$T_1$ は $\theta$ の陰関数であるとして話を進める。
$Y(T_1(\theta), \theta) = 0$ であるから,
$$\frac{d Y(T_1(\theta), \theta)}{d\theta} =
\frac{\partial Y}{\partial T_1} \frac{d T_1}{d\theta} +
\frac{\partial Y}{\partial \theta}
= 0$$
より,$\displaystyle \frac{d T_1}{d\theta}$ を求めることができる。
depends(T1, theta);
dY: diff(Y(T1, theta)=0, theta);
sol1: solve(dY, diff(T1, theta));
dT1: rhs(sol1[1]);
水平到達距離 $L$
滞空時間 $T_1(\theta)$ の間に水平方向に進む距離は
$$L = X(T_1(\theta), \theta)$$
L(theta):= X(T1, theta);
$L$ が最大となる角度を求める
$\displaystyle \frac{dL}{d\theta} = 0$ となる角度 $\theta \equiv \theta_{\rm max}$ を求める。陰関数定理の結果を .ev()
で代入して…
dL: diff(L(theta), theta)$
dL: trigsimp(ev(dL, sol1[1]));
$L$ が最大となる角度は,連立方程式
\begin{eqnarray}
Y(T_1(\theta), \theta) &=& 0 \\
\frac{d}{d\theta} L(\theta) &=& 0
\end{eqnarray}
を,$\sin\theta$ と $T_1(\theta)$ について解いて求めることができる。
sol2: solve([Y(T1, theta) = 0, dL = 0],
[sin(theta), T1]);
$\sin\theta > 0, \ T_1(\theta) > 0$ であるから,解は…
sinth: rhs(sol2[2][1]), factor;
$$ \sin\theta_{\rm max} = \frac{1}{\sqrt{2 (1+H)}}$$であることがわかったから,$\tan\theta_{\rm max}$ は…
sinth/sqrt(1-sinth**2), factor;
/* 二乗して平方根 */
sqrt(%**2);
なかなか簡単化してくれませんが,要するに
$$\tan\theta_{\rm max} = \frac{1}{\sqrt{1+2 H}}$$
ということです。
最大水平到達距離
$$L_{\rm max} = X(T_1(\theta_{\rm max}), \theta_{\rm max})$$
T1max: rhs(sol2[2][2])$
thmax: asin(1/sqrt(2*(1+H)))$
X(T1max, thmax), factor;
/* 二乗して平方根 */
sqrt(%**2);
これもなかなか簡単化してくれませんが,要するに
$$L_{\rm max} = \sqrt{1 + 2H}$$
ということです。
別解
陰関数定理を使い,連立方程式の形にしますが,$\sin\theta$ を消去する方針でやってみます。
$\displaystyle \frac{dL}{d\theta} = 0$ を $\theta$ について解きます。
dL = 0;
solsin: solve(dL=0, sin(theta));
soltheta: solve(solsin[1], theta);
この $\theta$ を $Y(T_1, \theta) = 0$ に代入して1変数 $T_1$ に関する方程式にし,$T_1$ について解きます。
eqT1: ev(Y(T1, theta) = 0, soltheta[1]);
sols: solve(eqT1, T1);
$T_1 > 0$ ですから…
T1max: rhs(sols[2]);
このときの $\theta$ の値は…
thmax: ev(rhs(soltheta[1]), sols[2]);
$\sin \theta_{\rm max} = $ …
sin(thmax);
$\tan \theta_{\rm max} = $ …
tan(thmax), factor;
sqrt(%**2);
最大到達距離 $L_{\rm max}$ は…
X(T1max, thmax), factor;
sqrt(%**2);