本文整理汇总了C#中DotNetMatrix.GeneralMatrix.Rank方法的典型用法代码示例。如果您正苦于以下问题:C# GeneralMatrix.Rank方法的具体用法?C# GeneralMatrix.Rank怎么用?C# GeneralMatrix.Rank使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DotNetMatrix.GeneralMatrix
的用法示例。
在下文中一共展示了GeneralMatrix.Rank方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: pinv
/**
* Computes the Moore–Penrose pseudoinverse using the SVD method.
*
* Modified version of the original implementation by Kim van der Linde.
*/
public static GeneralMatrix pinv(GeneralMatrix x)
{
if (x.Rank() < 1)
return null;
if (x.ColumnDimension > x.RowDimension)
return pinv(x.Transpose()).Transpose();
SingularValueDecomposition svdX = new SingularValueDecomposition(x);
double[] singularValues = svdX.SingularValues;
double tol = Math.Max(x.ColumnDimension, x.RowDimension)
* singularValues[0] * 2E-16;
double[] singularValueReciprocals = new double[singularValues.Count()];
for (int i = 0; i < singularValues.Count(); i++)
singularValueReciprocals[i] = Math.Abs(singularValues[i]) < tol ? 0
: (1.0 / singularValues[i]);
double[][] u = svdX.GetU().Array;
double[][] v = svdX.GetV().Array;
int min = Math.Min(x.ColumnDimension, u[0].Count());
double[][] inverse = new double[x.ColumnDimension][];
for (int i = 0; i < x.ColumnDimension; i++) {
inverse[i] = new double[x.RowDimension];
for (int j = 0; j < u.Count(); j++)
for (int k = 0; k < min; k++)
inverse[i][j] += v[i][k] * singularValueReciprocals[k] * u[j][k];
}
return new GeneralMatrix(inverse);
}
示例2: DEF
public void DEF()
{
double[][] rankdef = {new double[]{1.0, 4.0, 7.0, 10.0}, new double[]{2.0, 5.0, 8.0, 11.0}, new double[]{3.0, 6.0, 9.0, 12.0}};
GeneralMatrix def = new GeneralMatrix(rankdef);
Assert.IsTrue(GeneralTests.Check(def.Rank(), System.Math.Min(def.RowDimension, def.ColumnDimension) - 1));
}
示例3: Main
//.........这里部分代码省略.........
catch (System.SystemException e)
{
errorCount = try_failure(errorCount, "Multiply(double)...", "incorrect GeneralMatrix-scalar product calculation");
System.Console.Out.WriteLine(e.Message);
}
A = new GeneralMatrix(columnwise, 4);
QRDecomposition QR = A.QRD();
R = QR.R;
try
{
check(A, QR.Q.Multiply(R));
try_success("QRDecomposition...", "");
}
catch (System.SystemException e)
{
errorCount = try_failure(errorCount, "QRDecomposition...", "incorrect QR decomposition calculation");
System.Console.Out.WriteLine(e.Message);
}
SingularValueDecomposition SVD = A.SVD();
try
{
check(A, SVD.GetU().Multiply(SVD.S.Multiply(SVD.GetV().Transpose())));
try_success("SingularValueDecomposition...", "");
}
catch (System.SystemException e)
{
errorCount = try_failure(errorCount, "SingularValueDecomposition...", "incorrect singular value decomposition calculation");
System.Console.Out.WriteLine(e.Message);
}
DEF = new GeneralMatrix(rankdef);
try
{
check(DEF.Rank(), System.Math.Min(DEF.RowDimension, DEF.ColumnDimension) - 1);
try_success("Rank()...", "");
}
catch (System.SystemException e)
{
errorCount = try_failure(errorCount, "Rank()...", "incorrect Rank calculation");
System.Console.Out.WriteLine(e.Message);
}
B = new GeneralMatrix(condmat);
SVD = B.SVD();
double[] singularvalues = SVD.SingularValues;
try
{
check(B.Condition(), singularvalues[0] / singularvalues[System.Math.Min(B.RowDimension, B.ColumnDimension) - 1]);
try_success("Condition()...", "");
}
catch (System.SystemException e)
{
errorCount = try_failure(errorCount, "Condition()...", "incorrect condition number calculation");
System.Console.Out.WriteLine(e.Message);
}
int n = A.ColumnDimension;
A = A.GetMatrix(0, n - 1, 0, n - 1);
A.SetElement(0, 0, 0.0);
LUDecomposition LU = A.LUD();
try
{
check(A.GetMatrix(LU.Pivot, 0, n - 1), LU.L.Multiply(LU.U));
try_success("LUDecomposition...", "");
}
catch (System.SystemException e)
{
errorCount = try_failure(errorCount, "LUDecomposition...", "incorrect LU decomposition calculation");