область под кривой программно в scala

я пытаюсь найти площадь под кривой примера 1: http://tutorial.math.lamar.edu/Classes/CalcI/AreaProblem.aspx

f (x) = x ^ 3 - 5x ^ 2 + 6x + 5 и ось x n = 5

ответы говорят, что это: 25,12, но я получаю немного меньше: 23,78880035448074

что я делаю не так??

вот мой код:

import scala.math.BigDecimal.RoundingMode

def summation(low: Int, up: Int, coe: List[Int], ex: List[Int]) = {

def eva(coe: List[Int], ex: List[Int], x: Double) = {
  (for (i <- 0 until coe.size) yield coe(i) * math.pow(x,ex(i))).sum

}


@annotation.tailrec
def build_points(del: Float, p: Int, xs : List[BigDecimal]): List[BigDecimal] = {
  if(p <= 0 ) xs map { x => x.setScale(3, RoundingMode.HALF_EVEN)}
  else build_points(del, p - 1, ((del * p):BigDecimal ):: xs)
}

  val sub = 5
  val diff = (up - low).toFloat
  val deltaX = diff / sub
  val points = build_points(deltaX, sub, List(0.0f)); println(points)
  val middle_points =
    (for (i <- 0 until points.size - 1) yield (points(i) + points(i + 1)) / 2)


  (for (elem <- middle_points) yield deltaX * eva(coe,ex,elem.toDouble)).sum

}
val coe = List(1,-5,6,5)
val exp = List(3,2,1,0)
print(summation(0,4,coe,exp))

person matos416    schedule 26.01.2016    source источник
comment
Дополнительное примечание: см. также stackoverflow.com/questions/588004/   -  person jub0bs    schedule 26.01.2016


Ответы (1)


Я предполагаю, что проблема в том, что проблема в том, что build_points(deltaX, 5, List(0.0f)) возвращает список с 6 элементами вместо 5. Проблема в том, что вы передаете список с одним элементом в начале, где я предполагаю, что вам нужен пустой список, например

build_points(deltaX, sub, Nil)
person Martin Kolinek    schedule 26.01.2016