本文整理汇总了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);
}
示例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);
}
示例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;
}
示例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
}
示例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;
}