2016-01-26 1 views
0

im essayant de résoudre pour l'aire sous la courbe de l'exemple 1: http://tutorial.math.lamar.edu/Classes/CalcI/AreaProblem.aspxsous la courbe par programmation en rampe

f (x) = x^3 - 5 x^2 + 6x + 5 et x -axis n = 5

les réponses dit qu'il est: 25,12 mais je reçois un peu moins: 23,78880035448074

ce que im-je tort ??

voici mon code:

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)) 
+0

Note latérale: voir aussi http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Jubobs

Répondre

0

Je devine que le problème est que le problème est build_points(deltaX, 5, List(0.0f)) retourne une liste avec 6 éléments au lieu de 5. Le problème est que vous passez une liste avec un élément le début, où je devine que vous vouliez une liste vide, comme

build_points(deltaX, sub, Nil)