mattyuuの数学ネタ集

世界は数式で溢れている

マーライオンと初めてのdesmos

10月1日の第7回日曜数学会で数式お絵描きのパイオニアであるもっちょさんとコロちゃんぬさんが初めて出会う場面、そして数式お絵描きの手法について語り合う場面に立ち会うことができました。私はTwitterアカウント(@mattyuu123)を持っていてもつぶやいたことがなかったのですが、この時初めてつぶやきました。私の中では記念の瞬間でした。


私が思うもっちょさんとコロちゃんぬさんの代表作をそれぞれ載せておきます。


この数式お絵描きはdesmosというアプリを用いておられます。私もdesmosを使って何かしてみたいと思い、今回、高校物理の力学、高校数学の範囲でdesmos遊んびしてみたので発表いたします。題材としてはマーライオンを選びました。(数式お絵描きはしておりません)

なお、この記事では高校物理の力学の知識、高校の数Ⅲで習う三角関数微分の知識を前提としています。前提知識がない方でも、フジテレビのガリレオ福山雅治さんはこんな数式を書いていたんじゃないか?と想像しながら、数式を流し読みしていただけたらと思います。

今回の問題は下記です。

f:id:mattyuu:20161023014914j:plain

マーライオンが水を噴射するときに、一番遠くまで水を飛ばすには口をどの角度にして発射したらよいかという問題になります。

この問題ではマーライオンの身長(正確には口の高さ)をhというパラメータで含めております。実はh=0、つまり地面から直接水を発射する場合であれば、この問題はとても簡単です。高校物理の力学の最初の方に必ず習うと言ってもいいかもしれません。答えは皆さんのご想像通り45°になります。しかし、身長が加わるだけでこの問題は難しくなります。立式は容易ですが、解けるかがわからないのです。数値解であれば容易に出せますが、解析解を出せるかは、冷や汗ものでした。

解く前に一点注意として、この問題では水は大きさのない質点として計算していきます。また空気抵抗も考えません。水は常に連続的に噴射され続けていますが、時刻t=0で水分子が1粒発射されたものとして読んでください。

では解いていきましょう。
(しばらく単調な計算が続きますので、流れだけ簡単に説明すると、
「時刻tでの水の位置を求める」→「水が地面に落ちる時刻Tを求める」→「水が地面に落ちた時の位置を求める」→「水が地面に落ちた時の位置を発射角\thetaの関数と思って微分する」→「微分を0とする\thetaが答えとなる」)

解くためには、座標軸の設定が必要ですので、次の通りとします。

f:id:mattyuu:20161023015005j:plain

まずは、口から飛び出る水の速度を水平方向(x軸右方向)の速度v_xと、垂直方向(y軸上方向)の速度v_yに分けて考えましょう。水平方向には力が加わりませんので、口から飛び出た瞬間の速度のまま変化しません。しかし垂直方向の速度に関しては、重力の影響を受け、時刻tが1増えるごとに重力加速度gずつ小さくなっていきます。
よって、時刻tでの速度はそれぞれ下記になります。

\displaystyle
\begin{cases}
 v_x(t) = v\cos{\theta}\\
\\
 v_y(t) = v\sin{\theta} - gt
 \end{cases}

次に時刻tでの水の位置(x(t),y(t))を出しましょう。高校力学では公式として学んでおり式を導くことができますが、実は、速度を時間で積分することで位置を出すことができます。逆に位置を時間で微分することで速度を出すこともできます。ここでは積分で位置を導きます。公式で覚えている方は結果が一致していることを確認してもいいかもしれません。

\displaystyle
\begin{cases}
 \int_0^t{v_x(t)}{\rm d}t = \int_0^t {v\cos{\theta}}{\rm d}t \rightarrow x(t) = v\cos{\theta}\cdot t + x(0) = v\cos{\theta}\cdot t  \\
\\
\\
 \int_0^t{v_y(t)}{\rm d}t  = \int_0^t {(v\sin{\theta} - gt)}{\rm d}t \rightarrow y(t) = v\sin{\theta}\cdot t -\frac{1}{2}gt^2 + y(0) = v\sin{\theta}\cdot t -\frac{1}{2}gt^2 + h
 \end{cases}

x(0)y(0)はそれぞれ左辺の積分を行った結果出てくる、水の時刻t=0での初期位置になります。水は(0,h)より発射されているため、x(0)=0y(0)=hとなっております。このx(t)y(t)を連立させtを消去することで、xyの関係をy=ax^2+bx+cという二次関数の形で表すことができます。これは、二次関数が放物線と言われる所以(ゆえん)になります。今回の計算では二次関数の形にする必要がないのでこれ以上は立ち入りません。

次に、水が地面に落ちる時刻Tを求めます。これはy(t)=0となるtを求めればよいということになります。y(t)=0とすると、

\displaystyle
\begin{split}
 & v\sin{\theta}\cdot t - \frac{1}{2}gt^2 + h = 0 \\
 & \rightarrow gt^2-2v\sin{\theta}\cdot t - 2h = 0 \\
 & \rightarrow t = \frac{v\sin{\theta} \pm \sqrt{v^2\sin^2{\theta}+2gh}}{g}
\end{split}

中学校で習った二次関数の解の公式を、それなりに現実っぽい問題を解く時に使えるのは嬉しいですね。t\geq 0より、水が地面に着く時間Tは、

\displaystyle
 T = \frac{v\sin{\theta} + \sqrt{v^2\sin^2{\theta}+2gh}}{g}

となります。

水が地面に落ちた位置を(L,0)としましょう。つまり、(x(T),y(T))=(L,0)です。Lは次の式で表すことができます。

\displaystyle
\begin{split}
 L = x(T) = v\cos{\theta}\cdot T & = \frac{v\cos{\theta}}{g}\left(v\sin{\theta} + \sqrt{v^2\sin^2{\theta}+2gh}\right) \\
& = \frac{v^2}{g}\left(\cos{\theta}\sin{\theta} + \cos{\theta}\sqrt{\sin^2{\theta}+\alpha}\right) 
\end{split}

ここで、今後計算を進めるにあたって記載を容易にするために、\alpha\equiv 2gh/v^2としています。今考えている変数は\thetaだけであり、ghvはそれぞれ定数ですので、このように置いてしまって中身が分からなくなってもこの後の計算には影響しません。

このL\theta変数の関数L(\theta)と思って、その最大値を求めていきます。最大、最小を求める方法は微分が定石です。微分して得られる導関数を0とする\thetaが、最大、または最小を与えます。


\displaystyle
 \frac{{\rm d}L}{{\rm d}\theta} = \frac{v^2}{g}\left(-\sin^2{\theta}+\cos^2{\theta} - \sin{\theta}\sqrt{\sin^2{\theta}+\alpha}+\cos{\theta}\frac{\sin{\theta}\cos{\theta}}{\sqrt{\sin^2{\theta}+\alpha}}\right)

微分を0にする\thetaを求めたいため、{\rm d}L/{\rm d}\theta=0とおき、両辺をv^2/gで割ることで、下記のようになります。

\displaystyle
 -\sin^2{\theta}+\cos^2{\theta}  -  \sin{\theta}\sqrt{\sin^2{\theta}+\alpha}+\frac{\sin{\theta}\cos^2{\theta}}{\sqrt{\sin^2{\theta}+\alpha}} = 0

\sqrt{}が出てきおります、、、これを満たす\thetaを求めることはできるのでしょうか。。。

まずは\sqrt{}を含むものと、含まないもので分けましょう。

\displaystyle
 -\sin^2{\theta}+\cos^2{\theta}  =  \sin{\theta}\sqrt{\sin^2{\theta}+\alpha}-\frac{\sin{\theta}\cos^2{\theta}}{\sqrt{\sin^2{\theta}+\alpha}}

両辺に\sqrt{\sin^2{\theta}+\alpha}をかけましょう。

\displaystyle
 \left(-\sin^2{\theta}+\cos^2{\theta}\right)\sqrt{\sin^2{\theta}+\alpha}  =  \sin{\theta}\left(\sin^2{\theta}+\alpha-\cos^2{\theta}\right)

両辺を二乗しましょう。

\displaystyle
\begin{split}
 & \left(-\sin^2{\theta}+\cos^2{\theta}\right)^2\left(\sin^2{\theta}+\alpha\right)  =  \sin^2{\theta}\left(\sin^2{\theta}+\alpha-\cos^2{\theta}\right)^2 \\
& \rightarrow \left(\sin^4{\theta}-2\sin^2{\theta}\cos^2{\theta}+\cos^4{\theta}\right)\left(\sin^2{\theta}+\alpha\right) \\
& \qquad = \sin^2{\theta}\left(\sin^4{\theta}+\alpha^2+\cos^4{\theta}+2\alpha\sin^2{\theta}-2\alpha\cos^2{\theta}-2\sin^2{\theta}\cos^2{\theta}\right) \\
\\
& \rightarrow \sin^6{\theta}-2\sin^4{\theta}\cos^2{\theta}+\cos^4{\theta}\sin^2{\theta}+\alpha\sin^4{\theta}-2\alpha\sin^2{\theta}\cos^2{\theta}+\alpha\cos^4{\theta}  \\
& \qquad  = \sin^6{\theta}+\alpha^2\sin^2{\theta}+\sin^2{\theta}\cos^4{\theta}+2\alpha\sin^4{\theta}-2\alpha\sin^2{\theta}\cos^2{\theta}-2\sin^4{\theta}\cos^2{\theta} \\
\\
& \rightarrow -\sin^4{\theta}+\cos^4{\theta}-\alpha\sin^2{\theta}=0
\end{split}

途中計算間違いしそうな、ややこしい式変形を経て、なんとも綺麗な形になりました。さて、これ以上先に進めますでしょうか?



進めるんです!

まず、最初の2項は次のように変形できます。


 \displaystyle
 \begin{split}
 & -\sin^4{\theta}+\cos^4{\theta}=\left(\sin^2{\theta}+\cos^2{\theta}\right)\left(-\sin^2{\theta}+\cos^2{\theta}\right) \\
 &\qquad =-\sin^2{\theta}+\cos^2{\theta}=\cos{2\theta}
 \end{split}

ここで、「和と差の積は二乗の差」と中学時代に呪文のように習った展開(因数分解)の公式と、高校で習う\sin^2{\theta}+\cos^2{\theta}=1、及び\cosの加法定理である\cos{(\alpha+\beta)}=\cos{\alpha}\cos{\beta}-\sin{\alpha}\sin{\beta}が役に立っております。

なんと基礎学力が大事かがわかる場面でしょうか!

私が中学校の先生であったなら、「この因数分解マーライオンが吐き出す水を解析するために必要なんだよ」と生徒たちに教えたいところです。

後ろの1項はどうでしょうか?

こちらも高校で習う、\cosの加法定理を応用することで、


 \displaystyle
 -\alpha\sin^2{\theta}=-\alpha\frac{1-\cos{2\theta}}{2}

と変形できます。(\cos{2\theta}=\cos^2{\theta}-\sin^2{\theta}=1-2\sin^2{\theta}を用いてます。)

以上から、{\rm d}L/{\rm d}\theta=0は、


 \displaystyle
 \begin{split}
& \cos{2\theta}-\alpha\frac{1-\cos{2\theta}}{2}=0 \\
& \rightarrow \cos{2\theta}=\frac{\alpha}{2+\alpha}
 \end{split}

となります。ここで、\alpha=2gh/v^2であったことを思い出すと、最終的に、


 \displaystyle
\cos{2\theta}=\frac{\frac{2gh}{v^2}}{2+\frac{2gh}{v^2}}=\frac{gh}{v^2+gh}

なんとも、綺麗にまとまった式でしょうか!

高校生の皆さんは、「求めたい答えは、\cosをとると\frac{gh}{v^2+gh}となる角度を半分にしたものです。」と答えれば正解になります。

大学では\arccosという関数が登場し、\cosをとるとxになる角度を\arccos{x}と表すことができます。

よって、

 \displaystyle
2\theta=\arccos{\frac{gh}{v^2+gh}}

とできるので、最終的な答え(求めたい角度を\theta_{\rm max}とでも名前をつけましょう)をまとめると、次のようになります。

f:id:mattyuu:20161023022325j:plain

前回記事に書いたトーナメントの数式同様、今回も無事解析解を得ることができたことはなんとも不思議であります。うまく式変形ができなければ、コンピュータによる数値解しか得られなかった可能性は大いにあるのです。

さて、忘れかけていたdesmosを使う時がついにきました。desmosを使って、マーライオンにいろいろな角度で水を発射してもらいましょう。そして今回求めた飛距離が最大になる角度の方向にはオレンジ色の点線を引き、最大到達地点(L=x(T)=L(\theta_{\rm max})には赤い旗を置いておきましょう。

そうすると下記のようになり、たしかに今回求めた解析解が正しそうということがわかっていただけるかと思います。

f:id:mattyuu:20161023025014g:plain

初速vをもっと大きくしても、下記のように問題なさそうですね。

f:id:mattyuu:20161023025102g:plain

今回私が作成したdesmosは下記リンクから遊ぶことができます。

https://www.desmos.com/calculator/vhvcloibx9

もっちょさんやコロちゃんぬさんに比べたらとても簡単なものですが、このように解析した結果をアニメーションで見ることができることには感動を覚えます。私が学生時代であれば、Javaを使って水の軌道を数値計算し、gnuplotを使って静的な画像を何枚も作っていたことでしょう。

また、この数式は小便小僧やサクランボの種飛ばし世界選手権(あるんですね、、)でもそのまま使えます(さくらんぼの種は質点ではなく剛体なので、別の力学を用いる必要がある点には目をつむります)。数学の力を感じますね。

読んでいただき、ありがとうございました。

f:id:mattyuu:20161023021715j:plain