diff --git a/data/Matlab/complex.mat b/data/Matlab/complex.mat
new file mode 100644
index 00000000..18b85bb8
Binary files /dev/null and b/data/Matlab/complex.mat differ
diff --git a/data/Matlab/matrices.txt b/data/Matlab/matrices.txt
index 72829177..91d7dc97 100644
--- a/data/Matlab/matrices.txt
+++ b/data/Matlab/matrices.txt
@@ -12,4 +12,14 @@ collection.mat contains:
* a vector w
A.mat contains:
-* a matrix A
\ No newline at end of file
+* a matrix A
+
+complex.mat contains:
+* dense, complex matrix a
+* dense, complex matrix b
+* dense, complex matrix c
+
+sparse_complex.mat contains:
+* sparse, complex matrix sa
+* sparse, complex matrix sb
+* sparse, complex matrix sc
diff --git a/data/Matlab/sparse_complex.mat b/data/Matlab/sparse_complex.mat
new file mode 100644
index 00000000..b1fe2d19
Binary files /dev/null and b/data/Matlab/sparse_complex.mat differ
diff --git a/src/MathNet.Numerics.5.1.ReSharper b/src/MathNet.Numerics.5.1.ReSharper
index 108ae5fe..1b3673de 100644
--- a/src/MathNet.Numerics.5.1.ReSharper
+++ b/src/MathNet.Numerics.5.1.ReSharper
@@ -18,7 +18,8 @@ Xorshift
Matlab
Matlab
Matlab
-Endian
+Endian
+indices
diff --git a/src/Numerics/LinearAlgebra/IO/Matlab/MatlabParser.cs b/src/Numerics/LinearAlgebra/IO/Matlab/MatlabParser.cs
index 7e4b6010..302e2f7a 100644
--- a/src/Numerics/LinearAlgebra/IO/Matlab/MatlabParser.cs
+++ b/src/Numerics/LinearAlgebra/IO/Matlab/MatlabParser.cs
@@ -1017,6 +1017,9 @@ namespace MathNet.Numerics.LinearAlgebra.IO.Matlab
if (isComplex)
{
+ // skip header
+ reader.ReadBytes(8);
+
switch (type)
{
case DataType.Int8:
@@ -1244,6 +1247,9 @@ namespace MathNet.Numerics.LinearAlgebra.IO.Matlab
if (isComplex)
{
+ // skip header
+ reader.ReadBytes(8);
+
switch (type)
{
case DataType.Int8:
diff --git a/src/UnitTests/LinearAlgebraTests/Complex/IO/MatlabReaderTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/IO/MatlabReaderTests.cs
index d401fc78..5b03e108 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex/IO/MatlabReaderTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex/IO/MatlabReaderTests.cs
@@ -1,13 +1,52 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.IO
{
- using LinearAlgebra.Double;
- using LinearAlgebra.Double.IO;
+ using System;
+ using System.Diagnostics;
+ using LinearAlgebra.Complex;
+ using LinearAlgebra.Complex.IO;
using MbUnit.Framework;
[TestFixture]
public class MatlabMatrixReaderTest
{
+
+ [Test]
+ public void CanReadComplexAllMatrices()
+ {
+ var dmr = new MatlabMatrixReader("./data/Matlab/complex.mat");
+ var matrices = dmr.ReadMatrices();
+ Assert.AreEqual(3, matrices.Length);
+ foreach (var matrix in matrices)
+ {
+ Assert.AreEqual(typeof(DenseMatrix), matrix.GetType());
+ }
+
+ var a = matrices[0];
+
+ Assert.AreEqual(100, a.RowCount);
+ Assert.AreEqual(100, a.ColumnCount);
+ AssertHelpers.AlmostEqual(27.232498979698409, a.L2Norm(), 15);
+ }
+
+ [Test]
+ public void CanReadSparseComplexAllMatrices()
+ {
+ var dmr = new MatlabMatrixReader("./data/Matlab/sparse_complex.mat");
+ var matrices = dmr.ReadMatrices();
+ Assert.AreEqual(3, matrices.Length);
+ foreach (var matrix in matrices)
+ {
+ Assert.AreEqual(typeof(SparseMatrix), matrix.GetType());
+ }
+
+ var a = matrices[0];
+
+ Assert.AreEqual(100, a.RowCount);
+ Assert.AreEqual(100, a.ColumnCount);
+ AssertHelpers.AlmostEqual(13.223654390985379, a.L2Norm(), 15);
+ }
+
[Test]
public void CanReadNonComplexAllMatrices()
{
diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/IO/MatlabReaderTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/IO/MatlabReaderTests.cs
index 47504e3b..626e11e2 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex32/IO/MatlabReaderTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex32/IO/MatlabReaderTests.cs
@@ -1,13 +1,50 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO
{
- using LinearAlgebra.Double;
- using LinearAlgebra.Double.IO;
+ using LinearAlgebra.Complex32;
+ using LinearAlgebra.Complex32.IO;
using MbUnit.Framework;
[TestFixture]
public class MatlabMatrixReaderTest
{
+
+ [Test]
+ public void CanReadComplexAllMatrices()
+ {
+ var dmr = new MatlabMatrixReader("./data/Matlab/complex.mat");
+ var matrices = dmr.ReadMatrices();
+ Assert.AreEqual(3, matrices.Length);
+ foreach (var matrix in matrices)
+ {
+ Assert.AreEqual(typeof(DenseMatrix), matrix.GetType());
+ }
+
+ var a = matrices[0];
+
+ Assert.AreEqual(100, a.RowCount);
+ Assert.AreEqual(100, a.ColumnCount);
+ AssertHelpers.AlmostEqual(27.232498979698409, a.L2Norm(), 6);
+ }
+
+ [Test]
+ public void CanReadSparseComplexAllMatrices()
+ {
+ var dmr = new MatlabMatrixReader("./data/Matlab/sparse_complex.mat");
+ var matrices = dmr.ReadMatrices();
+ Assert.AreEqual(3, matrices.Length);
+ foreach (var matrix in matrices)
+ {
+ Assert.AreEqual(typeof(SparseMatrix), matrix.GetType());
+ }
+
+ var a = matrices[0];
+
+ Assert.AreEqual(100, a.RowCount);
+ Assert.AreEqual(100, a.ColumnCount);
+ AssertHelpers.AlmostEqual(13.223654390985379, a.L2Norm(), 7);
+ }
+
[Test]
public void CanReadNonComplexAllMatrices()
{
@@ -28,7 +65,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO
Assert.AreEqual(100, matrix.RowCount);
Assert.AreEqual(100, matrix.ColumnCount);
Assert.AreEqual(typeof(DenseMatrix), matrix.GetType());
- AssertHelpers.AlmostEqual(100.108979553704, matrix.FrobeniusNorm(), 13);
+ AssertHelpers.AlmostEqual(100.108979553704, matrix.FrobeniusNorm(), 6);
}
@@ -52,7 +89,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO
Assert.AreEqual(1, matrices.Length);
Assert.AreEqual(100, matrices[0].RowCount);
Assert.AreEqual(100, matrices[0].ColumnCount);
- AssertHelpers.AlmostEqual(100.431635988639, matrices[0].FrobeniusNorm(), 13);
+ AssertHelpers.AlmostEqual(100.431635988639, matrices[0].FrobeniusNorm(), 6);
Assert.AreEqual(typeof(DenseMatrix), matrices[0].GetType());
}
@@ -64,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO
Assert.AreEqual(100, matrix.RowCount);
Assert.AreEqual(100, matrix.ColumnCount);
Assert.AreEqual(typeof(SparseMatrix), matrix.GetType());
- AssertHelpers.AlmostEqual(17.6385090630805, matrix.FrobeniusNorm(), 12);
+ AssertHelpers.AlmostEqual(17.6385090630805, matrix.FrobeniusNorm(), 6);
}
}
}
diff --git a/src/UnitTests/UnitTests.csproj b/src/UnitTests/UnitTests.csproj
index 40aca2c6..fb8e9e98 100644
--- a/src/UnitTests/UnitTests.csproj
+++ b/src/UnitTests/UnitTests.csproj
@@ -376,6 +376,10 @@
data\Matlab\collection.mat
PreserveNewest
+
+ data\Matlab\complex.mat
+ Always
+
data\Matlab\sparse-large.mat
PreserveNewest
@@ -384,6 +388,10 @@
data\Matlab\sparse-small.mat
PreserveNewest
+
+ data\Matlab\sparse_complex.mat
+ Always
+
data\Matlab\v.mat
PreserveNewest