定積分の値の近似値を台形公式により求めて返す関数
GoGolangで、定積分の値の近似値を台形公式により求めて返す関数を作成しました。
プログラム中の integrate
という関数が定積分の値を求める関数です。引数として、定積分する関数と、定積分の区間を渡します。引数として渡す関数は、その引数も返す値も float64
型です。その上の N_SUBINTERVAL
という定数を大きくするほど近似の精度が上がり、実行速度は遅くなります。例として、答えが π になる定積分を求めています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package main import ( "fmt" "math" ) // 引数の関数の x1 から x2 までの定積分の値の近似値を台形公式により求めて返す関数 // (エラーチェックなし) // https://ja.wikipedia.org/wiki/%E5%8F%B0%E5%BD%A2%E5%85%AC%E5%BC%8F const N_SUBINTERVAL = 1000 // 大きくするほど積分の精度がよくなる func integrate(f func(float64) float64, x1, x2 float64) float64 { if x1 == x2 { return 0 } step := ((x2 - x1) / N_SUBINTERVAL) sum := 0.5 * f(x1) x := x1 for i := 1; i < N_SUBINTERVAL; i++ { x += step sum += f(x) } sum += 0.5 * f(x2) return sum * step } // f(x) = 4 * (1-x^2)^(1/2) func testfunc(x float64) float64 { return 4 * math.Sqrt(1-math.Pow(x, 2)) } func main() { // answer equals pi. fmt.Printf("ans = %v\n", integrate(testfunc, 0, 1)) } |
実行すると、以下の出力を得ます。
1 2 |
$ go run integral.go ans = 3.141555466911022 |
参考文献
- 「プログラミング言語Go」 Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)