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 vector w
A.mat contains: 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 Matlab
Matlab Matlab
Endian</UserWords> Endian
indices</UserWords>
</CustomDictionary> </CustomDictionary>
</Dictionaries> </Dictionaries>
</CustomDictionaries> </CustomDictionaries>

6
src/Numerics/LinearAlgebra/IO/Matlab/MatlabParser.cs

@ -1017,6 +1017,9 @@ namespace MathNet.Numerics.LinearAlgebra.IO.Matlab
if (isComplex) if (isComplex)
{ {
// skip header
reader.ReadBytes(8);
switch (type) switch (type)
{ {
case DataType.Int8: case DataType.Int8:
@ -1244,6 +1247,9 @@ namespace MathNet.Numerics.LinearAlgebra.IO.Matlab
if (isComplex) if (isComplex)
{ {
// skip header
reader.ReadBytes(8);
switch (type) switch (type)
{ {
case DataType.Int8: case DataType.Int8:

43
src/UnitTests/LinearAlgebraTests/Complex/IO/MatlabReaderTests.cs

@ -1,13 +1,52 @@
 
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.IO namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex.IO
{ {
using LinearAlgebra.Double; using System;
using LinearAlgebra.Double.IO; using System.Diagnostics;
using LinearAlgebra.Complex;
using LinearAlgebra.Complex.IO;
using MbUnit.Framework; using MbUnit.Framework;
[TestFixture] [TestFixture]
public class MatlabMatrixReaderTest 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] [Test]
public void CanReadNonComplexAllMatrices() public void CanReadNonComplexAllMatrices()
{ {

47
src/UnitTests/LinearAlgebraTests/Complex32/IO/MatlabReaderTests.cs

@ -1,13 +1,50 @@
 
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO
{ {
using LinearAlgebra.Double; using LinearAlgebra.Complex32;
using LinearAlgebra.Double.IO; using LinearAlgebra.Complex32.IO;
using MbUnit.Framework; using MbUnit.Framework;
[TestFixture] [TestFixture]
public class MatlabMatrixReaderTest 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] [Test]
public void CanReadNonComplexAllMatrices() public void CanReadNonComplexAllMatrices()
{ {
@ -28,7 +65,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.IO
Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.RowCount);
Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(100, matrix.ColumnCount);
Assert.AreEqual(typeof(DenseMatrix), matrix.GetType()); 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(1, matrices.Length);
Assert.AreEqual(100, matrices[0].RowCount); Assert.AreEqual(100, matrices[0].RowCount);
Assert.AreEqual(100, matrices[0].ColumnCount); 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()); 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.RowCount);
Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(100, matrix.ColumnCount);
Assert.AreEqual(typeof(SparseMatrix), matrix.GetType()); 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> <Link>data\Matlab\collection.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Include="..\..\data\Matlab\complex.mat">
<Link>data\Matlab\complex.mat</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="..\..\data\Matlab\sparse-large.mat"> <None Include="..\..\data\Matlab\sparse-large.mat">
<Link>data\Matlab\sparse-large.mat</Link> <Link>data\Matlab\sparse-large.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@ -384,6 +388,10 @@
<Link>data\Matlab\sparse-small.mat</Link> <Link>data\Matlab\sparse-small.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </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"> <None Include="..\..\data\Matlab\v.mat">
<Link>data\Matlab\v.mat</Link> <Link>data\Matlab\v.mat</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

Loading…
Cancel
Save