From 07162fb76f28e4dee4dcb3a27a1fdadbb3a5cd9b Mon Sep 17 00:00:00 2001 From: Marcus Cuda Date: Fri, 12 Nov 2010 21:57:48 +0800 Subject: [PATCH] native: finished matrix norms --- .../Double/LinearAlgebraProviderTests.cs | 19 ++++++++++++- src/NativeWrappers/.gitignore | 4 ++- src/NativeWrappers/MKL/lapack.cpp | 20 ++++++++++++++ src/NativeWrappers/Windows/Local.testsettings | 22 ++++++++++++--- .../MKLWrapper32Tests.csproj | 22 ++++++++++++--- .../MKLWrapper64Tests.csproj | 27 ++++++++++++++----- src/NativeWrappers/Windows/NativeWrappers.sln | 8 +++--- .../Windows/TraceAndTestImpact.testsettings | 24 +++++++++++++---- .../LinearAlgebra/native.common.include | 8 +++--- .../LinearAlgebra/safe.native.common.include | 8 +++--- 10 files changed, 130 insertions(+), 32 deletions(-) diff --git a/src/MSUnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs b/src/MSUnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs index ca7906d1..127b9a73 100644 --- a/src/MSUnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs +++ b/src/MSUnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs @@ -187,7 +187,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double var matrix = _matrices["Square3x3"]; var work = new double[matrix.RowCount]; var norm = Provider.MatrixNorm(Norm.OneNorm, matrix.RowCount, matrix.ColumnCount, matrix.Data, work); - Assert.AreEqual(1.1, norm); + AssertHelpers.AlmostEqual(12.1, norm, 6); } /// @@ -196,6 +196,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double [TestMethod] public void CanComputeMatrixFrobeniusNorm() { + var matrix = _matrices["Square3x3"]; + var work = new double[matrix.RowCount]; + var norm = Provider.MatrixNorm(Norm.FrobeniusNorm, matrix.RowCount, matrix.ColumnCount, matrix.Data, work); + AssertHelpers.AlmostEqual(10.777754868246, norm, 8); } /// @@ -204,6 +208,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double [TestMethod] public void CanComputeMatrixInfinityNorm() { + var matrix = _matrices["Square3x3"]; + var work = new double[matrix.RowCount]; + var norm = Provider.MatrixNorm(Norm.InfinityNorm, matrix.RowCount, matrix.ColumnCount, matrix.Data, work); + Assert.AreEqual(16.5, norm); } /// @@ -212,6 +220,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double [TestMethod] public void CanComputeMatrixL1NormWithWorkArray() { + var matrix = _matrices["Square3x3"]; + var norm = Provider.MatrixNorm(Norm.OneNorm, matrix.RowCount, matrix.ColumnCount, matrix.Data); + AssertHelpers.AlmostEqual(12.1, norm, 6); } /// @@ -220,6 +231,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double [TestMethod] public void CanComputeMatrixFrobeniusNormWithWorkArray() { + var matrix = _matrices["Square3x3"]; + var norm = Provider.MatrixNorm(Norm.FrobeniusNorm, matrix.RowCount, matrix.ColumnCount, matrix.Data); + AssertHelpers.AlmostEqual(10.777754868246, norm, 8); } /// @@ -228,6 +242,9 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double [TestMethod] public void CanComputeMatrixInfinityNormWithWorkArray() { + var matrix = _matrices["Square3x3"]; + var norm = Provider.MatrixNorm(Norm.InfinityNorm, matrix.RowCount, matrix.ColumnCount, matrix.Data); + Assert.AreEqual(16.5, norm); } /// diff --git a/src/NativeWrappers/.gitignore b/src/NativeWrappers/.gitignore index 48e14831..bc8863d1 100644 --- a/src/NativeWrappers/.gitignore +++ b/src/NativeWrappers/.gitignore @@ -1,3 +1,5 @@ *.aps Debug -Release \ No newline at end of file +Release +ipch +*.opensdf \ No newline at end of file diff --git a/src/NativeWrappers/MKL/lapack.cpp b/src/NativeWrappers/MKL/lapack.cpp index a9c6f98d..350860c9 100644 --- a/src/NativeWrappers/MKL/lapack.cpp +++ b/src/NativeWrappers/MKL/lapack.cpp @@ -69,4 +69,24 @@ extern "C" { } return info; } + + DLLEXPORT float s_matrix_norm(char norm, int m, int n, float a[], float work[]) + { + return SLANGE(&norm, &m, &n, a, &m, work); + } + + DLLEXPORT double d_matrix_norm(char norm, int m, int n, double a[], double work[]) + { + return DLANGE(&norm, &m, &n, a, &m, work); + } + + DLLEXPORT float c_matrix_norm(char norm, int m, int n, MKL_Complex8 a[], float work[]) + { + return CLANGE(&norm, &m, &n, a, &m, work); + } + + DLLEXPORT double z_matrix_norm(char norm, int m, int n, MKL_Complex16 a[], double work[]) + { + return ZLANGE(&norm, &m, &n, a, &m, work); + } } \ No newline at end of file diff --git a/src/NativeWrappers/Windows/Local.testsettings b/src/NativeWrappers/Windows/Local.testsettings index e956c469..b03db2a4 100644 --- a/src/NativeWrappers/Windows/Local.testsettings +++ b/src/NativeWrappers/Windows/Local.testsettings @@ -2,9 +2,25 @@ These are default test settings for a local test run. - - - + + + + + + + + + + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/src/NativeWrappers/Windows/MKLWrapper32Tests/MKLWrapper32Tests.csproj b/src/NativeWrappers/Windows/MKLWrapper32Tests/MKLWrapper32Tests.csproj index 1d30bef9..2c527cc0 100644 --- a/src/NativeWrappers/Windows/MKLWrapper32Tests/MKLWrapper32Tests.csproj +++ b/src/NativeWrappers/Windows/MKLWrapper32Tests/MKLWrapper32Tests.csproj @@ -56,16 +56,14 @@ - ..\..\..\MSUnitTests\bin\Debug\MathNet.Numerics.dll - - - ..\..\..\MSUnitTests\bin\Debug\MathNet.Numerics.MSUnitTests.dll + ..\..\..\..\out\debug\Net40\MathNet.Numerics.dll 3.5 + 3.5 @@ -76,6 +74,12 @@ + + AssertHelpers.cs + + + LinearAlgebra\Double\LinearAlgebraProviderTests.cs + @@ -96,6 +100,16 @@ true + + + libiomp5md.dll + Always + + + MathNET.Numerics.MKL.dll + Always + +