【问题标题】:area under the curve programatically in scala在scala中以编程方式曲线下的面积
【发布时间】:2016-01-26 12:35:33
【问题描述】:

我正在尝试求解示例 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))

【问题讨论】:

标签: scala integral


【解决方案1】:

我猜问题在于build_points(deltaX, 5, List(0.0f)) 返回一个包含 6 个元素而不是 5 个元素的列表。问题是您传递的列表开头只有一个元素,我猜您想要的一个空列表,例如

build_points(deltaX, sub, Nil)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多