Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //module lab1
- open System
- open System.Net
- open System.IO
- open System.Collections.Specialized
- // почтовый адрес
- let email = "nikitayusupov@gmail.com"
- // общий тип для возвращаемых вашими функциями значений, где первая часть кортежа это само значение функции, вторая - кол-во операций
- type Result = float * int
- let delta = 1e-10
- // *** Первая часть
- let fTailor x : float = Math.Exp(Math.Cos(x)) * Math.Cos(Math.Sin(x)) // функция, которую раскладываем
- let n, a, b = 20., 0.1, 0.6 // интервал
- let tailor x : Result =
- let rec tailor' (n:int) acc (prevFactorial:float): Result =
- let nextCoefficient = Math.Cos((float)n * x) / ((prevFactorial * (float)n))
- if abs(nextCoefficient) < delta then ((acc + nextCoefficient), n)
- else tailor' (n + 1) (acc + nextCoefficient) ((float)n * prevFactorial)
- tailor' 1 1.0 1.0
- let tailorA x : Result =
- let factorial n =
- let rec factorial' (n:int) (acc:float) =
- if n = 0 then acc
- else factorial' (n - 1) (acc * (float)n)
- factorial' n 1.0
- let coefficient n = Math.Cos((float)n * x) / (float)(factorial n)
- let rec tailorA' (n:int) acc : Result =
- let nextCoefficient = coefficient n
- if abs(nextCoefficient) < delta then ((acc + nextCoefficient), n)
- else tailorA' (n + 1) (acc + nextCoefficient)
- tailorA' 0 0.0
- let printTailor () =
- [a .. (b-a)/n .. b]
- |> List.map (fun x -> let (firstRes, firstCou), (secondRes, secondCou) = tailor x, tailorA x in (x, firstRes, firstCou, secondRes, secondCou, fTailor x))
- |> 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 )
- // *** Вторая часть
- let a' = 1.
- let b' = 3.
- let fSolve = fun x -> Math.Sin(Math.Log(x))-Math.Cos(Math.Log(x)) + 2. * Math.Log(x) // функция, решение которой ищем
- let fDerivative f x = (f (x + delta) - f(x)) / delta
- let iter f a b : Result =
- let lambda_0 = 1. / (fDerivative f ((a+b) / 2.))
- let rec iter' cnt prevX : Result =
- let nextX = prevX - lambda_0 * (f prevX)
- if abs(nextX - prevX) < delta then (nextX, cnt)
- else iter' (cnt + 1) nextX
- iter' 0 ((a + b) / 2.)
- let newton f a b : Result =
- let rec newton' cnt prevX : Result =
- let nextX = prevX - (f prevX) / (fDerivative f prevX)
- if abs(nextX - prevX) < delta then (nextX, cnt)
- else newton' (cnt + 1) nextX
- newton' 0 ((a + b) / 2.)
- let dichotomy =
- let rec dichotomyA i (f:float->float) (a:float) (b:float) : Result =
- let mid = (a + b) / 2.
- if b - a < delta then (mid, i)
- else if f(a) * f(mid) < 0. then dichotomyA (i + 1) f a mid
- else dichotomyA (i + 1) f mid b
- dichotomyA 0
- let main () =
- let values = new NameValueCollection()
- values.Add("email", email)
- values.Add("content", File.ReadAllText(__SOURCE_DIRECTORY__ + @"/" + __SOURCE_FILE__))
- let client = new WebClient()
- let response = client.UploadValues(new Uri("http://91.239.142.110:13666/lab1"), values)
- let responseString = Text.Encoding.Default.GetString(response)
- printf "%A\n" responseString
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement