本文整理汇总了C#中MatrixD.Set方法的典型用法代码示例。如果您正苦于以下问题:C# MatrixD.Set方法的具体用法?C# MatrixD.Set怎么用?C# MatrixD.Set使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MatrixD
的用法示例。
在下文中一共展示了MatrixD.Set方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EigenvalueDecompositionD
//--------------------------------------------------------------
/// <summary>
/// Creates the eigenvalue decomposition of the given matrix.
/// </summary>
/// <param name="matrixA">The square matrix A.</param>
/// <exception cref="ArgumentNullException">
/// <paramref name="matrixA"/> is <see langword="null"/>.
/// </exception>
/// <exception cref="ArgumentException">
/// <paramref name="matrixA"/> is non-square (rectangular).
/// </exception>
public EigenvalueDecompositionD(MatrixD matrixA)
{
if (matrixA == null)
throw new ArgumentNullException("matrixA");
if (matrixA.IsSquare == false)
throw new ArgumentException("The matrix A must be square.", "matrixA");
_n = matrixA.NumberOfColumns;
_d = new VectorD(_n);
_e = new VectorD(_n);
_isSymmetric = matrixA.IsSymmetric;
if (_isSymmetric)
{
_v = matrixA.Clone();
// Tridiagonalize.
ReduceToTridiagonal();
// Diagonalize.
TridiagonalToQL();
}
else
{
_v = new MatrixD(_n, _n);
// Abort if A contains NaN values.
// If we continue with NaN values, we run into an infinite loop.
for (int i = 0; i < _n; i++)
{
for (int j = 0; j < _n; j++)
{
if (Numeric.IsNaN(matrixA[i, j]))
{
_e.Set(double.NaN);
_v.Set(double.NaN);
_d.Set(double.NaN);
return;
}
}
}
// Storage of nonsymmetric Hessenberg form.
MatrixD matrixH = matrixA.Clone();
// Working storage for nonsymmetric algorithm.
double[] ort = new double[_n];
// Reduce to Hessenberg form.
ReduceToHessenberg(matrixH, ort);
// Reduce Hessenberg to real Schur form.
HessenbergToRealSchur(matrixH);
}
}
示例2: SetWithListShouldThrowArgumentNullException
public void SetWithListShouldThrowArgumentNullException()
{
var m = new MatrixD();
m.Set((IList<double>)null, MatrixOrder.RowMajor);
}
示例3: SingularValueDecompositionD
public SingularValueDecompositionD(MatrixD matrixA)
{
if (matrixA == null)
throw new ArgumentNullException("matrixA");
// Derived from LINPACK code.
// Initialize.
_m = matrixA.NumberOfRows;
_n = matrixA.NumberOfColumns;
MatrixD matrixAClone = matrixA.Clone();
if (_m < _n)
throw new ArgumentException("The number of rows must be greater than or equal to the number of columns.", "matrixA");
int nu = Math.Min(_m, _n);
_s = new VectorD(Math.Min(_m + 1, _n));
_u = new MatrixD(_m, nu); //Jama getU() returns new Matrix(U,_m,Math.min(_m+1,_n)) ?!
_v = new MatrixD(_n, _n);
double[] e = new double[_n];
double[] work = new double[_m];
// Abort if A contains NaN values.
// If we continue with NaN values, we run into an infinite loop.
for (int i = 0; i < _m; i++)
{
for (int j = 0; j < _n; j++)
{
if (Numeric.IsNaN(matrixA[i, j]))
{
_u.Set(double.NaN);
_v.Set(double.NaN);
_s.Set(double.NaN);
return;
}
}
}
// By default, we calculate U and V. To calculate only U or V we can set one of the following
// two constants to false. (This optimization is not yet tested.)
const bool wantu = true;
const bool wantv = true;
// Reduce A to bidiagonal form, storing the diagonal elements
// in s and the super-diagonal elements in e.
int nct = Math.Min(_m - 1, _n);
int nrt = Math.Max(0, Math.Min(_n - 2, _m));
for (int k = 0; k < Math.Max(nct, nrt); k++)
{
if (k < nct)
{
// Compute the transformation for the k-th column and
// place the k-th diagonal in s[k].
// Compute 2-norm of k-th column without under/overflow.
_s[k] = 0;
for (int i = k; i < _m; i++)
_s[k] = MathHelper.Hypotenuse(_s[k], matrixAClone[i, k]);
if (_s[k] != 0)
{
if (matrixAClone[k, k] < 0)
_s[k] = -_s[k];
for (int i = k; i < _m; i++)
matrixAClone[i, k] /= _s[k];
matrixAClone[k, k] += 1;
}
_s[k] = -_s[k];
}
for (int j = k + 1; j < _n; j++)
{
if ((k < nct) && (_s[k] != 0))
{
// Apply the transformation.
double t = 0;
for (int i = k; i < _m; i++)
t += matrixAClone[i, k] * matrixAClone[i, j];
t = -t / matrixAClone[k, k];
for (int i = k; i < _m; i++)
matrixAClone[i, j] += t * matrixAClone[i, k];
}
// Place the k-th row of A into e for the
// subsequent calculation of the row transformation.
e[j] = matrixAClone[k, j];
}
if (wantu & (k < nct))
{
// Place the transformation in U for subsequent back
// multiplication.
for (int i = k; i < _m; i++)
_u[i, k] = matrixAClone[i, k];
}
if (k < nrt)
//.........这里部分代码省略.........
示例4: SetWithArrayShouldThrowArgumentNullException
public void SetWithArrayShouldThrowArgumentNullException()
{
var m = new MatrixD();
m.Set((double[])null, MatrixOrder.ColumnMajor);
}
示例5: SetWith2DJaggedArrayShouldThrowArgumentNullException
public void SetWith2DJaggedArrayShouldThrowArgumentNullException()
{
var m = new MatrixD();
m.Set((double[][])null);
}
示例6: SetException2
public void SetException2()
{
MatrixD m = null;
MatrixD n = new MatrixD(1, 1);
n.Set(m);
}
示例7: SetException1
public void SetException1()
{
MatrixD m = new MatrixD(4, 3);
m.Set(new MatrixD(1, 2, 777));
}
示例8: Set
public void Set()
{
MatrixD m = new MatrixD(3, 4);
MatrixD m2 = new MatrixD(3, 4, rowMajor, MatrixOrder.RowMajor);
m.Set(m2);
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
m[0] = 10; // Test if original matrix is unchanged.
Assert.AreEqual(1, m2[0]);
m.Set(777);
for (int i = 0; i < 12; i++)
Assert.AreEqual(777, m[i]);
m.Set(0);
for (int i = 0; i < 12; i++)
Assert.AreEqual(0, m[i]);
m.Set(columnMajor, MatrixOrder.ColumnMajor);
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
m.Set(0);
m.Set(rowMajor, MatrixOrder.RowMajor);
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
m.Set(0);
m.Set(new List<double>(columnMajor), MatrixOrder.ColumnMajor);
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
m.Set(0);
m.Set(new List<double>(rowMajor), MatrixOrder.RowMajor);
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
m.Set(0);
m.Set(new double[3, 4] { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }});
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
m.Set(0);
m.Set(new double[3][] { new double[4] { 1, 2, 3, 4 },
new double[4] { 5, 6, 7, 8 },
new double[4] { 9, 10, 11, 12 }});
for (int i = 0; i < 12; i++)
Assert.AreEqual(rowMajor[i], m[i]);
}