Vincenty法

Vincenty法（）とは回転楕円体上の2点間の距離（測地線の長さ）を計算する測地法の反復計算アルゴリズムである。 (1975a)によって考案された。
地球形状は回転楕円体として近似可能なので、地球面上で二点間距離の計算に用いられる。ただしVincenty法の計算誤差は 0.5 mm(0.020″)近くなる場合もある。なお地球を球体として近似する大円距離より精度が良い。
概要.
測地線の長さに関して、順解法(direct method)はある点からの距離と方位角により、他の点を求めるものである。逆解法(inverse method)は2点間の回転楕円体面上距離と方位角を求めるものである。
なお計算方法としては、近年は Karney (2013) による方法が計算精度・計算速度ともに高く、Vincenty法よりも多く用いられる。
背景.
Vincentyの目的は当時すでに存在していた回転楕円体上の測地法アルゴリズムのプログラムの長さを最小化することであった。彼の未発行のレポート(1975b)によれば数キロバイトのメモリしか搭載していないWang 720 電卓を使用した。長距離において良い精度を得るために、伝統的な補助球を用いた手法（Legendre (1806), Bessel (1825), and Helmert (1880)）を使用している。また、Vincentyの手法はRainsford (1955)による解法にも依存している。Legendreは回転楕円体上の測地線は緯度を更成緯度とし、方位角を同じものとすることで補助球の大円上に正確に対応させられることを示した。 楕円体上の経度と距離は単純な積分によって、補助球上の経度とその大円上の弧長から導かれる。BesselとHelmertはそれらの積分について収束の早い数列を与えた。それにより測地計算が任意の精度で行えるようになった。
プログラムサイズを最小化するためにVincentyはこれらの数列を初項を小さな値とする拡張しformula_1のオーダーで打ち切った。これにより、経度と距離の積分式は簡潔なものとなった。式は入れ子型（ホーナー法）にし、一時レジスタを1つだけ用いて多項式計算を行えるようにした。そして、単純な収束計算を陰関数を解くのに用いた。これは収束が遅くinverse法では収束しないこともありうるが、コードサイズは小さいものとなった。
表記法.
以下のように定義する。
逆解法.
逆解法は回転楕円体上の2点の座標formula_14が与えられた時に、方位角formula_10と距離formula_12を導く。
formula_17及びformula_18を計算し、formula_19をformula_20で初期化し、以下の計算をformula_19が収束するまで反復する。
formula_19が所望の精度まで収束したら（10-12の偏差ならば0.06 mmの精度）以下の計算を行う。
両極付近の2点間の計算は最初のformula_19を設定した際にformula_39以上となると、収束しない。
順解法.
順解法は始点formula_40と始点における方位角formula_41、距離formula_12が与えられた時の終点の座標formula_43と方位角formula_44を導く。
まず、以下の計算を行う。
formula_13をformula_53で初期化し、以下の収束するまで反復計算を行う。
formula_13が所望の精度まで収束したら以下の計算を行う。
始点が極点である時、最初の等式は不定となる。
始点の方位角が真西か真東の場合2番目の等式は不定となる。
しかし、2変数関数のcodice_1等を用いることでこれらの値は正しく計算できる。
Vincentyによる修正.
Vincenty自身の論文(1979)によると、formula_64をHelmertの展開係数formula_65を用いて以下のより簡潔な形式で表すことを提案した。
ここで、formula_68である。
対蹠付近の点.
先に触れたように、逆解法の反復計算は対蹠点付近において、収束しなかったり、収束が遅かったりする。例えば、WGS84測地系においてformula_69であるとする。この計算は1 mmの精度に達するまでに130回の計算が必要になる。逆解法がどのように実装されるかによって、計算結果は正しく19936288.579 mを返したり、間違った結果を返したり、エラーとなったりする。例えばNGS online utilityによる計算結果は5 kmも長い。Vincentyが提案した方法はこのような場合に収束を速める(Rapp, 1973)。
逆解法が収束しない例としてformula_70がある。Vincentyの未出版のレポート(1975b)によると、異なった手法がそのような状況に適しており、60回の反復計算の後に19944127.421 mという正しい計算結果に達した。しかし、この手法は他の多くの場合において何千回もの反復が必要となる。
ニュートン法は全ての入力点に対して収束が速い(Karney, 2013)。