Advertisement
DestBro

Metoda Coardei de pe Wiki

Feb 25th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.54 KB | None | 0 0
  1. //https://ro.wikipedia.org/wiki/Metoda_coardei
  2. package LL2
  3.  
  4. class Interval(val a1: Double, val b1: Double)
  5.  
  6. val intervals = mutableListOf<Interval>()
  7.  
  8. fun F(x: Double) = (x * x * x) - (4 * x) - 2
  9.  
  10. fun main(args: Array<String>) {
  11.     intervals.add(Interval(-1.67578125, -1.671875))
  12.     intervals.add(Interval(-0.54296875, -0.5390625))
  13.     intervals.add(Interval(2.2109375, 2.21484375))
  14.  
  15.     val solutiileFunctiei = intervalsToSolutions(intervals)
  16.  
  17.     println("\nSoluţiile funcţiei sunt: ")
  18.     solutiileFunctiei.forEachIndexed { index, d ->
  19.         println("$index) $d")
  20.     }
  21. }
  22.  
  23. /**
  24.  * Transformă lista de intervalele în listă de soluţii.
  25.  * */
  26. fun intervalsToSolutions(list_i: MutableList<Interval>) = list_i.map { calcSolutionFromInterval(it) }
  27.  
  28. /**
  29.  * Cercetează un interval şi returnează soluţia găsită pe acesta.
  30.  * */
  31. fun calcSolutionFromInterval(inter: Interval): Double {
  32.  
  33.     var a: Double = inter.a1
  34.     var b: Double = inter.b1
  35.     var i = 0
  36.     var x0 = a
  37.     var x1 = b
  38.     var x = x0
  39.     var y = F(x)
  40.  
  41.     val eps = 0.0001
  42.     val iter = 200
  43.  
  44.     if (F(x0) * F(x1) < 0) {
  45.         while ((i <= iter) && ((y < -eps) || (y > eps))) {
  46.             x = x0 - F(x0) * (x1 - x0) / (F(x1) - F(x0))
  47.             y = F(x)
  48.             if (F(x0) * y < 0) x1 = x else x0 = x
  49.             print("x = $x    ")
  50.             println("f($x) = ${F(x)}")
  51.             i++
  52.         }
  53.         if (i > iter) println("Problema nu se poate rezolva in nr.maxim de iteratii")
  54.     } else println("Interval invalid")
  55.     return x
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement