Browse Source

norm: updated the rest of the dense matrices to use the la provider norm

la-knuth
Marcus Cuda 16 years ago
parent
commit
8c0d31beff
  1. 41
      src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs
  2. 41
      src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs
  3. 41
      src/Numerics/LinearAlgebra/Single/DenseMatrix.cs

41
src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs

@ -28,6 +28,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
{
using System;
using System.Numerics;
using Algorithms.LinearAlgebra;
using Generic;
using Properties;
using Threading;
@ -222,55 +223,21 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
/// <returns>The L1 norm of the matrix.</returns>
public override Complex L1Norm()
{
var norm = 0.0;
for (var j = 0; j < ColumnCount; j++)
{
var s = 0.0;
for (var i = 0; i < RowCount; i++)
{
s += Data[(j * RowCount) + i].Magnitude;
}
norm = Math.Max(norm, s);
}
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, RowCount, ColumnCount, Data);
}
/// <summary>Calculates the Frobenius norm of this matrix.</summary>
/// <returns>The Frobenius norm of this matrix.</returns>
public override Complex FrobeniusNorm()
{
var transpose = (DenseMatrix)Transpose();
var aat = (DenseMatrix)(this * transpose);
var norm = 0.0;
for (var i = 0; i < RowCount; i++)
{
norm += aat.Data[(i * RowCount) + i].Magnitude;
}
norm = Math.Sqrt(norm);
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, RowCount, ColumnCount, Data);
}
/// <summary>Calculates the infinity norm of this matrix.</summary>
/// <returns>The infinity norm of this matrix.</returns>
public override Complex InfinityNorm()
{
var norm = 0.0;
for (var i = 0; i < RowCount; i++)
{
var s = 0.0;
for (var j = 0; j < ColumnCount; j++)
{
s += Data[(j * RowCount) + i].Magnitude;
}
norm = Math.Max(norm, s);
}
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, RowCount, ColumnCount, Data);
}
#region Elementary operations

41
src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs

@ -27,6 +27,7 @@
namespace MathNet.Numerics.LinearAlgebra.Complex32
{
using System;
using Algorithms.LinearAlgebra;
using Generic;
using Numerics;
using Properties;
@ -222,55 +223,21 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
/// <returns>The L1 norm of the matrix.</returns>
public override Complex32 L1Norm()
{
var norm = 0.0f;
for (var j = 0; j < ColumnCount; j++)
{
var s = 0.0f;
for (var i = 0; i < RowCount; i++)
{
s += Data[(j * RowCount) + i].Magnitude;
}
norm = Math.Max(norm, s);
}
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, RowCount, ColumnCount, Data);
}
/// <summary>Calculates the Frobenius norm of this matrix.</summary>
/// <returns>The Frobenius norm of this matrix.</returns>
public override Complex32 FrobeniusNorm()
{
var transpose = (DenseMatrix)Transpose();
var aat = (DenseMatrix)(this * transpose);
var norm = 0.0f;
for (var i = 0; i < RowCount; i++)
{
norm += aat.Data[(i * RowCount) + i].Magnitude;
}
norm = Convert.ToSingle(Math.Sqrt(norm));
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, RowCount, ColumnCount, Data);
}
/// <summary>Calculates the infinity norm of this matrix.</summary>
/// <returns>The infinity norm of this matrix.</returns>
public override Complex32 InfinityNorm()
{
var norm = 0.0f;
for (var i = 0; i < RowCount; i++)
{
var s = 0.0f;
for (var j = 0; j < ColumnCount; j++)
{
s += Data[(j * RowCount) + i].Magnitude;
}
norm = Math.Max(norm, s);
}
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, RowCount, ColumnCount, Data);
}
#region Elementary operations

41
src/Numerics/LinearAlgebra/Single/DenseMatrix.cs

@ -27,6 +27,7 @@
namespace MathNet.Numerics.LinearAlgebra.Single
{
using System;
using Algorithms.LinearAlgebra;
using Generic;
using Properties;
using Threading;
@ -221,55 +222,21 @@ namespace MathNet.Numerics.LinearAlgebra.Single
/// <returns>The L1 norm of the matrix.</returns>
public override float L1Norm()
{
var norm = 0.0f;
for (var j = 0; j < ColumnCount; j++)
{
var s = 0.0f;
for (var i = 0; i < RowCount; i++)
{
s += Math.Abs(Data[(j * RowCount) + i]);
}
norm = Math.Max(norm, s);
}
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, RowCount, ColumnCount, Data);
}
/// <summary>Calculates the Frobenius norm of this matrix.</summary>
/// <returns>The Frobenius norm of this matrix.</returns>
public override float FrobeniusNorm()
{
var transpose = (DenseMatrix)Transpose();
var aat = (DenseMatrix)(this * transpose);
var norm = 0.0f;
for (var i = 0; i < RowCount; i++)
{
norm += Math.Abs(aat.Data[(i * RowCount) + i]);
}
norm = Convert.ToSingle(Math.Sqrt(norm));
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, RowCount, ColumnCount, Data);
}
/// <summary>Calculates the infinity norm of this matrix.</summary>
/// <returns>The infinity norm of this matrix.</returns>
public override float InfinityNorm()
{
var norm = 0.0f;
for (var i = 0; i < RowCount; i++)
{
var s = 0.0f;
for (var j = 0; j < ColumnCount; j++)
{
s += Math.Abs(Data[(j * RowCount) + i]);
}
norm = Math.Max(norm, s);
}
return norm;
return Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, RowCount, ColumnCount, Data);
}
#region Elementary operations

Loading…
Cancel
Save