当前位置: 首页>>代码示例>>C#>>正文


C# Matrix.SwapRows方法代码示例

本文整理汇总了C#中Matrix.SwapRows方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix.SwapRows方法的具体用法?C# Matrix.SwapRows怎么用?C# Matrix.SwapRows使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Matrix的用法示例。


在下文中一共展示了Matrix.SwapRows方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RowPivotStrategy

        /* Wendet die Zeilenpivotstrategie innerhalb einer bestimmten Zeilengrenze an für eine bestimmte Spalte*/
        private Matrix RowPivotStrategy(Matrix resultVector, int minRow, int maxRow, int columnToLookAt)
        {
            double maxValue = GetDoubleFromMatrix(columnToLookAt, minRow);
            int rowNumber = minRow;

            for (int row = minRow; row < maxRow; row++)
            {
                double tempValue = Math.Abs(GetDoubleFromMatrix(columnToLookAt, row));

                if (maxValue < tempValue)
                {
                    maxValue = tempValue;
                    rowNumber = row;
                }
            }

            //swapping rows of result vector
            resultVector.SetFromNewMatrix(resultVector.SwapRows(minRow, rowNumber));

            return SwapRows(minRow, rowNumber);
        }
开发者ID:falcoprescher,项目名称:Numeric-CSharp,代码行数:22,代码来源:Matrix.cs

示例2: SwapRowsTest

        public void SwapRowsTest()
        {
            var matrix = new Matrix(new[]
            {
                new Vector(new[] { new Number(1), new Number(-2), new Number(3) }),
                new Vector(new[] { new Number(4), new Number(0), new Number(6) }),
                new Vector(new[] { new Number(-7), new Number(8), new Number(9) })
            });
            var expected = new Matrix(new[]
            {
                new Vector(new[] { new Number(-7), new Number(8), new Number(9) }),
                new Vector(new[] { new Number(4), new Number(0), new Number(6) }),
                new Vector(new[] { new Number(1), new Number(-2), new Number(3) })

            });

            matrix.SwapRows(0, 2);

            Assert.AreEqual(expected, matrix);
        }
开发者ID:ronnycsharp,项目名称:xFunc,代码行数:20,代码来源:MatrixTest.cs

示例3: LUPDecomposition

                private void LUPDecomposition(out Matrix l, out Matrix u, out Matrix p, out int signP)
                {
                    if (!this.IsSquare)
                        throw new NotSupportedException("LU decomposition is only possible for square matrices.");

                    Matrix a = new Matrix(this);

                    l = Matrix.CreateIdentity(a.Rows);
                    u = new Matrix(a.Rows);
                    p = Matrix.CreateIdentity(a.Rows);

                    int swaps = 0;
                    for (int j = 0; j < a.Rows; j++)
                    {
                        int maxRow = j;
                        for (int i = j; i < a.Rows; i++)
                            if (Math.Abs(a[i, j]) > Math.Abs(a[maxRow, j]))
                                maxRow = i;

                        if (maxRow != j)
                        {
                            p.SwapRows(maxRow, j);
                            swaps++;
                        }
                    }

                    Matrix a2 = p * a;
                    for (int j = 0; j < a.Rows; j++)
                        for (int i = 0; i < a.Rows; i++)
                        {
                            double val;
                            if (i <= j)
                            {
                                val = 0;
                                for (int k = 0; k < i; k++)
                                    val += l[i, k] * u[k, j];
                                u[i, j] = a2[i, j] - val;
                            }

                            if (i >= j)
                            {
                                val = 0;
                                for (int k = 0; k < i; k++)
                                    val += l[i, k] * u[k, j];
                                l[i, j] = (a2[i, j] - val) / u[j, j];
                            }
                        }

                    signP = swaps % 2 == 0 ? 1 : -1;
                }
开发者ID:jlvermeulen,项目名称:algorithms-and-data-structures,代码行数:50,代码来源:Matrix.cs

示例4: LUP

        /// <summary>
        /// Приведение матрицы к LUP виду
        /// </summary>
        /// <param name="result">Результирующая матрица</param>
        /// <param name="p">Матрица перестановок</param>
        public void LUP(ref Matrix result, ref Matrix p)
        {
            if (result == null) throw new ArgumentNullException("result");
            if (p == null) throw new ArgumentNullException("p");
            int n = RowsCount; // n - размерность исходной матрицы

            result = this;

            //загружаем в матрицу p единичную матрицу
            p = IdentityMatrix(n);

            for (int i = 0; i < n; i++)
            {
                // поиск опорного элемента (максимального по модулю)
                double pivotValue = 0; // опорный элемент
                int pivot = -1;         // индекс опорного элемента
                for (int row = i; row < n; row++)
                {
                    if (Math.Abs(result[row, i]) > pivotValue)
                    {
                        pivotValue = Math.Abs(result[row, i]);
                        pivot = row;
                    }
                }
                if (pivotValue == 0)
                    throw new Exception("Матрица вырождена. " + "Обратная ей матрица не может быть найдена. "
                        + "Попробуйте ввести другие значения.");

                // меняем местами i-ю строку и строку с опорным элементом
                p.SwapRows(pivot, i);
                result.SwapRows(pivot, i);
                for (int j = i + 1; j < n; j++)
                {
                    result[j, i] /= result[i, i];
                    for (int k = i + 1; k < n; k++)
                        result[j, k] -= result[j, i] * result[i, k];
                }
            }
            // теперь матрица result = L + U - E
        }
开发者ID:EvgenyKarataev,项目名称:MatrixCalc,代码行数:45,代码来源:Matrix.cs

示例5: reduce

    // Determine the reduce of the Matrix
    public Matrix reduce()
    {
        Matrix reduced = new Matrix(this);

        int lead = 0;
        for (int row = 0; row < reduced.getH(); row++)
        {
            if (reduced.getW() <= lead)
                break;

            int i = row;
            while (reduced[lead, i] == 0)
            {
                i++;
                if (i == reduced.getH())
                {
                    i = row;
                    lead++;
                    if (lead == reduced.getW())
                        return reduced;
                }
            }

            reduced.SwapRows(i, row);

            float divFactor = reduced[lead, row];
            for (int k = 0; k < reduced.getW(); k++)
            {
                reduced[k, row] = reduced[k, row] / divFactor;
            }

            for (int j = 0; j < reduced.getH(); j++)
            {
                if (j == row) continue;

                float factor = reduced[lead, j];
                for (int k = 0; k < reduced.getW(); k++)
                {
                    reduced[k, j] = reduced[k, j] - reduced[k, row] * factor;
                }
            }

        }
        return reduced;
    }
开发者ID:TheDeadMemoriesTeam,项目名称:TheDeadMemories,代码行数:46,代码来源:Matrix.cs


注:本文中的Matrix.SwapRows方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。