はじめに
トレイルランニング(トレラン)というスポーツをご存知でしょうか。舗装された道路を走るマラソンとは異なり、山の細道や砂利道、時には岩場といった未舗装路を駆け抜けるアウトドアスポーツです。起伏に富んだコースを走るため、平坦な道を走るのとはまた違った体全体を使い切るような爽快感と、刻一刻と変化する山の風景を楽しめるのが最大の魅力です。
トレイルランニングを楽しむ私たちにとってGPSウォッチはなくてはならないデバイスです。走っている間、手首につけた時計が、上空の衛星から届くGPS信号と周囲のわずかな空気の重さを感じる気圧センサーを駆使して、私たちがどれだけ登ったかを獲得標高という数字で教えてくれます。
獲得標高とは、簡単に言えば「登った高さの合計」のことです。数学的に考えれば、コースの標高の変化をグラフに描き、その中で「登り」の部分だけを足し合わせる(積分)計算をしていることになります。
もし、スタートとゴールが同じ場所にある周回コースであれば、右から回っても、左に回っても、最終的に登るべき高さの合計はピタリと一致するはずです。後ほど、数学を用いてそのことを厳密に証明します。
ところが、現実はそれほど単純ではありません。先日、いつものお気に入りのコースを、あえて逆回りで走ってみたときのことです。走り終えてウォッチの記録を確認すると不思議なことが起きていました。以前同じコースを順方向で走った時よりも獲得標高が10パーセント近くずれていたのです。同じ山、同じ道、同じ時計を使っているのに、コースを回る向きを変えただけで、なぜ獲得標高が変わってしまうのでしょうか。
ウォッチはGPSで自分の位置を確認しながら、気圧のわずかな変化を捉えて「今、何センチ登ったか」を1秒ごとに休まず計算しています。この「1秒ごとに測る」というデジタルの仕組みと、私たちの走るスピードが斜面によって変わるという現実が組み合わさることにより獲得標高に差が生じるという仮説を後ほど提示します。
本稿では、獲得標高の数学的定式化、順方向と逆方向で獲得標高が一致することの証明、実際の計測におけるずれの原因を体系的に解説します。
順回りに走る場合の獲得標高の定式化
ランナーは時点\(0\)に出発し、時点\(T>0\)にコースを一周してスタート地点に戻ってくるものとします。時点\(t\in \left[0,T\right] \)におけるランナーの平面上の位置を特定するベクトル値関数を、\begin{equation*}\boldsymbol{r}:\mathbb{R} \supset \left[ 0,T\right] \rightarrow \mathbb{R} ^{2}
\end{equation*}で表記します。\(\boldsymbol{r}\)がそれぞれの時点\(t\in \left[0,T\right] \)に対して定めるベクトルを、\begin{equation*}\boldsymbol{r}\left( t\right) =\left(
\begin{array}{c}
x\left( t\right) \\
y\left( t\right)
\end{array}\right)
\end{equation*}で表記します。つまり、時点\(t\)におけるランナーの位置の緯度が\(x\left( t\right) \)であり、経度が\(y\left( t\right) \)であり、それらの組が\(\boldsymbol{r}\left( t\right) \)であるということです。コースを平面上にプロットすると平面上の曲線\begin{equation*}C\left( \boldsymbol{r}\right) =\left\{ \boldsymbol{r}\left( t\right) \in \mathbb{R} ^{2}\ |\ t\in \left[ 0,T\right] \right\}
\end{equation*}が得られます。
平面上の地点\(\left( x,y\right) \in \mathbb{R} ^{2}\)の標高を特定する2変数関数を、\begin{equation*}h:\mathbb{R} ^{2}\rightarrow \mathbb{R} \end{equation*}で表記します。つまり、地点\(\left( x,y\right) \)の標高が\(h\left( x,y\right) \)であるということです。したがって、時点\(t\in \left[ 0,T\right] \)においてランナーがいる地点の標高は、\begin{equation*}h\left( \boldsymbol{r}\left( t\right) \right) =h\left(
\begin{array}{c}
x\left( t\right) \\
y\left( t\right)
\end{array}\right)
\end{equation*}です。
スタート後に時間が\(t\geq 0\)だけ経過した時点までにランナーが走った平面上での距離(道のり)を特定する弧長関数を、\begin{equation*}s:\mathbb{R} \supset \left[ 0,T\right] \rightarrow \mathbb{R} \end{equation*}で表記します。時点\(t\)における弧長を得るためには速さ\(\left\Vert \boldsymbol{r}^{\prime }\left( t\right) \right\Vert \)を区間\(\left[ 0,t\right] \)上で積分すればよいため、任意の\(t\in \left[ 0,T\right] \)に対して、\begin{eqnarray*}s\left( t\right) &=&\int_{0}^{t}\left\Vert \boldsymbol{r}^{\prime }\left(
s\right) \right\Vert ds \\
&=&\int_{0}^{t}\sqrt{\left[ x^{\prime }\left( s\right) \right] ^{2}+\left[
y^{\prime }\left( s\right) \right] ^{2}}ds
\end{eqnarray*}が成り立ちます。
曲線\(C\left( \boldsymbol{r}\right) \)が正則(\(\boldsymbol{r}\)が\(C^{1}\)級かつ導関数が非ゼロベクトル)である場合には弧長関数\(s\)は狭義単調増加関数になります。その場合、\(s\)の終集合を値域に制限すれば全単射になります。\(s\)の値域は、\begin{equation*}s\left( \left[ 0,T\right] \right) =\left[ s\left( 0\right) ,s\left( T\right) \right] =\left[ 0,s\left( T\right) \right]
\end{equation*}です。\(s\left( T\right) \)はコースの平面上での総道のりであるため、簡便化のために、\begin{equation*}L=s\left( T\right)
\end{equation*}と表記します。弧長関数\(s\)の終集合を値域に制限した関数\begin{equation*}s:\mathbb{R} \supset \left[ 0,T\right] \rightarrow \left[ 0,L\right]
\end{equation*}は全単射であり、したがってその逆関数\begin{equation*}
t:\mathbb{R} \supset \left[ 0,L\right] \rightarrow \left[ 0,T\right]
\end{equation*}が存在します。ランナーが走った平面上での道のりが\(s\in \left[ 0,L\right] \)である場合、それだけ走るのに必要な時間が\(t\left( s\right) \in \left[ 0,T\right] \)であるということです。
道のりが\(s\in \left[ 0,L\right] \)である時点においてランナーがいる地点の座標は、\begin{equation*}\boldsymbol{r}\left( t\left( s\right) \right) =\left(
\begin{array}{c}
x\left( t\left( s\right) \right) \\
y\left( t\left( s\right) \right)
\end{array}\right)
\end{equation*}であり、さらにその地点の標高は、\begin{equation*}
h\left( \boldsymbol{r}\left( t\left( s\right) \right) \right) =h\left(
\begin{array}{c}
x\left( t\left( s\right) \right) \\
y\left( t\left( s\right) \right)
\end{array}\right)
\end{equation*}であることに注意してください。以上を踏まえた上で、それぞれの道のり\(s\in \left[ 0,L\right] \)に対して、その時点においてランナーがいる地点の標高\begin{equation*}H\left( s\right) =h\left( \boldsymbol{r}\left( t\left( s\right) \right)
\right)
\end{equation*}を特定する関数\begin{equation*}
H:\mathbb{R} \supset \left[ 0,L\right] \rightarrow \mathbb{R} \end{equation*}を定義し、これを標高関数と呼ぶこととします。
道のり\(s\in \left[ 0,L\right] \)において、\begin{equation*}H^{\prime }\left( s\right) >0
\end{equation*}が成り立つ場合、その時点においてランナーは登っています。他方で、\begin{equation*}
H^{\prime }\left( s\right) \leq 0
\end{equation*}が成り立つ場合、その時点においてランナーは下っているか、または平坦な道を進んでいます。獲得標高\(D^{+}\)は上りの部分だけを合計したものであるため、\begin{equation*}D^{+}=\int_{0}^{L}\max \left\{ H^{\prime }\left( s\right) ,0\right\} ds
\end{equation*}として得られます。
逆回りに走る場合の獲得標高の定式化
コースを順回りで走る場合の道のりを、\begin{equation*}
s\in \left[ 0,L\right]
\end{equation*}で表記しましたが、それに対して、コースを逆回りに走る場合の道のりを、\begin{equation*}
u\in \left[ 0,L\right]
\end{equation*}で表記します。コースを逆方向に\(u\)だけ進んだ場合、順向きのスタート地点からの残りの距離は\(L-u\)であるため、両者の間には以下の関係\begin{equation*}s=L-u
\end{equation*}が成り立ちます。
コースを順回りで走る場合の標高関数を、\begin{equation*}
H:\mathbb{R} \supset \left[ 0,L\right] \rightarrow \mathbb{R} \end{equation*}で表記しましたが、それに対して、コースを逆回りに走る場合の標高関数を、\begin{equation*}
G:\mathbb{R} \supset \left[ 0,L\right] \rightarrow \mathbb{R} \end{equation*}で表記します。順まわりで\(s\)だけ走った地点は、逆回りで\(L-s\)だけ走った地点と一致するため、以下の関係\begin{equation*}H\left( s\right) =G\left( L-s\right)
\end{equation*}が成り立つことに注意してください。したがって、\begin{eqnarray*}
H^{\prime }\left( s\right) &=&\frac{d}{ds}G\left( L-s\right) \\
&=&\left. \frac{d}{du}G\left( u\right) \right\vert _{u=L-s}\cdot \frac{d}{ds}\left( L-s\right) \quad \because \text{合成関数の微分} \\
&=&G^{\prime }\left( L-s\right) \cdot \left( -1\right) \\
&=&-G^{\prime }\left( L-s\right)
\end{eqnarray*}すなわち、\begin{equation*}
H^{\prime }\left( s\right) =-G^{\prime }\left( L-s\right)
\end{equation*}が成り立ちます。
コースを逆回りで走る場合の獲得標高は、\begin{equation*}
D^{-}=\int_{0}^{L}\max \left\{ G^{\prime }\left( u\right) ,0\right\} du
\end{equation*}として得られます。置換積分を行います。先の考察より、\(s\)を\(u\)に関する関数\begin{equation*}s=g\left( u\right) =L-u
\end{equation*}として表現できますが、その逆関数は、\begin{equation*}
u=g^{-1}\left( s\right) =L-s
\end{equation*}です。積分範囲は、\begin{equation*}
\left[ 0,L\right] \rightarrow \left[ g\left( 0\right) ,g\left( L\right) \right] =\left[ L,0\right]
\end{equation*}へと変換されることを踏まえると、\begin{eqnarray*}
D^{-} &=&\int_{0}^{L}\max \left\{ G^{\prime }\left( u\right) ,0\right\} du \\
&=&\int_{L}^{0}\max \left\{ G^{\prime }\left( L-s\right) ,0\right\} \frac{dg^{-1}\left( s\right) }{ds}ds\quad \because \text{置換積分} \\
&=&-\int_{L}^{0}\max \left\{ G^{\prime }\left( L-s\right) ,0\right\} ds\quad
\because \frac{dg^{-1}\left( s\right) }{ds}=-1 \\
&=&\int_{0}^{L}\max \left\{ G^{\prime }\left( L-s\right) ,0\right\} ds \\
&=&\int_{0}^{L}\max \left\{ -H^{\prime }\left( s\right) ,0\right\} ds\quad
\because H^{\prime }\left( s\right) =-G^{\prime }\left( L-s\right)
\end{eqnarray*}すなわち、\begin{equation*}
D^{-}=\int_{0}^{L}\max \left\{ -H^{\prime }\left( s\right) ,0\right\} ds
\end{equation*}が成り立ちます。
どちら回りでも獲得標高が一致する理由
これまでの議論より、同じコースを順回りで走った場合の獲得標高が、\begin{equation*}
D^{+}=\int_{0}^{L}\max \left\{ H^{\prime }\left( s\right) ,0\right\} ds
\end{equation*}である一方で、逆回りで走った場合の獲得標高が、\begin{equation*}
D^{-}=\int_{0}^{L}\max \left\{ -H^{\prime }\left( s\right) ,0\right\} ds
\end{equation*}であることが明らかになりました。
2つの被積分関数の差\begin{equation*}
\max \left\{ H^{\prime }\left( s\right) ,0\right\} -\max \left\{ -H^{\prime
}\left( s\right) ,0\right\}
\end{equation*}に注目します。\(s\in \left[ 0,L\right] \)において\(H^{\prime }\left( s\right) \geq 0\)である場合には、\begin{eqnarray*}\max \left\{ H^{\prime }\left( s\right) ,0\right\} -\max \left\{ -H^{\prime
}\left( s\right) ,0\right\} &=&H^{\prime }\left( s\right) -0 \\
&=&H^{\prime }\left( s\right)
\end{eqnarray*}である一方で、\(H^{\prime }\left(s\right) <0\)である場合には、\begin{eqnarray*}\max \left\{ H^{\prime }\left( s\right) ,0\right\} -\max \left\{ -H^{\prime
}\left( s\right) ,0\right\} &=&0-\left[ -H^{\prime }\left( s\right) \right]
\\
&=&H^{\prime }\left( s\right)
\end{eqnarray*}であるため、任意の\(s\in \left[ 0,L\right] \)において、\begin{equation*}\max \left\{ H^{\prime }\left( s\right) ,0\right\} -\max \left\{ -H^{\prime
}\left( s\right) ,0\right\} =H^{\prime }\left( s\right)
\end{equation*}が成り立つことが明らかになりました。左辺を積分すると、\begin{eqnarray*}
\int_{0}^{L}\left[ \max \left\{ H^{\prime }\left( s\right) ,0\right\} -\max
\left\{ -H^{\prime }\left( s\right) ,0\right\} \right] ds
&=&\int_{0}^{L}\max \left\{ H^{\prime }\left( s\right) ,0\right\}
ds-\int_{0}^{L}\max \left\{ -H^{\prime }\left( s\right) ,0\right\} ds \\
&=&D^{+}-D^{-}
\end{eqnarray*}が成り立つ一方で、右辺を積分すると、\begin{eqnarray*}
\int_{0}^{L}H^{\prime }\left( s\right) ds &=&H\left( L\right) -H\left(
0\right) \quad \because \text{微分積分学の第1基本定理} \\
&=&0\quad \because H\left( L\right) =H\left( 0\right)
\end{eqnarray*}が成り立ちます。なお、\(H\left( L\right) =H\left( 0\right) \)が成り立つ理由は、周回コースを想定しているためスタート地点とゴール地点の標高が一致するからです。いずれにせよ、これらの結果は一致するため、\begin{equation*}D^{+}-D^{-}=0
\end{equation*}すなわち、\begin{equation*}
D^{+}=D^{-}
\end{equation*}を得ます。以上より、コースをどちら回りで走った場合にも獲得標高は一致することが明らかになりました。
離散化と速度の非対称性が生む計測誤差
理論の世界では、順向きと逆向きとでは獲得標高が完全に一致することが明らかになりました。しかし、GPSウォッチは連続的な積分計算を行っているわけではなく、1秒間に1度の間隔で標高をサンプリングし、その点と点の差分を足し合わせることで獲得標高を算出しています。つまり、以下の計算式\begin{equation*}
D_{rev}^{+}=\sum_{i=1}^{n}\max \left\{ H\left( s_{i}\right) -H\left(
s_{i-1}\right) ,0\right\}
\end{equation*}を利用しているということです。ただし、\(\Delta s=s_{i}-s_{i-1}\)は1秒間で走る道のりです。この離散化こそが問題の温床であると考えられます。つまり、1秒間で走る道のり\(\Delta s\)の間に起伏が存在する場合、連続的な積分であればすべてを拾い上げますが、デジタル計測ではサンプリング点の間にある起伏は平均化されて消えてしまいます。言い換えると、区間\(\left[ s_{i-1},s_{i}\right] \)の内部に「登り\(\rightarrow \)下り\(\rightarrow \)登り」のような微細構造が存在すると、連続積分では寄与しますが、離散化では端点のみが評価されるため、内部の登りが消失します。なぜこれが獲得標高の差を生み出すのでしょうか。
トレイルランニングにおいて、登りと下りの速度は大きく異なります。
登りでは低速であるため、1秒間に進む道のり\(\Delta s\)が短く、したがって路面の凹凸を細かい解像度でスキャンします。結果として、微小な登りが漏らさずカウントされるため、獲得標高は真の値に近づくか、あるいはノイズを拾って過大になります。
下りでは高速であるため、1秒間に進む道のり\(\Delta s\)が長く、スキャンの解像度が粗くなります。結果として、サンプリング点の間にある微小な登りのカウント漏れが発生し、獲得標高は真の値よりも過少になります。
山の形状は左右対称であるとは限らないため、順回りと逆回りを比べた場合、登る高さと下る高さは同じだとしても、登り時間と下り時間の比率まで一定であるとは限りません。具体例として、順回りで走った場合、最初に急な坂を上り、その後、なだらかに下りながらスタートへ戻るコースプロファイルを想定します。同じコースを逆向きで走った場合、最初になだらかに登り、その後、急な坂を下ってスタートへ戻ることになります。この場合、順回りでは低速で進む時間の割合が逆回りの場合よりも高くなるため、先の理由により、順回りでは獲得標高が相対的に大きく見積もられます。
$$\begin{array}{cccc}
\hline
走行方向 & セクション
& 斜度 & 速度 \\ \hline
順回り & 前半(急登)
& 大 & 低速 \\ \hline
& 後半(穏下り) & 小 & 高速 \\ \hline
逆回り & 前半(穏登り) & 小 & 中速 \\ \hline
& 後半(急下り) & 大 & 中〜高速 \\ \hline
\end{array}$$
私が目にした獲得標高の差。それは山が変わったからでも、数学が間違っていたからでもありません。登りでは微細な起伏を拾い、下りではそれを見逃すというデジタル計測の特性が、測度の差によって順向きと逆向きで異なる情報の欠落を引き起こした結果です。数学が保証する対称性は連続の世界に属しています。一方で、デジタルデバイスは有限の分解能でしか世界を観測できません。獲得標高のずれは、この2つの世界の間に生じる必然的な差です。
会員専用コンテンツです
【ログイン】【会員登録】