0

楕円積分を用いた楕円弧長の計算 その3

69
0
  1. はじめに
     前回は、弧の存在範囲を、第I象限から楕円の右半分に拡げた。その際楕円積分のφの範囲を[0,π/2]に制限していた為、θの範囲に応じてやや複雑な場合分けと計算式が必要になった。今回は、弧の存在範囲を楕円全体に拡げ、同時に楕円積分と変換関数の拡張により、場合分けの煩わしさの軽減も図る。

  2. 第2種楕円積分の拡張

第2種不完全楕円積分(基本形2)

E0(φ,k)=0φ1k2sin2ϕdϕ
π/2φπ/2

積分の基本性質により、φが負の時、E0(φ)=E0(φ)が、自動的に成立する。

第2種不完全楕円積分(拡張形)

E(φ,k)={E0(φ,k)(0φπ/2)2E(k)+E0(φπ,k)(π/2<φ3π/2)E(φ,k)(φ<0)

拡張形と表現しているが、これは第2種不完全楕円積分の本来持っている基本的性質を、今回必要になる範囲について、E0(φ,k)で表したものに過ぎない。E(φ,k)のもっと広い性質については、 DLMFのサイト などを参照されたい。(特に、19.2.10に注目。)

  1. 変換関数の拡張
    θの範囲をπθπに拡げ、これに合わせて変換関数を拡張する。
    th2u(θ)={tan1((b/a)/tanθ)(0<θ<π,θπ/2)tan1((b/a)/tanθ)+π(π<θ<0,θπ/2)3π/2(θ=π)π(θ=π/2)π/2(θ=0)0(θ=π/2)π/2(θ=π)
    th2u(θ)は、[π,π]の範囲のθに対して[π/2,3π/2]の範囲を(単調減少に)返す。
    th2v(θ)={tan1((a/b)tanθ)(π/2<θ<π/2)tan1((a/b)tanθ)π(π<θ<π/2)tan1((a/b)tanθ)+π(π/2<θ<π)θ(θ=π,π/2,π/2,π)
    th2v(θ)は、[π,π]の範囲のθに対して[π,π]の範囲を(単調増加に)返す。
    変換関数がだいぶ複雑になったので、結果を確認するための逆変換関数を導入しておく。
    u2th(u)=atan2(bcosu,asinu)
    v2th(v)=atan2(bsinv,acosv)
    ここで用いたatan2は、殆どすべてのプログラミング言語でこの名前で提供されている、2変数のarc-tangentで、普通のarc-tangentで表すと次のようになる。
    atan2(y,x)={tan1(y/x)(x>0)tan1(y/x)+π(x<0,y0)tan1(y/x)π(x<0,y<0)π/2(x=0,y>0)π/2(x=0,y<0) 0(x=0,y=0)

  2. 楕円の弧長
    拡張された楕円積分と変換関数を使う事で、θの範囲による場合分けが不要になっている。
    θを動径(楕円上の点(x,y)と原点を結ぶ線分)がx軸となす角度とする。(反時計方向を正とする。)
    この時、θ[θ1,θ2](πθ1θ2π)の範囲の弧長は、次のように求められる。
    A) 0<baの場合
    e=1(b/a)2
    u1=th2u(θ2)
    u2=th2u(θ1)
    とすると、弧長L
    L=a(E(u2,e)E(u1,e))
    で、得られる。
    B) 0<abの場合
    e=1(a/b)2
    v1=th2v(θ1)
    v2=th2v(θ2)
    とすると、弧長L
    L=b(E(v2,e)E(v1,e))
    で、得られる。

  3. 計算例
    以下では、角度の単位を数値表の表示に合わせて、「度(°)」とする。
    その2の計算例3)で扱った問題を再度取り挙げる。
    ・シドニー-東京間の子午線距離を求める
    今回も、E(φ,k)を求めるのに、丸め誤差を防ぐため、専用ソフトを使う。
    ただし、その2で紹介した ke!+san E(ϕ,k)は、ϕの入力可能範囲が[360,360]となっているが、[90,90]以外では、奇妙な挙動が見られる。[90,90]の範囲だけで利用させて貰うのが、無難と思われる。
    a=6378.137km,b=6356.752km
    e=1(6356.752/6378.137)2=0.08181979
    地理緯度
     シドニー:南緯33.868333
       東京:北緯35.689556
    地心緯度
     シドニー:南緯33.690478
       東京:北緯35.507398
    これから、
    u1=th2u(35.507398)=54.401572
    u2=th2u(33.690478)=123.779349
    E(u2,e)=2.1559621
    E(u1,e)=0.9486891
    よって、
    L=a(E(u2,e)E(u1,e))=7700.15(km)

投稿日:2022428
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

GonJii
2
1639

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中