|
|
|
@ -26,8 +26,6 @@ |
|
|
|
|
|
|
|
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 |
|
|
|
{ |
|
|
|
using System; |
|
|
|
using LinearAlgebra.Generic; |
|
|
|
using NUnit.Framework; |
|
|
|
using Complex32 = Numerics.Complex32; |
|
|
|
|
|
|
|
@ -88,70 +86,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Can convert a matrix to a multidimensional array.
|
|
|
|
/// </summary>
|
|
|
|
[Test] |
|
|
|
public void CanToArray() |
|
|
|
{ |
|
|
|
foreach (var data in TestMatrices.Values) |
|
|
|
{ |
|
|
|
var array = data.ToArray(); |
|
|
|
Assert.AreEqual(data.RowCount, array.GetLength(0)); |
|
|
|
Assert.AreEqual(data.ColumnCount, array.GetLength(1)); |
|
|
|
|
|
|
|
for (var i = 0; i < data.RowCount; i++) |
|
|
|
{ |
|
|
|
for (var j = 0; j < data.ColumnCount; j++) |
|
|
|
{ |
|
|
|
Assert.AreEqual(data[i, j], array[i, j]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Can convert a matrix to a column-wise array.
|
|
|
|
/// </summary>
|
|
|
|
[Test] |
|
|
|
public void CanToColumnWiseArray() |
|
|
|
{ |
|
|
|
foreach (var data in TestMatrices.Values) |
|
|
|
{ |
|
|
|
var array = data.ToColumnWiseArray(); |
|
|
|
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length); |
|
|
|
|
|
|
|
for (var i = 0; i < data.RowCount; i++) |
|
|
|
{ |
|
|
|
for (var j = 0; j < data.ColumnCount; j++) |
|
|
|
{ |
|
|
|
Assert.AreEqual(data[i, j], array[(j * data.RowCount) + i]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Can convert a matrix to a row-wise array.
|
|
|
|
/// </summary>
|
|
|
|
[Test] |
|
|
|
public void CanToRowWiseArray() |
|
|
|
{ |
|
|
|
foreach (var data in TestMatrices.Values) |
|
|
|
{ |
|
|
|
var array = data.ToRowWiseArray(); |
|
|
|
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length); |
|
|
|
|
|
|
|
for (var i = 0; i < data.RowCount; i++) |
|
|
|
{ |
|
|
|
for (var j = 0; j < data.ColumnCount; j++) |
|
|
|
{ |
|
|
|
Assert.AreEqual(data[i, j], array[(i * data.ColumnCount) + j]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Can compute Frobenius norm.
|
|
|
|
/// </summary>
|
|
|
|
@ -215,71 +149,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 |
|
|
|
AssertHelpers.AlmostEqual(7.3582664f, matrix.L2Norm().Real, 6); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Test whether the index enumerator returns the correct values.
|
|
|
|
/// </summary>
|
|
|
|
[Test] |
|
|
|
public virtual void CanUseIndexedEnumerator() |
|
|
|
{ |
|
|
|
var matrix = TestMatrices["Singular3x3"]; |
|
|
|
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator()) |
|
|
|
{ |
|
|
|
enumerator.MoveNext(); |
|
|
|
var item = enumerator.Current; |
|
|
|
Assert.AreEqual(0, item.Item1); |
|
|
|
Assert.AreEqual(0, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(0, item.Item1); |
|
|
|
Assert.AreEqual(1, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(0, item.Item1); |
|
|
|
Assert.AreEqual(2, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(1, item.Item1); |
|
|
|
Assert.AreEqual(0, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(1, item.Item1); |
|
|
|
Assert.AreEqual(1, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(1, item.Item1); |
|
|
|
Assert.AreEqual(2, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(2, item.Item1); |
|
|
|
Assert.AreEqual(0, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(2, item.Item1); |
|
|
|
Assert.AreEqual(1, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3); |
|
|
|
|
|
|
|
enumerator.MoveNext(); |
|
|
|
item = enumerator.Current; |
|
|
|
Assert.AreEqual(2, item.Item1); |
|
|
|
Assert.AreEqual(2, item.Item2); |
|
|
|
Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Can check if a matrix is symmetric.
|
|
|
|
/// </summary>
|
|
|
|
@ -292,71 +161,5 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 |
|
|
|
matrix = TestMatrices["Square3x3"]; |
|
|
|
Assert.IsFalse(matrix.IsSymmetric); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Test whether we can create a matrix from a list of column vectors.
|
|
|
|
/// </summary>
|
|
|
|
[Test] |
|
|
|
public virtual void CanCreateMatrixFromColumns() |
|
|
|
{ |
|
|
|
var column1 = CreateVector(new Complex32[] { 1.0f }); |
|
|
|
var column2 = CreateVector(new Complex32[] { 1.0f, 2.0f, 3.0f, 4.0f }); |
|
|
|
var column3 = CreateVector(new Complex32[] { 1.0f, 2.0f }); |
|
|
|
var columnVectors = new System.Collections.Generic.List<Vector<Complex32>> |
|
|
|
{ |
|
|
|
column1, |
|
|
|
column2, |
|
|
|
column3 |
|
|
|
}; |
|
|
|
var matrix = Matrix<Complex32>.CreateFromColumns(columnVectors); |
|
|
|
|
|
|
|
Assert.AreEqual(matrix.RowCount, 4); |
|
|
|
Assert.AreEqual(matrix.ColumnCount, 3); |
|
|
|
Assert.AreEqual(1.0, matrix[0, 0].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[1, 0].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[2, 0].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[3, 0].Real); |
|
|
|
Assert.AreEqual(1.0, matrix[0, 1].Real); |
|
|
|
Assert.AreEqual(2.0, matrix[1, 1].Real); |
|
|
|
Assert.AreEqual(3.0, matrix[2, 1].Real); |
|
|
|
Assert.AreEqual(4.0, matrix[3, 1].Real); |
|
|
|
Assert.AreEqual(1.0, matrix[0, 2].Real); |
|
|
|
Assert.AreEqual(2.0, matrix[1, 2].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[2, 2].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[3, 2].Real); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Test whether we can create a matrix from a list of row vectors.
|
|
|
|
/// </summary>
|
|
|
|
[Test] |
|
|
|
public virtual void CanCreateMatrixFromRows() |
|
|
|
{ |
|
|
|
var row1 = CreateVector(new Complex32[] { 1.0f }); |
|
|
|
var row2 = CreateVector(new Complex32[] { 1.0f, 2.0f, 3.0f, 4.0f }); |
|
|
|
var row3 = CreateVector(new Complex32[] { 1.0f, 2.0f }); |
|
|
|
var rowVectors = new System.Collections.Generic.List<Vector<Complex32>> |
|
|
|
{ |
|
|
|
row1, |
|
|
|
row2, |
|
|
|
row3 |
|
|
|
}; |
|
|
|
var matrix = Matrix<Complex32>.CreateFromRows(rowVectors); |
|
|
|
|
|
|
|
Assert.AreEqual(matrix.RowCount, 3); |
|
|
|
Assert.AreEqual(matrix.ColumnCount, 4); |
|
|
|
Assert.AreEqual(1.0, matrix[0, 0].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[0, 1].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[0, 2].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[0, 3].Real); |
|
|
|
Assert.AreEqual(1.0, matrix[1, 0].Real); |
|
|
|
Assert.AreEqual(2.0, matrix[1, 1].Real); |
|
|
|
Assert.AreEqual(3.0, matrix[1, 2].Real); |
|
|
|
Assert.AreEqual(4.0, matrix[1, 3].Real); |
|
|
|
Assert.AreEqual(1.0, matrix[2, 0].Real); |
|
|
|
Assert.AreEqual(2.0, matrix[2, 1].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[2, 2].Real); |
|
|
|
Assert.AreEqual(0.0, matrix[2, 3].Real); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|