public ImplicitConvDiffSolver(ConvDiffProblem problem, double hx) { this.hx = hx; this.Nx = (int)(problem.L / hx + 1E-6); this.ht = hx / Math.Abs(problem.a) / 2.0; this.problem = problem; }
public static void ConvDiff() { do { Console.Write("h = "); var h = double.Parse(Console.ReadLine()); Console.Write("L = "); var L = double.Parse(Console.ReadLine()); Console.Write("J = "); var J = int.Parse(Console.ReadLine()); var convProblem = new ConvDiffProblem() { a = 20, L = L, f = (x, t) => Math.Cos(x) * Math.Sin(t), psi = (t) => t, U0 = (x) => Math.Sin(x * Math.PI / L) }; int needLayer = J; double maxFail = 0.0D; var explicitSolver = new ExplicitConvDiffSolver(convProblem, h); var implicitSolver = new ImplicitConvDiffSolver(convProblem, h); var expl = explicitSolver.Solve(needLayer); if (expl == null) { Console.WriteLine("Условия согласования не выполнены"); return; } var impl = implicitSolver.Solve(needLayer); Console.WriteLine("Layer # {0}\nExplicit: Implicit: Failure", needLayer); for (int i = 0; i < expl.X.Length; i++) { Console.WriteLine("{0:F8} | {1:F8} | {2:F8}", expl[i], impl[i], Math.Abs(expl[i] - impl[i])); maxFail = Math.Max(maxFail, Math.Abs(expl[i] - impl[i])); } Console.WriteLine("\nMaximal fail = {0:F6}", maxFail); Console.WriteLine(new string('-', 50) + Environment.NewLine); } while (true); }