public virtual IterativeResult Solve(ISystemEquations systemEquations, double eps = 0.001)
        {
            var result = new IterativeResult();
            var size = systemEquations.Matrix.GetLength(0);
            double[,] alpha;
            double[] beta;
            Transform(systemEquations.Matrix, systemEquations.B.ToArray(), size, out alpha, out beta);

            if (alpha.Norm() > 1.0)
            {
                return null;
            }

            double epsK;
            var px = beta;
            do
            {
                result.X = GetX(alpha, beta, px);
                epsK = (alpha.Norm() / (1.0 - alpha.Norm())) * DifferentAbs(result.X, px).Max();
                result.CountIterations++;
                px = result.X;
            }
            while (epsK > eps);

            return result;
        }
        public DirectResult SolveSystem(ISystemEquations systemEquations, DirectMethod methods)
        {
            switch (methods)
            {
                case DirectMethod.Tridiag:
                    return new TridiagonalMethod((TridiagonalSystemEquations)systemEquations).Solve();

                case DirectMethod.Gauss:
                    return new Gauss((DefaultSystemEquations)systemEquations).Solve();

                default:
                    return null;
            }
        }
        public IterativeResult SolveSystem(ISystemEquations systemEquations, IterativeMethod method, double eps = 0.001)
        {
            switch (method)
            {
                case IterativeMethod.SimpleIterations:
                    // todo выполнить проверку на возможность приведения к типу
                    return
                        new SimpleIterationsMethod(systemEquations, eps).Solve();

                case IterativeMethod.Seidel:
                    return new SeidelMethod(systemEquations, eps).Solve();

                default:
                    return null;
            }
        }
Beispiel #4
0
 public SeidelMethod(ISystemEquations systemEq, double e)
 {
     systemEquations = systemEq;
     eps = e;
     size = systemEquations.Matrix.GetLength(0);
 }
 public SimpleIterationsMethod(ISystemEquations systemEq, double e)
 {
     systemEquations = systemEq;
     eps = e;
     size = systemEquations.Matrix.GetLength(0);
 }
 public IEnumerable<DirectResult> SolveSystem(ISystemEquations systemEquations, IEnumerable<DirectMethod> methods)
 {
     return methods.Select(directMethod => SolveSystem(systemEquations, directMethod));
 }
 public IEnumerable<IterativeResult> SolveSystem(ISystemEquations systemEquations, IEnumerable<IterativeMethod> methods, double eps = 0.001)
 {
     return methods.Select(iterativeMethod => SolveSystem(systemEquations, iterativeMethod, eps));
 }