• ベストアンサー

楕円周長の数値積分のエクセルVBAのコード

本日、楕円積分で質問をいくつかしてしまい、疲れて、結果エクセル VBAで検証したくなりました。 そこでSimpsonの公式を利用した f(θ) = ∫{0~π/2} √{1 - k^2 sin^2 θ} dθ (1/4楕円の周長) のエクセルVBAのコード例をどなたか作成していただけないでしょうか。 同時にd^4(f(θ))/dθ^4 の計算結果をご教示お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • age_momo
  • ベストアンサー率52% (327/622)
回答No.1

質問として成立しているかどうか怪しいですが、 プログラム自体は簡単ですから作ってみました。 mainのところの長径、短径を1,1で計算してみましたが、 2πとの誤差は10^-10以下でしたので、これそのものはあっていると 思います。 Option Explicit Private Function daen(sita As Double, k As Double) As Double daen = (1 - k * (Sin(sita)) ^ 2) ^ 0.5 End Function Sub test() Const bunkatu = 512 Const pai = 3.14159265358979 Const chokei = 8 Const tankei = 6 Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim hiritu As Double hiritu = 1 - (tankei / chokei) ^ 2 For ct = 0 To bunkatu If ct = 0 Or ct = bunkatu Then keisu = 1 ElseIf ct Mod 2 = 0 Then keisu = 2 Else keisu = 4 End If sum = sum + daen(pai / 2 / bunkatu * ct, hiritu) * keisu Next sum = sum / bunkatu / 3 * 4 * chokei * pai / 2 MsgBox (sum) End Sub

catshoes01
質問者

補足

うわーー大変感謝です。 ついでにどなたか f(θ) = ∫{0~π/2} √{1 - k^2 sin^2 θ} dθ について d^4(f(θ))/dθ^4 を 解いていただけないものでしょうか。 現在上のf(θ)の級数展開式をエクセルVBAで組んでいます。 これと比較して数値が一致するようでしたら即採用予定です。

その他の回答 (1)

  • age_momo
  • ベストアンサー率52% (327/622)
回答No.2

やっとwikiが見れました。(こちら中国じゃ、串指さないとwikiにアクセスできないんで) >現在上のf(θ)の級数展開式をエクセルVBAで組んでいます。 こちらのプログラムの方が更に簡単ですよ。載せておきます。 (2n-1)!!/2n!!は逐次計算の際にそれぞれをかけていけば簡単に解決できます。 Sub daenshu() Const chokei = 8# Const tankei = 6# Const pai = 3.14159265358979 Dim ct As Integer Dim risin As Double Dim dExcl As Double Dim sum As Double risin = 1 - (tankei / chokei) ^ 2 dExcl = 1# sum = 1# For ct = 1 To 100 dExcl = dExcl * (2 * ct - 1) ^ 2 / 4 / ct ^ 2 sum = sum - risin ^ ct / (2 * ct - 1) * dExcl Next sum = sum * pai * 2 * chokei MsgBox (sum) End Sub

catshoes01
質問者

お礼

ほんとうにありがとうございました。別の方法の下記式と結果が 見事に一致しました。おそらく、楕円の周長計算の方法に決定打 が出たと思います。当方の確認式です。 h1=(a-b) h2=(a+b) L=PI()*h2*(1+(h1/h2)^2/4+(h1/h2)^4/64+(h1/h2)^6/256 L=44.20698431

関連するQ&A