예제 #1
0
        /// <summary>
        /// Гамма-преобразование над матрицей
        /// </summary>
        /// <returns></returns>
        public BoolMatrix GammaConvertion()
        {
            var n  = this[0].Count;
            var A  = new BoolMatrix(this);
            var A0 = new BoolMatrix();
            var A1 = new BoolMatrix();

            for (var i = 0; i < n; i++)
            {
                A0 = new BoolMatrix(A.Where(item => item[i].Value == "0" || item[i].Value == "-"));
                A1 = new BoolMatrix(A.Where(item => item[i].Value == "1" || item[i].Value == "-"));
                var Ai = new BoolMatrix();

                for (int j = 0; j < A0.Count; j++)
                {
                    A0[j][i] = new MatrixValue("0");
                }
                for (int j = 0; j < A1.Count; j++)
                {
                    A1[j][i] = new MatrixValue("1");
                }
                for (int j = 0; j < A0.Count; j++)
                {
                    var temp = new BoolVector(A0[j]);
                    temp[i] = new MatrixValue("1");
                    Ai.Add(temp);
                }

                A0 = A0.Bonding();
                A1 = A1.Bonding();
                Ai = Ai.Bonding();
                var t0 = A1.Substraction(Ai);
                var t1 = Ai.Substraction(A1);
                var t2 = A0.Union(t0);
                var t3 = t2.Union(t1);
                t3 = t3.Bonding();
                A  = new BoolMatrix(t3);
            }
            return(new BoolMatrix(A));
        }
예제 #2
0
        /// <summary>
        /// Пересечение матриц
        /// </summary>
        /// <param name="matrix"></param>
        /// <returns></returns>
        public BoolMatrix Intersection(BoolMatrix matrix)
        {
            var result = new BoolMatrix();

            for (int i = 0; i < Count; i++)
            {
                foreach (BoolVector t in matrix.Where(t => !this[i].IsOrtogonal(t)))
                {
                    result.Add(this[i].Union(t));
                }
            }
            return(result);
        }