Browse Source

corrected bug in parsing Complex matrices and added sparse matrix tests

la-knuth
Marcus Cuda 16 years ago
parent
commit
2ada5c951b
  1. BIN
      data/Matlab/complex.mat
  2. 12
      data/Matlab/matrices.txt
  3. BIN
      data/Matlab/sparse_complex.mat
  4. 3
      src/MathNet.Numerics.5.1.ReSharper
  5. 6
      src/Numerics/LinearAlgebra/IO/Matlab/MatlabParser.cs
  6. 43
      src/UnitTests/LinearAlgebraTests/Complex/IO/MatlabReaderTests.cs
  7. 47
      src/UnitTests/LinearAlgebraTests/Complex32/IO/MatlabReaderTests.cs
  8. 8
      src/UnitTests/UnitTests.csproj

BIN
data/Matlab/complex.mat

Binary file not shown.

12
data/Matlab/matrices.txt

@ -12,4 +12,14 @@ collection.mat contains:
* a vector w
A.mat contains:
* a matrix A
* 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

BIN
data/Matlab/sparse_complex.mat

Binary file not shown.

3
src/MathNet.Numerics.5.1.ReSharper

@ -18,7 +18,8 @@ Xorshift
Matlab
Matlab
Matlab
Endian</UserWords>
Endian
indices</UserWords>
</CustomDictionary>
</Dictionaries>
</CustomDictionaries>

6
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:

43
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()
{

47
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);
}
}
}

8
src/UnitTests/UnitTests.csproj

@ -376,6 +376,10 @@
<Link>data\Matlab\collection.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\Matlab\complex.mat">
<Link>data\Matlab\complex.mat</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="..\..\data\Matlab\sparse-large.mat">
<Link>data\Matlab\sparse-large.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@ -384,6 +388,10 @@
<Link>data\Matlab\sparse-small.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\..\data\Matlab\sparse_complex.mat">
<Link>data\Matlab\sparse_complex.mat</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="..\..\data\Matlab\v.mat">
<Link>data\Matlab\v.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

Loading…
Cancel
Save