예제 #1
0
        List <int> GetCoefficient(MatrixOp matrix)
        {
            int        count         = 0;
            List <int> myCoefficient = new List <int>();

            for (int i = 0; i < matrix.Row; i++)
            {
                for (int j = 0; j < matrix.Col; j++)
                {
                    if (matrix[i, j] > 0)
                    {
                        count++;
                    }
                }
                myCoefficient.Add(count);
                count = 0;
            }
            return(myCoefficient);
        }
예제 #2
0
        /// <summary>
        /// Умножение текущей матрицы с матрицей А
        /// </summary>
        /// <param name="matrix">Матрица А</param>
        public void Multyply(MatrixOp matrix)
        {
            if (!Col.Equals(matrix.Row))
            {
                throw new Exception("Матрицы нельзя перемножить");
            }

            int[,] _result = new int[Row, matrix.Col];

            for (int i = 0; i < Row; i++)
            {
                for (int j = 0; j < matrix.Col; j++)
                {
                    for (int k = 0; k < matrix.Row; k++)
                    {
                        _result[i, j] += this[i, k] * matrix[k, j];
                    }
                }
            }

            _matrix = _result;
        }
예제 #3
0
        void calcMatr()
        {
            int size = Math.Max(TopEl.Count(), LeftEl.Count());

            Matrix_A       = new MatrixOp(size, size, "Матрица_A");
            Matrix_AT      = new MatrixOp(size, size);
            MultyplyMatrix = new MatrixOp(size, size, "Умножение A * AT");

            for (int i = 0; i < LeftEl.Count; i++)
            {
                for (int j = 0; j < LeftEl[i].to.Count; j++)
                {
                    int value = TopEl.IndexOf(LeftEl[i].to[j]);
                    Matrix_A[value, i] = 1;
                }
            }
            Matrix_AT      = Matrix_A.Transperate();      //Транспонируем матрицу
            Matrix_AT.Name = "Матрица_AT";                //Даем имя

            MultyplyMatrix.Multyply(Matrix_A, Matrix_AT); //Перемножение матриц

            GetCountCollision(MultyplyMatrix);            //Создаем матрицу коллизий т.е. где эл наши встречаются
            //------------------------------------------------------------------------------
            string mystring;

            textBox2.AppendText($"\n{Matrix_A.Name}\n");
            textBox2.AppendText("\t" + string.Join("\t", LeftEl.Select(v => v.name)) + "\n");
            for (int i = 0; i < size; i++)
            {
                mystring = TopEl[i] + "\t";
                for (int j = 0; j < size; j++)
                {
                    mystring += Matrix_A[i, j] + "\t";
                }
                textBox2.AppendText(mystring + "\n");
            }
            //------------------------------------------------------------------------------
            textBox2.AppendText($"\n{Matrix_AT.Name}\n");
            textBox2.AppendText("\t" + string.Join("\t", LeftEl.Select(v => v.name)) + "\n");
            for (int i = 0; i < size; i++)
            {
                mystring = TopEl[i] + "\t";
                for (int j = 0; j < size; j++)
                {
                    mystring += Matrix_AT[i, j] + "\t";
                }
                textBox2.AppendText(mystring + "\n");
            }
            //------------------------------------------------------------------------------
            textBox2.AppendText($"\n{MultyplyMatrix.Name}\n");
            textBox2.AppendText("\t" + string.Join("\t", LeftEl.Select(v => v.name)) + "\n");
            for (int i = 0; i < size; i++)
            {
                mystring = TopEl[i] + "\t";
                for (int j = 0; j < size; j++)
                {
                    mystring += MultyplyMatrix[i, j] + "\t";
                }
                textBox2.AppendText(mystring + "\n");
            }
            this.Matrix_A = Matrix_A;
        }