Pythonで書いたシンプソン積分をScalaでも書いてみたのだけどfor yieldで総和を求めるやり方が分からなかったので(RandomAccessSeq.Projectionとかいうのが出た)結局var変数で。
def simpson(f: Double => Double, a: Double, b: Double, n: Int): Double = {
val h = (b - a)/n
var sum = 0.0
for (i <- 0 to n-1) {
sum = sum + f(a+i*h) + 4.0 * f(a+i*h+h/2) + f(a+i*h+h)
}
sum * h / 6
}
def func(x: Double): Double = {
1.0 / (1 + Math.pow(x,2))
}
実行
scala> simpson(func, 0, 1, 1000)
res24: Double = 0.7853981633974496
Int,Double,Floatとかの型の使い方もいまいちわかってないな。