Advertisement
Guest User

Taylor

a guest
Oct 1st, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.47 KB | None | 0 0
  1. // Итерирование (хвостовая рекурсия)
  2. let iter f i a b =
  3.     let rec iter' a acc =
  4.          if a > b then acc
  5.          else iter' (a+1) (f a acc)
  6.     iter' a i
  7.  
  8. // Функция возведения в степень
  9. let pow x n = iter (fun _ acc -> x*acc) 1. 1 n
  10.  
  11. // function to compute (вариант №14)
  12. let f x = ((x*2. - 3.)/(pow (x - 1.) 2))
  13. let a = 0.1
  14. let b = 0.6
  15. let n = 10
  16.  
  17. // Реализация Тейлора в "лоб"
  18. let taylor_naive x = iter (fun i acc -> acc - (float(i) + 3.)*(float(pow x (int i)))) 0. 0 50
  19.  
  20. // Функция для получения i-ого элемента ряда тейлора
  21. let taylorElem x i = (float(i) + 3.)*(float(pow x (int i)))
  22.  
  23. // Константа для определения точности
  24. let epsilon = 0.00000001
  25.  
  26. // Зависимость текущего элемента от предыдущего, X(n = F(X(n-1))
  27. let taylorDependence i prev x = ((i + 3.)/(i + 2.))*prev*x
  28.  
  29. // Эффективная реализация Тейлора
  30. let taylor x =
  31.        let rec evaluateNext prev acc i =
  32.             if((taylorElem x i) > epsilon)
  33.                       then evaluateNext (taylorDependence i prev x) (acc + taylorDependence i prev x) (i+1.)
  34.             else acc
  35.        evaluateNext -3. -3. 1.
  36.  
  37. let main =
  38.   for i=0 to n do
  39.     let x = a+(float i)/(float n)*(b-a)
  40.     printfn "%5.2f  %10.6f  %10.6f   %10.6f" x (f x) (taylor_naive x) (taylor x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement