楕円弧の長さ(2) -maxima で級数展開-

楕円弧の長さは級数解や台形公式による数値積分によっても計算できますが 処理速度を考えると ガウスルジャンドルあるいは春日屋の方法が適しています。


楕円弧の長さは

これで計算できます。

 

 

楕円弧の長さは 楕円の長径×第2種楕円積分 で与えられることがわかります。第2種楕円積分は楕円弧の円周率πのようなものだと考えれば受け入れやすいと思います。
wikipedia 楕円積分によれば、ルジャンドル標準形の楕円積分になります。数式処理ソフト maxima の組込関数はこの形式が採用されています。

※参考文献
  ○楕円弧の長さの計算式は、応用数学 第4巻 建築構造講座 コロナ社
  ○Gaussの求積法は、解析概論[改訂第三版] 岩波書店
  ○Legendreの多項式は、自然科学者のための数学概論[増訂版] 岩波書店
  ○平均値法は、次元解析・最小2乗法と実験式 応用数学講座 第5巻 コロナ社  本間 仁・春日屋伸昌 共著

 


今回は 楕円弧の長さの計算式を 数式処理ソフト maxima級数に展開するやり方を紹介します。

 


つぎのプログラムを  200-2-1.bat で保存して実行すると

:楕円弧の長さ(級数展開)
@echo off
path C:\maxima-5.47.0\bin;%path%
ruby -x %~f0
pause
goto:eof

#!ruby
f = open("| maxima --very-quiet", "w")
f.print <<~Maxima
  u : taylor(sqrt(1 - t), t, 0, 8)$
  print("sqrt(1 - t) = ", u)$
  e : ratsubst(m * sin(p)^2, t, u)$
  print("sqrt(1 - m * sin(p)^2) = ", expand(e))$

  [a, b] : [1, 0.5]$
  m : 1 - (b / a)^2$
  print("[a, b, m] = ", [a, b, m])$
  s : integrate(e, p, 0, %pi/2)$
  print("s =", float(ev(s)))$

  quit()$
Maxima
f.close
__END__

 


楕円弧の長さ s を(図の赤色部分)
  s = sqrt(1 - m * sin(φ)^2)

プログラム
  u : taylor(sqrt(1 - t), t, 0, 8)$
  e : ratsubst(m * sin(p)^2, t, u)$
テイラー展開(マクローリン展開)して
  m : 1 - (b / a)^2$
  s : integrate(e, p, 0, %pi/2)$
で それを区間 p : 0 → π/2 まで積分して 求めました。(p = φ)

 

計算結果は

となります。

 


手計算はあきらめてインターネットで答えを探してばっかりだったのですが まてよと思い試してみると さくっです。ツールは使い方が大切なんだなぁと、つくづく思いました。

 

φ を使うと表示がずれたので プログラムは p を使いました。

 

 

次回は 級数解 を取り上げます。