Browse Source

Add SymmetricMatrixStorage

Signed-off-by: Alexander Karatarakis <alex@karatarakis.com>
pull/59/head
Alexander Karatarakis 14 years ago
parent
commit
c606b329b8
  1. 6
      src/Numerics/LinearAlgebra/Storage/DenseColumnMajorSymmetricMatrixStorage.cs
  2. 52
      src/Numerics/LinearAlgebra/Storage/SymmetricMatrixStorage.cs
  3. 1
      src/Numerics/Numerics.csproj

6
src/Numerics/LinearAlgebra/Storage/DenseColumnMajorSymmetricMatrixStorage.cs

@ -5,7 +5,7 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
using MathNet.Numerics.LinearAlgebra.Storage.Indexers.Static;
using MathNet.Numerics.Properties;
public class DenseColumnMajorSymmetricMatrixStorage<T> : MatrixStorage<T>
public class DenseColumnMajorSymmetricMatrixStorage<T> : SymmetricMatrixStorage<T>
where T : struct, IEquatable<T>, IFormattable
{
// [ruegg] public fields are OK here
@ -15,14 +15,14 @@ namespace MathNet.Numerics.LinearAlgebra.Storage
public readonly PackedStorageIndexerUpper Indexer;
internal DenseColumnMajorSymmetricMatrixStorage(int order)
: base(order, order)
: base(order)
{
Indexer = new PackedStorageIndexerUpper(order);
Data = new T[Indexer.DataLength];
}
internal DenseColumnMajorSymmetricMatrixStorage(int order, T[] data)
: base(order, order)
: base(order)
{
if (data == null)
{

52
src/Numerics/LinearAlgebra/Storage/SymmetricMatrixStorage.cs

@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MathNet.Numerics.LinearAlgebra.Storage
{
using MathNet.Numerics.Properties;
public abstract class SymmetricMatrixStorage<T> : MatrixStorage<T>
where T : struct, IEquatable<T>, IFormattable
{
// [ruegg] public fields are OK here
protected SymmetricMatrixStorage(int order)
: base(order, order)
{
}
public override bool IsFullyMutable
{
get { return false; }
}
public override bool IsMutable(int row, int column)
{
return row <= column;
}
public override void Clear()
{
for (var i = 0; i < RowCount; i++)
{
for (var j = i; j < ColumnCount; j++)
{
At(i, j, default(T));
}
}
}
public override void Clear(int rowIndex, int rowCount, int columnIndex, int columnCount)
{
for (var i = rowIndex; i < rowIndex + rowCount; i++)
{
for (var j = Math.Max(columnIndex, i); j < columnIndex + columnCount; j++)
{
At(i, j, default(T));
}
}
}
}
}

1
src/Numerics/Numerics.csproj

@ -359,6 +359,7 @@
<Compile Include="LinearAlgebra\Storage\MatrixStorage.cs" />
<Compile Include="LinearAlgebra\Storage\SparseCompressedRowMatrixStorage.cs" />
<Compile Include="LinearAlgebra\Storage\DiagonalMatrixStorage.cs" />
<Compile Include="LinearAlgebra\Storage\SymmetricMatrixStorage.cs" />
<Compile Include="LinearAlgebra\Storage\VectorStorage.cs" />
<Compile Include="LinearAlgebra\Storage\VectorStorage.Validation.cs" />
<Compile Include="Permutation.cs" />

Loading…
Cancel
Save