Esempio n. 1
0
        private 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);
        }
Esempio n. 2
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);
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        private static double NewtonKotes(double a, double b, int m, int n)
        {
            double h1 = (b - a) / m, res = 0;

            for (int i = 1; i <= m; i++)
            {
                double[] mu = new double[n],
                x = new double[n];
                double[,] matr = new double[n, n];

                double hm = h1 / (n - 1);

                for (int j = 0; j < n; j++)
                {
                    x[j]  = (a + (i - 1) * h1) + j * hm;
                    mu[j] = GetMu(j, -bt, a + i * h1) - GetMu(j, -bt, a + (i - 1) * h1);
                }

                for (int j = 0; j < n; j++)
                {
                    for (int k = 0; k < n; k++)
                    {
                        matr[j, k] = Math.Pow(x[k], j);
                    }
                }

                Eq equat = new Eq(matr, mu);

                double[] coof = Gauss(equat);

                for (int j = 0; j < n; j++)
                {
                    res += coof[j] * func(x[j]);
                }
            }
            return(res);
        }