public TwoDImplicitParabolicSolver(TwoDParabolicProblem parabolicProblem) { problem = parabolicProblem; h = problem.H; L = problem.L; M = problem.M; I = (int)(L / h); J = (int)(M / h); tau = (h * h) / 4.0; }
public static void Rotate() { do { Console.Write("h = "); var h = double.Parse(Console.ReadLine()); Console.Write("L = "); var L = double.Parse(Console.ReadLine()); Console.Write("M = "); var M = double.Parse(Console.ReadLine()); Console.Write("J = "); var J = int.Parse(Console.ReadLine()); var parabolicProblem = new TwoDParabolicProblem() { H = h, L = L, M = M, Fi = (x, y) => (2 * L) + y, Psi1 = (y, t) => y + t + (2 * L), Psi2 = (y, t) => (2 * L) + t + y, Psi3 = (x, t) => 2 * L, Psi4 = (x, t) => (2 * L) + M }; var parabolicSolver = new TwoDSplitParabolicRotateSolver(parabolicProblem, Math.PI / 4.0); var parabolicSolver1 = new TwoDExplicitParabolicRotateSolver(parabolicProblem, Math.PI / 4.0); //var parabolicSolver2 = new TwoDImplicitParabolicSolver(parabolicProblem); var ans = parabolicSolver.Solve(J); var ans1 = parabolicSolver1.Solve(J); //var ans2 = parabolicSolver2.Solve(J); if (ans == null) { Console.WriteLine("Условия согласования не выполнены"); } else { var maxFail = 0.00; Console.WriteLine("Layer # {0}", ans.Number); Console.WriteLine("Explicit: Split: Failure(Splitting and Explicit):"); for (int i = 0; i < ans.Xy.GetLength(0); i++) { for (int j = 0; j < ans.Xy.GetLength(1); j++) { Console.WriteLine("{0:F6} | {1:F6} | {2:F6} |", ans1[i, j], ans[i, j], Math.Abs(ans1[i, j] - ans[i, j])); maxFail = Math.Max(maxFail, Math.Abs(ans1[i, j] - ans[i, j])); } } Console.WriteLine("Max Fail = {0:F6}", maxFail); } } while (true); }