Beispiel #1
0
        public static void MakeMatrixSymetric(this CCS mtx)
        {
            var n = mtx.ColumnCount;

            if (n != mtx.RowCount)
            {
                throw new Exception();
            }


            for (int i = 0; i < n; i++)
            {
                var col = i;

                var st = mtx.ColumnPointers[i];
                var en = mtx.ColumnPointers[i + 1];

                for (int j = st; j < en; j++)
                {
                    var row = mtx.RowIndices[j];



                    var valRowCol = mtx.Values[j];

                    var valColRow = mtx.At(col, row);

                    if (valColRow == valRowCol)
                    {
                        continue;
                    }


                    var avg = (valRowCol + valColRow) / 2;

                    SetMember(mtx, row, col, avg);
                    SetMember(mtx, col, row, avg);
                }
            }
        }