旧日本測地系(Tokyo Datum)から世界測地系(JGD2000)への変換に関して、既存の1次近似式の確認と、最新のパラメータファイルを使っての新たな近似式の作成を行ってみた。
2地点の緯度経度を与えてその間の距離を求める計算式はいくつかあり、
GeoDistanceとその他の測地線距離算出式の精度
ではランダムな2点間の距離や、日本での運転経路データを用いて代表的な計算式の精度を評価したが、
短い距離の計算精度の評価と、対蹠点付近の計算精度の評価が不十分であった。
そこで、比較する計算式を追加した上で、GeographicLibのテストデータを用いて計算精度の再評価を行った。
メルカトル図法の投影座標の計算に逆グーデルマン関数を用いる(メルカトル図法 - Wikipedia)が、等価な計算式が複数ある。
JavaScriptで計算する際に、どの計算式を用いるのが誤差が少なくなるのか調査した。
球面上に一様分布するランダムな点を生成したい時、 単純に極座標表示で$\theta$と$\varphi$を一様分布させると、極付近に点が集まってしまう。 data1 = Transpose[{Sin[t] Cos[f], Sin[t] Sin[f], Cos[t]} /. { f -> RandomReal[{0, 2 Pi}, 2000], t -> RandomReal[{0, Pi}, 2000]}]; g1 = ListPointPlot3D[data1, BoxRatios -> {1, 1, 1}] 球面上で一様分布させるには、下記のように$\theta$にArcCosを使う ($\theta$の位置の確率を$\sin\theta$に比例させたい→累積確率分布関数は$\cos$→逆関数は$\a
Mathematicaには2点の緯度と経度を与えて、その間の測地線距離を返す関数としてGeoDistanceがある。
しかしながら、ここで書かれているように、その精度には疑問が呈されているようだ。
17 Mar. 2022 追記)
続編記事を投稿
Mathematicaで友愛数を列挙するプログラム例として以下のようなものが見受けられる。 yakuwa[n_] := DivisorSigma[1, n] - n; Do[If[(yakuwa[yakuwa[k]] == k) && (yakuwa[k] != k), Print[{k, yakuwa[k]}]], {k, 1, 1000}]; しかし、Doでループを回してPrintで書き出していくのはMathematica的に美しくないと思う。 Mathematicaなら関数型プログラミングとパターンマッチを用いるのが良いと思うので、私なら以下のように書く。 Cases[NestList[DivisorSigma[1, #] - # &, #, 2] & /@ Range[100000], {a_, b_, a_} /; a < b -> {a, b}] 実行速度もこちらの