Browse Source

LA: explicitly demand a fully mutable matrix on SameAs in a few places #446

v3
Christoph Ruegg 10 years ago
parent
commit
8accea1628
  1. 2
      src/Numerics/LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs
  2. 2
      src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs
  3. 4
      src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs
  4. 2
      src/Numerics/LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs
  5. 2
      src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs
  6. 4
      src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs
  7. 2
      src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs
  8. 2
      src/Numerics/LinearAlgebra/Double/Factorization/UserGramSchmidt.cs
  9. 2
      src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs
  10. 4
      src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs
  11. 2
      src/Numerics/LinearAlgebra/Factorization/Cholesky.cs
  12. 2
      src/Numerics/LinearAlgebra/Factorization/Evd.cs
  13. 2
      src/Numerics/LinearAlgebra/Factorization/LU.cs
  14. 2
      src/Numerics/LinearAlgebra/Factorization/QR.cs
  15. 2
      src/Numerics/LinearAlgebra/Factorization/Svd.cs
  16. 2
      src/Numerics/LinearAlgebra/Matrix.Solve.cs
  17. 2
      src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs
  18. 2
      src/Numerics/LinearAlgebra/Single/Factorization/UserGramSchmidt.cs
  19. 2
      src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs
  20. 4
      src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs

2
src/Numerics/LinearAlgebra/Complex/Factorization/UserGramSchmidt.cs

@ -64,7 +64,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
}
var q = matrix.Clone();
var r = Matrix<Complex>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount);
var r = Matrix<Complex>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true);
for (var k = 0; k < q.ColumnCount; k++)
{

2
src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs

@ -76,7 +76,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
if (method == QRMethod.Full)
{
r = matrix.Clone();
q = Matrix<Complex>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount);
q = Matrix<Complex>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true);
for (var i = 0; i < matrix.RowCount; i++)
{

4
src/Numerics/LinearAlgebra/Complex/Factorization/UserSvd.cs

@ -69,8 +69,8 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
var matrixCopy = matrix.Clone();
var s = Vector<Complex>.Build.SameAs(matrixCopy, nm);
var u = Matrix<Complex>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount);
var vt = Matrix<Complex>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount);
var u = Matrix<Complex>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true);
var vt = Matrix<Complex>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true);
const int maxiter = 1000;
var e = new Complex[matrixCopy.ColumnCount];

2
src/Numerics/LinearAlgebra/Complex32/Factorization/UserGramSchmidt.cs

@ -59,7 +59,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
}
var q = matrix.Clone();
var r = Matrix<Complex32>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount);
var r = Matrix<Complex32>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true);
for (var k = 0; k < q.ColumnCount; k++)
{

2
src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs

@ -71,7 +71,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
if (method == QRMethod.Full)
{
r = matrix.Clone();
q = Matrix<Complex32>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount);
q = Matrix<Complex32>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true);
for (var i = 0; i < matrix.RowCount; i++)
{

4
src/Numerics/LinearAlgebra/Complex32/Factorization/UserSvd.cs

@ -64,8 +64,8 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
var matrixCopy = matrix.Clone();
var s = Vector<Complex32>.Build.SameAs(matrixCopy, nm);
var u = Matrix<Complex32>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount);
var vt = Matrix<Complex32>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount);
var u = Matrix<Complex32>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true);
var vt = Matrix<Complex32>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true);
const int maxiter = 1000;
var e = new Complex32[matrixCopy.ColumnCount];

2
src/Numerics/LinearAlgebra/Double/Factorization/UserEvd.cs

@ -74,7 +74,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
var order = matrix.RowCount;
// Initialize matricies for eigenvalues and eigenvectors
var eigenVectors = Matrix<double>.Build.SameAs(matrix, order, order);
var eigenVectors = Matrix<double>.Build.SameAs(matrix, order, order, fullyMutable: true);
var blockDiagonal = Matrix<double>.Build.SameAs(matrix, order, order);
var eigenValues = new LinearAlgebra.Complex.DenseVector(order);

2
src/Numerics/LinearAlgebra/Double/Factorization/UserGramSchmidt.cs

@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
}
var q = matrix.Clone();
var r = Matrix<double>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount);
var r = Matrix<double>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true);
for (var k = 0; k < q.ColumnCount; k++)
{

2
src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs

@ -69,7 +69,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
if (method == QRMethod.Full)
{
r = matrix.Clone();
q = Matrix<double>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount);
q = Matrix<double>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true);
for (var i = 0; i < matrix.RowCount; i++)
{

4
src/Numerics/LinearAlgebra/Double/Factorization/UserSvd.cs

@ -62,8 +62,8 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
var matrixCopy = matrix.Clone();
var s = Vector<double>.Build.SameAs(matrixCopy, nm);
var u = Matrix<double>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount);
var vt = Matrix<double>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount);
var u = Matrix<double>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true);
var vt = Matrix<double>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true);
const int maxiter = 1000;
var e = new double[matrixCopy.ColumnCount];

2
src/Numerics/LinearAlgebra/Factorization/Cholesky.cs

@ -71,7 +71,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization
/// <returns>The left hand side <see cref="Matrix{T}"/>, <b>X</b>.</returns>
public virtual Matrix<T> Solve(Matrix<T> input)
{
var x = Matrix<T>.Build.SameAs(input, input.RowCount, input.ColumnCount);
var x = Matrix<T>.Build.SameAs(input, input.RowCount, input.ColumnCount, fullyMutable: true);
Solve(input, x);
return x;
}

2
src/Numerics/LinearAlgebra/Factorization/Evd.cs

@ -108,7 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization
/// <returns>The left hand side <see cref="Matrix{T}"/>, <b>X</b>.</returns>
public virtual Matrix<T> Solve(Matrix<T> input)
{
var x = Matrix<T>.Build.SameAs(EigenVectors, EigenVectors.ColumnCount, input.ColumnCount);
var x = Matrix<T>.Build.SameAs(EigenVectors, EigenVectors.ColumnCount, input.ColumnCount, fullyMutable: true);
Solve(input, x);
return x;
}

2
src/Numerics/LinearAlgebra/Factorization/LU.cs

@ -110,7 +110,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization
/// <returns>The left hand side <see cref="Matrix{T}"/>, <b>X</b>.</returns>
public virtual Matrix<T> Solve(Matrix<T> input)
{
var x = Matrix<T>.Build.SameAs(input, input.RowCount, input.ColumnCount);
var x = Matrix<T>.Build.SameAs(input, input.RowCount, input.ColumnCount, fullyMutable: true);
Solve(input, x);
return x;
}

2
src/Numerics/LinearAlgebra/Factorization/QR.cs

@ -108,7 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization
/// <returns>The left hand side <see cref="Matrix{T}"/>, <b>X</b>.</returns>
public virtual Matrix<T> Solve(Matrix<T> input)
{
var x = Matrix<T>.Build.SameAs(input, FullR.ColumnCount, input.ColumnCount);
var x = Matrix<T>.Build.SameAs(input, FullR.ColumnCount, input.ColumnCount, fullyMutable: true);
Solve(input, x);
return x;
}

2
src/Numerics/LinearAlgebra/Factorization/Svd.cs

@ -144,7 +144,7 @@ namespace MathNet.Numerics.LinearAlgebra.Factorization
throw new InvalidOperationException(Resources.SingularVectorsNotComputed);
}
var x = Matrix<T>.Build.SameAs(U, VT.ColumnCount, input.ColumnCount);
var x = Matrix<T>.Build.SameAs(U, VT.ColumnCount, input.ColumnCount, fullyMutable: true);
Solve(input, x);
return x;
}

2
src/Numerics/LinearAlgebra/Matrix.Solve.cs

@ -126,7 +126,7 @@ namespace MathNet.Numerics.LinearAlgebra
/// <returns>The left hand side <see cref="Matrix{T}"/>, <b>X</b>.</returns>
public Matrix<T> Solve(Matrix<T> input)
{
var x = Build.SameAs(this, ColumnCount, input.ColumnCount);
var x = Build.SameAs(this, ColumnCount, input.ColumnCount, fullyMutable: true);
Solve(input, x);
return x;
}

2
src/Numerics/LinearAlgebra/Single/Factorization/UserEvd.cs

@ -73,7 +73,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
var order = matrix.RowCount;
// Initialize matricies for eigenvalues and eigenvectors
var eigenVectors = Matrix<float>.Build.SameAs(matrix, order, order);
var eigenVectors = Matrix<float>.Build.SameAs(matrix, order, order, fullyMutable: true);
var blockDiagonal = Matrix<float>.Build.SameAs(matrix, order, order);
var eigenValues = new LinearAlgebra.Complex.DenseVector(order);

2
src/Numerics/LinearAlgebra/Single/Factorization/UserGramSchmidt.cs

@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
}
var q = matrix.Clone();
var r = Matrix<float>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount);
var r = Matrix<float>.Build.SameAs(matrix, matrix.ColumnCount, matrix.ColumnCount, fullyMutable: true);
for (var k = 0; k < q.ColumnCount; k++)
{

2
src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs

@ -69,7 +69,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
if (method == QRMethod.Full)
{
r = matrix.Clone();
q = Matrix<float>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount);
q = Matrix<float>.Build.SameAs(matrix, matrix.RowCount, matrix.RowCount, fullyMutable: true);
for (var i = 0; i < matrix.RowCount; i++)
{

4
src/Numerics/LinearAlgebra/Single/Factorization/UserSvd.cs

@ -62,8 +62,8 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
var matrixCopy = matrix.Clone();
var s = Vector<float>.Build.SameAs(matrixCopy, nm);
var u = Matrix<float>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount);
var vt = Matrix<float>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount);
var u = Matrix<float>.Build.SameAs(matrixCopy, matrixCopy.RowCount, matrixCopy.RowCount, fullyMutable: true);
var vt = Matrix<float>.Build.SameAs(matrixCopy, matrixCopy.ColumnCount, matrixCopy.ColumnCount, fullyMutable: true);
const int maxiter = 1000;
var e = new float[matrixCopy.ColumnCount];

Loading…
Cancel
Save