Ejemplo n.º 1
0
        static double[] Zeid(Eq equat)
        {
            if (equat.IsDP() == true && equat.IsPO() == true)
            {
                double[] x1 = new double[equat.n];
                double   eps = 0, eps0 = Math.Abs((1 - equat.norm) / equat.norm) * 0.0001;

                do
                {
                    for (int i = 0; i < equat.n; i++)
                    {
                        x1[i] = equat.x[i];
                    }

                    for (int i = 0; i < equat.n; i++)
                    {
                        double sum = 0;
                        for (int j = 0; j < i; j++)
                        {
                            sum += equat.matr[i, j] * equat.x[j];
                        }
                        for (int j = i + 1; j < equat.n; j++)
                        {
                            sum += equat.matr[i, j] * x1[j];
                        }
                        equat.x[i] = (equat.b[i] - sum) / equat.matr[i, i];
                    }
                    eps = 0;
                    for (int i = 0; i < equat.n; i++)
                    {
                        eps += Math.Abs(equat.x[i] - x1[i]);
                    }
                } while (eps > eps0);
            }
            return(equat.x);
Ejemplo n.º 2
0
        static double[] Gauss(Eq equat)
        {
            double[,] m = new double[equat.n, equat.n];
            for (int i = 0; i < equat.n; i++)
            {
                for (int j = 0; j < equat.n; j++)
                {
                    m[i, j] = equat.matr[i, j];
                }
            }
            double d = Eq.Det(m);

            if (d != 0)
            {
                equat.Diag();
                for (int i = equat.n - 1; i >= 0; i--)
                {
                    double sum = 0;
                    for (int j = equat.n - 1; j > i; j--)
                    {
                        sum += equat.x[j] * equat.matr[i, j];
                    }
                    equat.x[i] = (equat.b[i] - sum) / equat.matr[i, i];
                }
            }
            return(equat.x);
        }
Ejemplo n.º 3
0
        public bool IsPO()
        {
            bool isPO = true;

            for (int i = 1; i <= n; i++)
            {
                double[,] temp = new double[i, i];
                for (int j = 0; j < i; j++)
                {
                    for (int k = 0; k < i; k++)
                    {
                        temp[j, k] = matr[j, k];
                    }
                }
                double det = Eq.Det(temp);
                if (det > 0)
                {
                    continue;
                }
                else
                {
                    isPO = false;
                    break;
                }
            }
            return(isPO);
        }
Ejemplo n.º 4
0
        public static double Det(double[,] ma)
        {
            double det = 1;

            double[] b = new double[(int)Math.Sqrt(ma.Length)];

            Eq q = new Eq(ma, b);

            q.Diag();

            for (int i = 0; i < q.n; i++)
            {
                det *= q.matr[i, i];
            }

            return(det);
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            int k = 4;
            Eq  equat;

            Console.WriteLine("Введите размерность матрицы");
            int n = int.Parse(Console.ReadLine());

            double[,] matr = new double[n, n];
            double[] b = new double[n];

            Console.WriteLine("Меню:\n 1) Задать произвольную матрицу \n 2) Задать матрицу из примера");
            int s = int.Parse(Console.ReadLine());

            switch (s)
            {
            case 1:
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        Console.WriteLine("Введите элемент матрицы {0}-{1} :", i, j);
                        matr[i, j] = double.Parse(Console.ReadLine());
                    }
                }
                for (int i = 0; i < n; i++)
                {
                    Console.WriteLine("Введите элемент столбца {0} :", i);
                    b[i] = double.Parse(Console.ReadLine());
                }
                break;

            case 2:
                k = 4;

                for (int i = 0; i < n; i++)
                {
                    b[i] = 15 + k;
                    k   += 2;
                }

                k = 2;

                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        if (i == j)
                        {
                            matr[i, j] = 15 + k;
                            k         += 2;
                        }
                        else
                        {
                            matr[i, j] = 1;
                        }
                    }
                }

                break;
            }

            equat = new Eq(matr, b);

            Console.WriteLine("Матрица:");
            for (int i = 0; i < equat.n; i++)
            {
                for (int j = 0; j < equat.n; j++)
                {
                    Console.Write("{0}\t", equat.matr[i, j]);
                }
                Console.WriteLine();
            }

            Console.WriteLine("Cтолбец:");
            foreach (double i in equat.b)
            {
                Console.WriteLine(i);
            }

            Console.WriteLine("*************************************************");
            Console.WriteLine("Методы: \n1)Гаусс \n2)Зейдель \n3)МПИ");
            s = int.Parse(Console.ReadLine());

            switch (s)
            {
            case 1:
                equat.x = Gauss(equat);
                break;

            case 2:
                equat.x = Zeid(equat);
                break;

            case 3:
                equat.x = MPI(equat);
                break;
            }

            Console.WriteLine("Решение:");
            foreach (double i in equat.x)
            {
                Console.WriteLine(i);
            }

            Console.ReadKey();
        }