Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 3.29 KB | None | 0 0
  1. //module lab1
  2.  
  3. open System
  4. open System.Net
  5. open System.IO
  6. open System.Collections.Specialized
  7.  
  8. // почтовый адрес
  9. let email = "nikitayusupov@gmail.com"
  10. // общий тип для возвращаемых вашими функциями значений, где первая часть кортежа это само значение функции, вторая - кол-во операций
  11. type Result = float * int
  12. let delta = 1e-10
  13.  
  14. // *** Первая часть
  15.  
  16. let fTailor x : float = Math.Exp(Math.Cos(x)) * Math.Cos(Math.Sin(x)) // функция, которую раскладываем
  17. let n, a, b = 20., 0.1, 0.6 // интервал
  18.  
  19. let tailor x : Result =
  20.     let rec tailor' (n:int) acc (prevFactorial:float): Result =
  21.        let nextCoefficient = Math.Cos((float)n * x) / ((prevFactorial * (float)n))
  22.        if abs(nextCoefficient) < delta then ((acc + nextCoefficient), n)
  23.        else tailor' (n + 1) (acc + nextCoefficient) ((float)n * prevFactorial)
  24.     tailor' 1 1.0 1.0
  25. let tailorA x : Result =
  26.    let factorial n =
  27.        let rec factorial' (n:int) (acc:float) =
  28.             if n = 0 then acc
  29.             else factorial' (n - 1) (acc * (float)n)
  30.        factorial' n 1.0
  31.     let coefficient n = Math.Cos((float)n * x) / (float)(factorial n)
  32.     let rec tailorA' (n:int) acc : Result =
  33.        let nextCoefficient = coefficient n
  34.        if abs(nextCoefficient) < delta then ((acc + nextCoefficient), n)
  35.        else tailorA' (n + 1) (acc + nextCoefficient)
  36.     tailorA' 0 0.0
  37.  
  38. let printTailor () =
  39.    [a .. (b-a)/n .. b]
  40.    |> List.map (fun x -> let (firstRes, firstCou), (secondRes, secondCou) = tailor x, tailorA x in (x, firstRes, firstCou, secondRes, secondCou, fTailor x))
  41.    |> List.iter (fun (a,b,c,d,e,f) -> printf "%f\t%f\t%d\t%f\t%d\t%f\n" a b c d e f )
  42.  
  43. // *** Вторая часть
  44.  
  45. let a' = 1.
  46. let b' = 3.
  47. let fSolve = fun x -> Math.Sin(Math.Log(x))-Math.Cos(Math.Log(x)) + 2. * Math.Log(x) // функция, решение которой ищем
  48.  
  49. let fDerivative f x = (f (x + delta) - f(x)) / delta
  50.  
  51. let iter f a b : Result =
  52.    let lambda_0 = 1. / (fDerivative f ((a+b) / 2.))
  53.    let rec iter' cnt prevX : Result =
  54.         let nextX = prevX - lambda_0 * (f prevX)
  55.         if abs(nextX - prevX) < delta then (nextX, cnt)
  56.         else iter' (cnt + 1) nextX
  57.    iter' 0 ((a + b) / 2.)
  58. let newton f a b : Result =
  59.     let rec newton' cnt prevX : Result =
  60.        let nextX = prevX - (f prevX) / (fDerivative f prevX)
  61.        if abs(nextX - prevX) < delta then (nextX, cnt)
  62.        else newton' (cnt + 1) nextX
  63.     newton' 0 ((a + b) / 2.)
  64. let dichotomy =
  65.    let rec dichotomyA i (f:float->float) (a:float) (b:float) : Result =
  66.        let mid = (a + b) / 2.
  67.        if b - a < delta then (mid, i)
  68.        else if f(a) * f(mid) < 0. then dichotomyA (i + 1) f a mid
  69.        else dichotomyA (i + 1) f mid b
  70.    dichotomyA 0
  71.  
  72. let main () =
  73.  let values = new NameValueCollection()
  74.  values.Add("email", email)
  75.  values.Add("content", File.ReadAllText(__SOURCE_DIRECTORY__ + @"/" + __SOURCE_FILE__))
  76.  
  77.  let client = new WebClient()
  78.  let response = client.UploadValues(new Uri("http://91.239.142.110:13666/lab1"), values)
  79.  let responseString = Text.Encoding.Default.GetString(response)
  80.  
  81.  printf "%A\n" responseString
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement