Browse Source

LA: diagonal matrix OfArray

pull/112/head
Christoph Ruegg 14 years ago
parent
commit
3535483489
  1. 17
      src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs
  2. 17
      src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs
  3. 17
      src/Numerics/LinearAlgebra/Double/DiagonalMatrix.cs
  4. 17
      src/Numerics/LinearAlgebra/Single/DiagonalMatrix.cs
  5. 20
      src/Numerics/LinearAlgebra/Storage/DiagonalMatrixStorage.cs

17
src/Numerics/LinearAlgebra/Complex/DiagonalMatrix.cs

@ -138,22 +138,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
/// </summary>
public static DiagonalMatrix OfArray(Complex[,] array)
{
var storage = new DiagonalMatrixStorage<Complex>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
if (i == j)
{
storage.Data[i] = array[i, j];
}
else if (((array[i, j].Real != 0d) && !double.IsNaN(array[i, j].Real)) || ((array[i, j].Imaginary != 0d) && !double.IsNaN(array[i, j].Imaginary)))
{
throw new IndexOutOfRangeException("Cannot set an off-diagonal element in a diagonal matrix.");
}
}
}
return new DiagonalMatrix(storage);
return new DiagonalMatrix(DiagonalMatrixStorage<Complex>.OfArray(array));
}
/// <summary>

17
src/Numerics/LinearAlgebra/Complex32/DiagonalMatrix.cs

@ -138,22 +138,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
/// </summary>
public static DiagonalMatrix OfArray(Complex32[,] array)
{
var storage = new DiagonalMatrixStorage<Complex32>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
if (i == j)
{
storage.Data[i] = array[i, j];
}
else if (((array[i, j].Real != 0f) && !float.IsNaN(array[i, j].Real)) || ((array[i, j].Imaginary != 0f) && !float.IsNaN(array[i, j].Imaginary)))
{
throw new IndexOutOfRangeException("Cannot set an off-diagonal element in a diagonal matrix.");
}
}
}
return new DiagonalMatrix(storage);
return new DiagonalMatrix(DiagonalMatrixStorage<Complex32>.OfArray(array));
}
/// <summary>

17
src/Numerics/LinearAlgebra/Double/DiagonalMatrix.cs

@ -137,22 +137,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
/// </summary>
public static DiagonalMatrix OfArray(double[,] array)
{
var storage = new DiagonalMatrixStorage<double>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
if (i == j)
{
storage.Data[i] = array[i, j];
}
else if (array[i, j] != 0d && !double.IsNaN(array[i, j]))
{
throw new IndexOutOfRangeException("Cannot set an off-diagonal element in a diagonal matrix.");
}
}
}
return new DiagonalMatrix(storage);
return new DiagonalMatrix(DiagonalMatrixStorage<double>.OfArray(array));
}
/// <summary>

17
src/Numerics/LinearAlgebra/Single/DiagonalMatrix.cs

@ -137,22 +137,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single
/// </summary>
public static DiagonalMatrix OfArray(float[,] array)
{
var storage = new DiagonalMatrixStorage<float>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
if (i == j)
{
storage.Data[i] = array[i, j];
}
else if (array[i, j] != 0f && !float.IsNaN(array[i, j]))
{
throw new IndexOutOfRangeException("Cannot set an off-diagonal element in a diagonal matrix.");
}
}
}
return new DiagonalMatrix(storage);
return new DiagonalMatrix(DiagonalMatrixStorage<float>.OfArray(array));
}
/// <summary>

20
src/Numerics/LinearAlgebra/Storage/DiagonalMatrixStorage.cs

@ -179,6 +179,26 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
return storage;
}
public static DiagonalMatrixStorage<T> OfArray(T[,] array)
{
var storage = new DiagonalMatrixStorage<T>(array.GetLength(0), array.GetLength(1));
for (var i = 0; i < storage.RowCount; i++)
{
for (var j = 0; j < storage.ColumnCount; j++)
{
if (i == j)
{
storage.Data[i] = array[i, j];
}
else if (!Zero.Equals(array[i, j]))
{
throw new IndexOutOfRangeException("Cannot set an off-diagonal element in a diagonal matrix.");
}
}
}
return storage;
}
// MATRIX COPY
internal override void CopyToUnchecked(MatrixStorage<T> target, bool skipClearing = false)

Loading…
Cancel
Save