using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace TaskV5 { class Program { private static List X; private static List C; private static List Ln; private static List Sn; private static List F; private static List Z; private static decimal Y; private static decimal e; private static decimal eps; private static decimal En; private static int n; static void Main(string[] args) { decimal a = 0.4M; decimal b = 4; decimal h = 0.2M; e = 10E-7M; eps = 10E-5M; Y = 0.577215M; #region Task 1 X = new List(); for (decimal i = a; i <= b; i += h) { X.Add(i); } n = X.Count; C = new List(); foreach (decimal Xi in X) { C.Add(GetCi(Xi)); } StreamWriter writer = File.CreateText("data.txt"); writer.WriteLine("X"); for (int i = 0; i < n; i++) { writer.WriteLine(X[i]); } writer.WriteLine("C"); for (int i = 0; i < n; i++) { writer.WriteLine(C[i]); } #endregion #region Task 2 Ln = new List(); for (int i = 0; i < n; i++) { Ln.Add(GetLn(X[i], i)); } List Ex = new List(); for (int i = 0; i < n; i++) { Ex.Add(Math.Abs(GetCi(X[i] - 0.1M) - GetLn(X[i] - 0.1M, i))); } writer.WriteLine("Ex"); for (int i = 0; i < n; i++) { writer.WriteLine(Ex[i]); } Ex.Sort(); En = Ex[Ex.Count - 1]; writer.WriteLine("En = {0}", En); writer.WriteLine("Ln"); for (int i = 0; i < n; i++) { writer.WriteLine(Ln[i]); } #endregion #region Task 3 Sn = new List(); for (int i = 0; i < n; i++) { Sn.Add(GetSumS(X[i])); } writer.WriteLine("Sn"); for (int i = 0; i < n; i++) { writer.WriteLine(Sn[i]); } #endregion #region Task 4 F = new List(); for (int i = 0; i < n; i++) { F.Add(GetF(i)); } Z = new List(); for (int i = 0; i < n; i++) { Z.Add(GetZ(i)); } writer.WriteLine("F"); for (int i = 0; i < n; i++) { writer.WriteLine(F[i]); } writer.WriteLine("Z"); for (int i = 0; i < n; i++) { writer.WriteLine(Z[i]); } #endregion writer.Close(); Console.Read(); } private static decimal GetCi(decimal Xi) { decimal Ci; decimal S = 0; decimal a = (-1) * Xi * Xi / 4; decimal q = (-2) * Xi * Xi * n / ((2 * n + 2) * (2 * n + 2) * (2 * n + 1)); while (Math.Abs(a) > e) { S += a; a *= q; } Ci = Y + (decimal)Math.Log10((double)Xi) + S; return Ci; } private static decimal GetLn(decimal Xi, int k) { decimal Ln = 0; for (int i = 0; i <= k; i++) { decimal A = 1; for (int j = 0; j <= k; j++) { if (i != j) { A *= (Xi - X[j]) / (X[i] - X[j]); } } Ln += C[i] * A; } return Ln; } private static decimal GetSumS(decimal Xi) { int N = 2; while (Math.Abs(GetSN(Xi, N) - GetSN(Xi, 2 * N)) > eps) { N *= 2; } return GetSN(Xi, 2 * N); } private static decimal GetSN(decimal Xi, int N) { decimal H = Xi / N; decimal S = 0; for (int i = 1; i <= N; i++) { decimal Z = (2 * i - 1) * H / 2; S += H * ((decimal)Math.Cos((double)Z) - 1) / Z; } return S; } private static decimal GetF(int i) { decimal Fi; Fi = C[0] + i * (C[n - 1] - C[0]) / n; return Fi; } private static decimal GetZ(int i) { decimal z0 = X[i]; decimal z1 = z0 - GetG(z0, i) * (decimal)Math.Cos((double)z0) / z0; decimal zk = z0; decimal zk1 = z1; while (Math.Abs(zk1 - zk) > eps) { decimal zk2 = zk1 - (GetG(zk1, i) * (zk1 - zk)) / (GetG(zk1, i) - GetG(zk, i)); zk = zk1; zk1 = zk2; } return zk1; } private static decimal GetG(decimal z, int i) { decimal G; decimal S = 0; decimal a = (-1) * z * z / 4; decimal q = (-2) * z * z * n / ((2 * n + 2) * (2 * n + 2) * (2 * n + 1)); while (Math.Abs(a) > e) { S += a; a *= q; } G = S - F[i]; return G; } } }