diff --git a/src/UnitTests/LinearAlgebraProviderTests/Complex/LinearAlgebraProviderTests.cs b/src/UnitTests/LinearAlgebraProviderTests/Complex/LinearAlgebraProviderTests.cs
index 0ddbdaa1..678bee80 100644
--- a/src/UnitTests/LinearAlgebraProviderTests/Complex/LinearAlgebraProviderTests.cs
+++ b/src/UnitTests/LinearAlgebraProviderTests/Complex/LinearAlgebraProviderTests.cs
@@ -3,7 +3,9 @@
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
-// Copyright (c) 2009-2010 Math.NET
+//
+// Copyright (c) 2009-2013 Math.NET
+//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
@@ -12,8 +14,10 @@
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
+//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
+//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -45,30 +49,30 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
///
/// The Y Complex test vector.
///
- private readonly Complex[] _y = new[] { new Complex(1.1, 0), 2.2, 3.3, 4.4, 5.5 };
+ readonly Complex[] _y = new[] {new Complex(1.1, 0), 2.2, 3.3, 4.4, 5.5};
///
/// The X Complex test vector.
///
- private readonly Complex[] _x = new[] { new Complex(6.6, 0), 7.7, 8.8, 9.9, 10.1 };
+ readonly Complex[] _x = new[] {new Complex(6.6, 0), 7.7, 8.8, 9.9, 10.1};
- private static readonly IContinuousDistribution Dist = new Normal();
+ static readonly IContinuousDistribution Dist = new Normal();
///
/// Test matrix to use.
///
readonly IDictionary _matrices = new Dictionary
- {
- { "Singular3x3", new DenseMatrix(new[,] { { new Complex(1.0, 0), 1.0, 2.0 }, { 1.0, 1.0, 2.0 }, { 1.0, 1.0, 2.0 } }) },
- { "Square3x3", new DenseMatrix(new[,] { { new Complex(-1.1, 0), -2.2, -3.3 }, { 0.0, 1.1, 2.2 }, { -4.4, 5.5, 6.6 } }) },
- { "Square4x4", new DenseMatrix(new[,] { { new Complex(-1.1, 0), -2.2, -3.3, -4.4 }, { 0.0, 1.1, 2.2, 3.3 }, { 1.0, 2.1, 6.2, 4.3 }, { -4.4, 5.5, 6.6, -7.7 } }) },
- { "Singular4x4", new DenseMatrix(new[,] { { new Complex(-1.1, 0), -2.2, -3.3, -4.4 }, { -1.1, -2.2, -3.3, -4.4 }, { -1.1, -2.2, -3.3, -4.4 }, { -1.1, -2.2, -3.3, -4.4 } }) },
- { "Tall3x2", new DenseMatrix(new[,] { { new Complex(-1.1, 0), -2.2 }, { 0.0, 1.1 }, { -4.4, 5.5 } }) },
- { "Wide2x3", new DenseMatrix(new[,] { { new Complex(-1.1, 0), -2.2, -3.3 }, { 0.0, 1.1, 2.2 } }) },
- { "Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist) },
- { "Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist) },
- { "Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist) }
- };
+ {
+ {"Singular3x3", new DenseMatrix(new[,] {{new Complex(1.0, 0), 1.0, 2.0}, {1.0, 1.0, 2.0}, {1.0, 1.0, 2.0}})},
+ {"Square3x3", new DenseMatrix(new[,] {{new Complex(-1.1, 0), -2.2, -3.3}, {0.0, 1.1, 2.2}, {-4.4, 5.5, 6.6}})},
+ {"Square4x4", new DenseMatrix(new[,] {{new Complex(-1.1, 0), -2.2, -3.3, -4.4}, {0.0, 1.1, 2.2, 3.3}, {1.0, 2.1, 6.2, 4.3}, {-4.4, 5.5, 6.6, -7.7}})},
+ {"Singular4x4", new DenseMatrix(new[,] {{new Complex(-1.1, 0), -2.2, -3.3, -4.4}, {-1.1, -2.2, -3.3, -4.4}, {-1.1, -2.2, -3.3, -4.4}, {-1.1, -2.2, -3.3, -4.4}})},
+ {"Tall3x2", new DenseMatrix(new[,] {{new Complex(-1.1, 0), -2.2}, {0.0, 1.1}, {-4.4, 5.5}})},
+ {"Wide2x3", new DenseMatrix(new[,] {{new Complex(-1.1, 0), -2.2, -3.3}, {0.0, 1.1, 2.2}})},
+ {"Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist)},
+ {"Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist)},
+ {"Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist)}
+ };
///
/// Can add a vector to scaled vector
@@ -95,7 +99,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
Control.LinearAlgebraProvider.AddVectorToScaledVector(result, Math.PI, _x, result);
for (var i = 0; i < _y.Length; i++)
{
- Assert.AreEqual(_y[i] + (Math.PI * _x[i]), result[i]);
+ Assert.AreEqual(_y[i] + (Math.PI*_x[i]), result[i]);
}
}
@@ -117,7 +121,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
Control.LinearAlgebraProvider.ScaleArray(Math.PI, result, result);
for (var i = 0; i < _y.Length; i++)
{
- Assert.AreEqual(_y[i] * Math.PI, result[i]);
+ Assert.AreEqual(_y[i]*Math.PI, result[i]);
}
}
@@ -169,7 +173,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_x, _y, result);
for (var i = 0; i < result.Length; i++)
{
- Assert.AreEqual(_x[i] * _y[i], result[i]);
+ Assert.AreEqual(_x[i]*_y[i], result[i]);
}
}
@@ -183,7 +187,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
Control.LinearAlgebraProvider.PointWiseDivideArrays(_x, _y, result);
for (var i = 0; i < result.Length; i++)
{
- Assert.AreEqual(_x[i] / _y[i], result[i]);
+ Assert.AreEqual(_x[i]/_y[i], result[i]);
}
}
@@ -275,7 +279,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 15);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 15);
}
}
}
@@ -296,7 +300,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 15);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 15);
}
}
}
@@ -317,7 +321,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 15);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 15);
}
}
}
@@ -338,7 +342,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2 * x.Row(i) * y.Column(j), c[i, j], 15);
+ AssertHelpers.AlmostEqual(2.2*x.Row(i)*y.Column(j), c[i, j], 15);
}
}
}
@@ -359,7 +363,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2 * x.Row(i) * y.Column(j), c[i, j], 15);
+ AssertHelpers.AlmostEqual(2.2*x.Row(i)*y.Column(j), c[i, j], 15);
}
}
}
@@ -380,7 +384,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2 * x.Row(i) * y.Column(j), c[i, j], 15);
+ AssertHelpers.AlmostEqual(2.2*x.Row(i)*y.Column(j), c[i, j], 15);
}
}
}
@@ -392,7 +396,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeLuFactor()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -420,7 +424,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeLuInverse()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount);
@@ -444,7 +448,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeLuInverseOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -471,7 +475,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeLuInverseWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var work = new Complex[matrix.RowCount];
@@ -496,7 +500,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeLuInverseOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -524,10 +528,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingLU()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
Control.LinearAlgebraProvider.LUSolve(2, a, matrix.RowCount, b);
AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 14);
@@ -547,13 +551,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingLUOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
Control.LinearAlgebraProvider.LUSolveFactored(2, a, matrix.RowCount, ipiv, b);
AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 14);
@@ -570,7 +574,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
[Test]
public void CanComputeCholeskyFactor()
{
- var matrix = new Complex[] { 1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15 };
+ var matrix = new Complex[] {1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15};
Control.LinearAlgebraProvider.CholeskyFactor(matrix, 4);
Assert.AreEqual(matrix[0].Real, 1);
Assert.AreEqual(matrix[1].Real, 1);
@@ -596,10 +600,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
[Test]
public void CanSolveUsingCholesky()
{
- var matrix = new DenseMatrix(3, 3, new Complex[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 });
- var a = new Complex[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ var matrix = new DenseMatrix(3, 3, new Complex[] {1, 1, 1, 1, 2, 3, 1, 3, 6});
+ var a = new Complex[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
Control.LinearAlgebraProvider.CholeskySolve(a, 3, b, 2);
AssertHelpers.AlmostEqual(b[0], 0, 14);
@@ -618,11 +622,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
[Test]
public void CanSolveUsingCholeskyOnFactoredMatrix()
{
- var a = new Complex[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ var a = new Complex[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
Control.LinearAlgebraProvider.CholeskyFactor(a, 3);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
Control.LinearAlgebraProvider.CholeskySolveFactored(a, 3, b, 2);
AssertHelpers.AlmostEqual(b[0], 0, 14);
@@ -640,16 +644,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeQRFactorSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -667,16 +671,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeQRFactorTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -694,16 +698,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeQRFactorWideMatrix()
{
var matrix = _matrices["Wide2x3"];
- var r = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -721,17 +725,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeQRFactorSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
- var work = new Complex[matrix.ColumnCount * Control.BlockSize];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
+ var work = new Complex[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -749,17 +753,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeQRFactorTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
- var work = new Complex[matrix.ColumnCount * Control.BlockSize];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
+ var work = new Complex[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -777,17 +781,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeQRFactorWideMatrixWithWorkArray()
{
var matrix = _matrices["Wide2x3"];
- var r = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
- var work = new Complex[matrix.ColumnCount * Control.BlockSize];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
+ var work = new Complex[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -805,16 +809,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeThinQRFactorSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -832,16 +836,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeThinQRFactorTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -859,17 +863,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeThinQRFactorSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
- var work = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var work = new Complex[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -887,17 +891,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeThinQRFactorTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex[3];
- var q = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
- var work = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var work = new Complex[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
for (var col = 0; col < matrix.ColumnCount; col++)
@@ -914,17 +918,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
@@ -940,17 +944,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -966,18 +970,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRSquareMatrixUsingWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
- var work = new Complex[matrix.RowCount * matrix.RowCount];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
+ var work = new Complex[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -995,18 +999,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRTallMatrixUsingWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
- var work = new Complex[matrix.RowCount * matrix.RowCount];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
+ var work = new Complex[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1022,19 +1026,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var q = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var q = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1052,19 +1056,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1080,20 +1084,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRSquareMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.RowCount];
+ var a = new Complex[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var q = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var q = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex[2048];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1111,20 +1115,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingQRTallMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var q = new Complex[matrix.RowCount * matrix.RowCount];
+ var q = new Complex[matrix.RowCount*matrix.RowCount];
var work = new Complex[2048];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1139,17 +1143,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1166,17 +1170,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1192,18 +1196,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRSquareMatrixUsingWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
- var work = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
+ var work = new Complex[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1221,18 +1225,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRTallMatrixUsingWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
- var work = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
+ var work = new Complex[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1248,19 +1252,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1278,19 +1282,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1306,20 +1310,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex[2048];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1337,20 +1341,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingThinQRTallMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex[matrix.ColumnCount];
- var r = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex[2048];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1365,12 +1369,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeSVDFactorizationOfSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.RowCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1382,7 +1386,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
@@ -1402,12 +1406,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeSVDFactorizationOfTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.ColumnCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1419,7 +1423,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
@@ -1436,12 +1440,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeSVDFactorizationOfWideMatrix()
{
var matrix = _matrices["Wide2x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.RowCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1453,7 +1457,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
@@ -1471,12 +1475,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeSVDFactorizationOfSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.RowCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1489,7 +1493,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
@@ -1510,12 +1514,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeSVDFactorizationOfTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.ColumnCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1528,7 +1532,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
@@ -1546,12 +1550,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanComputeSVDFactorizationOfWideMatrixWithWorkArray()
{
var matrix = _matrices["Wide2x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.RowCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1564,7 +1568,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
@@ -1581,17 +1585,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingSVDSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1608,17 +1612,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingSVDTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1634,21 +1638,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingSVDSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.RowCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
@@ -1666,21 +1670,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
public void CanSolveUsingSVDTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex[matrix.ColumnCount];
- var u = new Complex[matrix.RowCount * matrix.RowCount];
- var vt = new Complex[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new Complex[matrix.ColumnCount * 2];
+ var b = new[] {new Complex(1.0, 0), 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new Complex[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
@@ -1690,12 +1694,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
[TestCase("Wide10x50000", "Tall50000x10")]
[TestCase("Square1000x1000", "Square1000x1000")]
- [Timeout(1000 * 10)]
+ [Timeout(1000*20)]
public void IsMatrixMultiplicationPerformant(string leftMatrixKey, string rightMatrixKey)
{
var leftMatrix = _matrices[leftMatrixKey];
var rightMatrix = _matrices[rightMatrixKey];
- var result = leftMatrix * rightMatrix;
+ var result = leftMatrix*rightMatrix;
Assert.That(result, Is.Not.Null);
}
@@ -1706,7 +1710,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex
/// number of columns.
/// array to check.
/// matrix to check against.
- private static void NotModified(int rows, int columns, IList array, Matrix matrix)
+ static void NotModified(int rows, int columns, IList array, Matrix matrix)
{
var index = 0;
for (var col = 0; col < columns; col++)
diff --git a/src/UnitTests/LinearAlgebraProviderTests/Complex32/LinearAlgebraProviderTests.cs b/src/UnitTests/LinearAlgebraProviderTests/Complex32/LinearAlgebraProviderTests.cs
index 2c95c04f..d306bb83 100644
--- a/src/UnitTests/LinearAlgebraProviderTests/Complex32/LinearAlgebraProviderTests.cs
+++ b/src/UnitTests/LinearAlgebraProviderTests/Complex32/LinearAlgebraProviderTests.cs
@@ -3,7 +3,9 @@
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
-// Copyright (c) 2009-2010 Math.NET
+//
+// Copyright (c) 2009-2013 Math.NET
+//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
@@ -12,8 +14,10 @@
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
+//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
+//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -45,30 +49,30 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
///
/// The Y Complex32 test vector.
///
- private readonly Complex32[] _y = new[] { new Complex32(1.1f, 0f), 2.2f, 3.3f, 4.4f, 5.5f };
+ readonly Complex32[] _y = new[] {new Complex32(1.1f, 0f), 2.2f, 3.3f, 4.4f, 5.5f};
///
/// The X Complex32 test vector.
///
- private readonly Complex32[] _x = new[] { new Complex32(6.6f, 0f), 7.7f, 8.8f, 9.9f, 10.1f };
+ readonly Complex32[] _x = new[] {new Complex32(6.6f, 0f), 7.7f, 8.8f, 9.9f, 10.1f};
- private static readonly IContinuousDistribution Dist = new Normal();
+ static readonly IContinuousDistribution Dist = new Normal();
///
/// Test matrix to use.
///
readonly IDictionary _matrices = new Dictionary
- {
- { "Singular3x3", new DenseMatrix(new[,] { { new Complex32(1.0f, 0.0f), 1.0f, 2.0f }, { 1.0f, 1.0f, 2.0f }, { 1.0f, 1.0f, 2.0f } }) },
- { "Square3x3", new DenseMatrix(new[,] { { new Complex32(-1.1f, 0.0f), -2.2f, -3.3f }, { 0.0f, 1.1f, 2.2f }, { -4.4f, 5.5f, 6.6f } }) },
- { "Square4x4", new DenseMatrix(new[,] { { new Complex32(-1.1f, 0.0f), -2.2f, -3.3f, -4.4f }, { 0.0f, 1.1f, 2.2f, 3.3f }, { 1.0f, 2.1f, 6.2f, 4.3f }, { -4.4f, 5.5f, 6.6f, -7.7f } }) },
- { "Singular4x4", new DenseMatrix(new[,] { { new Complex32(-1.1f, 0.0f), -2.2f, -3.3f, -4.4f }, { -1.1f, -2.2f, -3.3f, -4.4f }, { -1.1f, -2.2f, -3.3f, -4.4f }, { -1.1f, -2.2f, -3.3f, -4.4f } }) },
- { "Tall3x2", new DenseMatrix(new[,] { { new Complex32(-1.1f, 0.0f), -2.2f }, { 0.0f, 1.1f }, { -4.4f, 5.5f } }) },
- { "Wide2x3", new DenseMatrix(new[,] { { new Complex32(-1.1f, 0.0f), -2.2f, -3.3f }, { 0.0f, 1.1f, 2.2f } }) },
- { "Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist) },
- { "Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist) },
- { "Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist) }
- };
+ {
+ {"Singular3x3", new DenseMatrix(new[,] {{new Complex32(1.0f, 0.0f), 1.0f, 2.0f}, {1.0f, 1.0f, 2.0f}, {1.0f, 1.0f, 2.0f}})},
+ {"Square3x3", new DenseMatrix(new[,] {{new Complex32(-1.1f, 0.0f), -2.2f, -3.3f}, {0.0f, 1.1f, 2.2f}, {-4.4f, 5.5f, 6.6f}})},
+ {"Square4x4", new DenseMatrix(new[,] {{new Complex32(-1.1f, 0.0f), -2.2f, -3.3f, -4.4f}, {0.0f, 1.1f, 2.2f, 3.3f}, {1.0f, 2.1f, 6.2f, 4.3f}, {-4.4f, 5.5f, 6.6f, -7.7f}})},
+ {"Singular4x4", new DenseMatrix(new[,] {{new Complex32(-1.1f, 0.0f), -2.2f, -3.3f, -4.4f}, {-1.1f, -2.2f, -3.3f, -4.4f}, {-1.1f, -2.2f, -3.3f, -4.4f}, {-1.1f, -2.2f, -3.3f, -4.4f}})},
+ {"Tall3x2", new DenseMatrix(new[,] {{new Complex32(-1.1f, 0.0f), -2.2f}, {0.0f, 1.1f}, {-4.4f, 5.5f}})},
+ {"Wide2x3", new DenseMatrix(new[,] {{new Complex32(-1.1f, 0.0f), -2.2f, -3.3f}, {0.0f, 1.1f, 2.2f}})},
+ {"Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist)},
+ {"Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist)},
+ {"Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist)}
+ };
///
/// Can add a vector to scaled vector
@@ -92,10 +96,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
}
Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.AddVectorToScaledVector(result, (Complex32)Math.PI, _x, result);
+ Control.LinearAlgebraProvider.AddVectorToScaledVector(result, (Complex32) Math.PI, _x, result);
for (var i = 0; i < _y.Length; i++)
{
- AssertHelpers.AlmostEqual(_y[i] + ((Complex32)Math.PI * _x[i]), result[i], 6);
+ AssertHelpers.AlmostEqual(_y[i] + ((Complex32) Math.PI*_x[i]), result[i], 6);
}
}
@@ -114,10 +118,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
}
Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.ScaleArray((Complex32)Math.PI, result, result);
+ Control.LinearAlgebraProvider.ScaleArray((Complex32) Math.PI, result, result);
for (var i = 0; i < _y.Length; i++)
{
- AssertHelpers.AlmostEqual(_y[i] * (Complex32)Math.PI, result[i], 6);
+ AssertHelpers.AlmostEqual(_y[i]*(Complex32) Math.PI, result[i], 6);
}
}
@@ -169,7 +173,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_x, _y, result);
for (var i = 0; i < result.Length; i++)
{
- Assert.AreEqual(_x[i] * _y[i], result[i]);
+ Assert.AreEqual(_x[i]*_y[i], result[i]);
}
}
@@ -183,7 +187,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
Control.LinearAlgebraProvider.PointWiseDivideArrays(_x, _y, result);
for (var i = 0; i < result.Length; i++)
{
- Assert.AreEqual(_x[i] / _y[i], result[i]);
+ Assert.AreEqual(_x[i]/_y[i], result[i]);
}
}
@@ -275,7 +279,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -296,7 +300,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -317,7 +321,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -338,7 +342,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2f * x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(2.2f*x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -359,7 +363,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2f * x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(2.2f*x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -380,7 +384,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
{
for (var j = 0; j < c.ColumnCount; j++)
{
- var test = 2.2f * x.Row(i) * y.Column(j);
+ var test = 2.2f*x.Row(i)*y.Column(j);
// if they are both close to zero, skip
if (Math.Abs(test.Real) < 1e-7 && Math.Abs(c[i, j].Real) < 1e-7)
@@ -388,7 +392,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
continue;
}
- AssertHelpers.AlmostEqual(2.2f * x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(2.2f*x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -400,7 +404,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeLuFactor()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -428,7 +432,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeLuInverse()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount);
@@ -452,7 +456,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeLuInverseOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -479,7 +483,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeLuInverseWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var work = new Complex32[matrix.RowCount];
@@ -504,7 +508,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeLuInverseOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -532,10 +536,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingLU()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.LUSolve(2, a, matrix.RowCount, b);
AssertHelpers.AlmostEqual(b[0], -1.477272727272726f, 6);
@@ -555,13 +559,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingLUOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.LUSolveFactored(2, a, matrix.RowCount, ipiv, b);
AssertHelpers.AlmostEqual(b[0], -1.477272727272726f, 6);
@@ -578,7 +582,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
[Test]
public void CanComputeCholeskyFactor()
{
- var matrix = new Complex32[] { 1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15 };
+ var matrix = new Complex32[] {1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15};
Control.LinearAlgebraProvider.CholeskyFactor(matrix, 4);
Assert.AreEqual(matrix[0].Real, 1);
Assert.AreEqual(matrix[1].Real, 1);
@@ -604,10 +608,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
[Test]
public void CanSolveUsingCholesky()
{
- var matrix = new DenseMatrix(3, 3, new Complex32[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 });
- var a = new Complex32[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ var matrix = new DenseMatrix(3, 3, new Complex32[] {1, 1, 1, 1, 2, 3, 1, 3, 6});
+ var a = new Complex32[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.CholeskySolve(a, 3, b, 2);
AssertHelpers.AlmostEqual(b[0], 0, 6);
@@ -626,11 +630,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
[Test]
public void CanSolveUsingCholeskyOnFactoredMatrix()
{
- var a = new Complex32[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ var a = new Complex32[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
Control.LinearAlgebraProvider.CholeskyFactor(a, 3);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.CholeskySolveFactored(a, 3, b, 2);
AssertHelpers.AlmostEqual(b[0], 0, 6);
@@ -648,16 +652,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeQRFactorSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -675,16 +679,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeQRFactorTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -702,16 +706,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeQRFactorWideMatrix()
{
var matrix = _matrices["Wide2x3"];
- var r = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -729,17 +733,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeQRFactorSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
- var work = new Complex32[matrix.ColumnCount * Control.BlockSize];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
+ var work = new Complex32[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -757,17 +761,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeQRFactorTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
- var work = new Complex32[matrix.ColumnCount * Control.BlockSize];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
+ var work = new Complex32[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -785,17 +789,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeQRFactorWideMatrixWithWorkArray()
{
var matrix = _matrices["Wide2x3"];
- var r = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
- var work = new Complex32[matrix.ColumnCount * Control.BlockSize];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
+ var work = new Complex32[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -813,16 +817,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeThinQRFactorSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -840,16 +844,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeThinQRFactorTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -867,17 +871,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeThinQRFactorSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
- var work = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var work = new Complex32[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -895,17 +899,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeThinQRFactorTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var tau = new Complex32[3];
- var q = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var q = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
- var work = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var work = new Complex32[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
for (var col = 0; col < matrix.ColumnCount; col++)
@@ -922,17 +926,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -949,17 +953,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -975,18 +979,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRSquareMatrixUsingWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
- var work = new Complex32[matrix.RowCount * matrix.RowCount];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
+ var work = new Complex32[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1004,18 +1008,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRTallMatrixUsingWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
- var work = new Complex32[matrix.RowCount * matrix.RowCount];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
+ var work = new Complex32[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1031,19 +1035,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var q = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var q = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1061,19 +1065,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1089,20 +1093,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRSquareMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.RowCount];
+ var a = new Complex32[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var q = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var q = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex32[2048];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1120,20 +1124,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingQRTallMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var q = new Complex32[matrix.RowCount * matrix.RowCount];
+ var q = new Complex32[matrix.RowCount*matrix.RowCount];
var work = new Complex32[2048];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1148,17 +1152,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1175,17 +1179,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1201,18 +1205,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRSquareMatrixUsingWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
- var work = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
+ var work = new Complex32[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1230,18 +1234,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRTallMatrixUsingWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
- var work = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
+ var work = new Complex32[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1257,19 +1261,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1287,19 +1291,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1315,20 +1319,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex32[2048];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1346,20 +1350,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingThinQRTallMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new Complex32[matrix.ColumnCount];
- var r = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex32[2048];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1374,12 +1378,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeSVDFactorizationOfSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.RowCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1391,7 +1395,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1411,12 +1415,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeSVDFactorizationOfTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.ColumnCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1428,7 +1432,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1445,12 +1449,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeSVDFactorizationOfWideMatrix()
{
var matrix = _matrices["Wide2x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.RowCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1462,7 +1466,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1480,12 +1484,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeSVDFactorizationOfSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.RowCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex32[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1498,7 +1502,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1519,12 +1523,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeSVDFactorizationOfTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.ColumnCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex32[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1537,7 +1541,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1555,12 +1559,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanComputeSVDFactorizationOfWideMatrixWithWorkArray()
{
var matrix = _matrices["Wide2x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.RowCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
var work = new Complex32[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1573,7 +1577,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1590,17 +1594,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingSVDSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 6);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 6);
@@ -1617,17 +1621,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingSvdTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 5);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 5);
@@ -1643,21 +1647,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingSvdSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.RowCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1675,21 +1679,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
public void CanSolveUsingSvdTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new Complex32[matrix.RowCount * matrix.ColumnCount];
+ var a = new Complex32[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new Complex32[matrix.ColumnCount];
- var u = new Complex32[matrix.RowCount * matrix.RowCount];
- var vt = new Complex32[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new Complex32[matrix.RowCount*matrix.RowCount];
+ var vt = new Complex32[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new Complex32[matrix.ColumnCount * 2];
+ var b = new[] {new Complex32(1.0f, 0.0f), 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new Complex32[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 5);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 5);
@@ -1699,12 +1703,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
[TestCase("Wide10x50000", "Tall50000x10")]
[TestCase("Square1000x1000", "Square1000x1000")]
- [Timeout(1000 * 10)]
+ [Timeout(1000*20)]
public void IsMatrixMultiplicationPerformant(string leftMatrixKey, string rightMatrixKey)
{
var leftMatrix = _matrices[leftMatrixKey];
var rightMatrix = _matrices[rightMatrixKey];
- var result = leftMatrix * rightMatrix;
+ var result = leftMatrix*rightMatrix;
Assert.That(result, Is.Not.Null);
}
@@ -1715,7 +1719,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Complex32
/// number of columns.
/// array to check.
/// matrix to check against.
- private static void NotModified(int rows, int columns, IList array, Matrix matrix)
+ static void NotModified(int rows, int columns, IList array, Matrix matrix)
{
var index = 0;
for (var col = 0; col < columns; col++)
diff --git a/src/UnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs b/src/UnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs
index 5951e573..0f4c1e4e 100644
--- a/src/UnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs
+++ b/src/UnitTests/LinearAlgebraProviderTests/Double/LinearAlgebraProviderTests.cs
@@ -3,7 +3,9 @@
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
-// Copyright (c) 2009-2010 Math.NET
+//
+// Copyright (c) 2009-2013 Math.NET
+//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
@@ -12,8 +14,10 @@
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
+//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
+//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -44,1661 +48,1661 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double
///
/// The Y double test vector.
///
- private readonly double[] _y = new[] { 1.1, 2.2, 3.3, 4.4, 5.5 };
+ readonly double[] _y = new[] {1.1, 2.2, 3.3, 4.4, 5.5};
///
/// The X double test vector.
///
- private readonly double[] _x = new[] { 6.6, 7.7, 8.8, 9.9, 10.1 };
+ readonly double[] _x = new[] {6.6, 7.7, 8.8, 9.9, 10.1};
- private static readonly IContinuousDistribution Dist = new Normal();
+ static readonly IContinuousDistribution Dist = new Normal();
///
/// Test matrix to use.
///
readonly IDictionary _matrices = new Dictionary
- {
- { "Singular3x3", new DenseMatrix(new[,] { { 1.0, 1.0, 2.0 }, { 1.0, 1.0, 2.0 }, { 1.0, 1.0, 2.0 } }) },
- { "Square3x3", new DenseMatrix(new[,] { { -1.1, -2.2, -3.3 }, { 0.0, 1.1, 2.2 }, { -4.4, 5.5, 6.6 } }) },
- { "Square4x4", new DenseMatrix(new[,] { { -1.1, -2.2, -3.3, -4.4 }, { 0.0, 1.1, 2.2, 3.3 }, { 1.0, 2.1, 6.2, 4.3 }, { -4.4, 5.5, 6.6, -7.7 } }) },
- { "Singular4x4", new DenseMatrix(new[,] { { -1.1, -2.2, -3.3, -4.4 }, { -1.1, -2.2, -3.3, -4.4 }, { -1.1, -2.2, -3.3, -4.4 }, { -1.1, -2.2, -3.3, -4.4 } }) },
- { "Tall3x2", new DenseMatrix(new[,] { { -1.1, -2.2 }, { 0.0, 1.1 }, { -4.4, 5.5 } }) },
- { "Wide2x3", new DenseMatrix(new[,] { { -1.1, -2.2, -3.3 }, { 0.0, 1.1, 2.2 } }) },
- { "Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist) },
- { "Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist) },
- { "Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist) }
- };
-
- ///
- /// Can add a vector to scaled vector
- ///
- [Test]
- public void CanAddVectorToScaledVectorDouble()
{
- var result = new double[_y.Length];
-
- Control.LinearAlgebraProvider.AddVectorToScaledVector(_y, 0, _x, result);
- for (var i = 0; i < _y.Length; i++)
- {
- Assert.AreEqual(_y[i], result[i]);
- }
-
- Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.AddVectorToScaledVector(result, 1, _x, result);
- for (var i = 0; i < _y.Length; i++)
- {
- Assert.AreEqual(_y[i] + _x[i], result[i]);
- }
+ {"Singular3x3", new DenseMatrix(new[,] {{1.0, 1.0, 2.0}, {1.0, 1.0, 2.0}, {1.0, 1.0, 2.0}})},
+ {"Square3x3", new DenseMatrix(new[,] {{-1.1, -2.2, -3.3}, {0.0, 1.1, 2.2}, {-4.4, 5.5, 6.6}})},
+ {"Square4x4", new DenseMatrix(new[,] {{-1.1, -2.2, -3.3, -4.4}, {0.0, 1.1, 2.2, 3.3}, {1.0, 2.1, 6.2, 4.3}, {-4.4, 5.5, 6.6, -7.7}})},
+ {"Singular4x4", new DenseMatrix(new[,] {{-1.1, -2.2, -3.3, -4.4}, {-1.1, -2.2, -3.3, -4.4}, {-1.1, -2.2, -3.3, -4.4}, {-1.1, -2.2, -3.3, -4.4}})},
+ {"Tall3x2", new DenseMatrix(new[,] {{-1.1, -2.2}, {0.0, 1.1}, {-4.4, 5.5}})},
+ {"Wide2x3", new DenseMatrix(new[,] {{-1.1, -2.2, -3.3}, {0.0, 1.1, 2.2}})},
+ {"Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist)},
+ {"Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist)},
+ {"Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist)}
+ };
- Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.AddVectorToScaledVector(result, Math.PI, _x, result);
- for (var i = 0; i < _y.Length; i++)
- {
- Assert.AreEqual(_y[i] + (Math.PI * _x[i]), result[i]);
- }
- }
+ ///
+ /// Can add a vector to scaled vector
+ ///
+ [Test]
+ public void CanAddVectorToScaledVectorDouble()
+ {
+ var result = new double[_y.Length];
- ///
- /// Can scale an array.
- ///
- [Test]
- public void CanScaleArray()
+ Control.LinearAlgebraProvider.AddVectorToScaledVector(_y, 0, _x, result);
+ for (var i = 0; i < _y.Length; i++)
{
- var result = new double[_y.Length];
-
- Control.LinearAlgebraProvider.ScaleArray(1, _y, result);
- for (var i = 0; i < _y.Length; i++)
- {
- Assert.AreEqual(_y[i], result[i]);
- }
-
- Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.ScaleArray(Math.PI, result, result);
- for (var i = 0; i < _y.Length; i++)
- {
- Assert.AreEqual(_y[i] * Math.PI, result[i]);
- }
+ Assert.AreEqual(_y[i], result[i]);
}
- ///
- /// Can compute the dot product.
- ///
- [Test]
- public void CanComputeDotProduct()
+ Array.Copy(_y, result, _y.Length);
+ Control.LinearAlgebraProvider.AddVectorToScaledVector(result, 1, _x, result);
+ for (var i = 0; i < _y.Length; i++)
{
- var result = Control.LinearAlgebraProvider.DotProduct(_x, _y);
- AssertHelpers.AlmostEqual(152.35, result, 15);
+ Assert.AreEqual(_y[i] + _x[i], result[i]);
}
- ///
- /// Can add two arrays.
- ///
- [Test]
- public void CanAddArrays()
+ Array.Copy(_y, result, _y.Length);
+ Control.LinearAlgebraProvider.AddVectorToScaledVector(result, Math.PI, _x, result);
+ for (var i = 0; i < _y.Length; i++)
{
- var result = new double[_y.Length];
- Control.LinearAlgebraProvider.AddArrays(_x, _y, result);
- for (var i = 0; i < result.Length; i++)
- {
- Assert.AreEqual(_x[i] + _y[i], result[i]);
- }
+ Assert.AreEqual(_y[i] + (Math.PI*_x[i]), result[i]);
}
+ }
- ///
- /// Can subtract two arrays.
- ///
- [Test]
- public void CanSubtractArrays()
- {
- var result = new double[_y.Length];
- Control.LinearAlgebraProvider.SubtractArrays(_x, _y, result);
- for (var i = 0; i < result.Length; i++)
- {
- Assert.AreEqual(_x[i] - _y[i], result[i]);
- }
- }
+ ///
+ /// Can scale an array.
+ ///
+ [Test]
+ public void CanScaleArray()
+ {
+ var result = new double[_y.Length];
- ///
- /// Can pointwise multiply two arrays.
- ///
- [Test]
- public void CanPointWiseMultiplyArrays()
+ Control.LinearAlgebraProvider.ScaleArray(1, _y, result);
+ for (var i = 0; i < _y.Length; i++)
{
- var result = new double[_y.Length];
- Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_x, _y, result);
- for (var i = 0; i < result.Length; i++)
- {
- Assert.AreEqual(_x[i] * _y[i], result[i]);
- }
+ Assert.AreEqual(_y[i], result[i]);
}
- ///
- /// Can pointwise divide two arrays.
- ///
- [Test]
- public void CanPointWiseDivideArrays()
+ Array.Copy(_y, result, _y.Length);
+ Control.LinearAlgebraProvider.ScaleArray(Math.PI, result, result);
+ for (var i = 0; i < _y.Length; i++)
{
- var result = new double[_y.Length];
- Control.LinearAlgebraProvider.PointWiseDivideArrays(_x, _y, result);
- for (var i = 0; i < result.Length; i++)
- {
- Assert.AreEqual(_x[i] / _y[i], result[i]);
- }
+ Assert.AreEqual(_y[i]*Math.PI, result[i]);
}
+ }
- ///
- /// Can compute L1 norm.
- ///
- [Test]
- public void CanComputeMatrixL1Norm()
- {
- var matrix = _matrices["Square3x3"];
- var work = new double[matrix.RowCount];
- var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
- AssertHelpers.AlmostEqual(12.1, norm, 6);
- }
+ ///
+ /// Can compute the dot product.
+ ///
+ [Test]
+ public void CanComputeDotProduct()
+ {
+ var result = Control.LinearAlgebraProvider.DotProduct(_x, _y);
+ AssertHelpers.AlmostEqual(152.35, result, 15);
+ }
- ///
- /// Can compute Frobenius norm.
- ///
- [Test]
- public void CanComputeMatrixFrobeniusNorm()
+ ///
+ /// Can add two arrays.
+ ///
+ [Test]
+ public void CanAddArrays()
+ {
+ var result = new double[_y.Length];
+ Control.LinearAlgebraProvider.AddArrays(_x, _y, result);
+ for (var i = 0; i < result.Length; i++)
{
- var matrix = _matrices["Square3x3"];
- var work = new double[matrix.RowCount];
- var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
- AssertHelpers.AlmostEqual(10.777754868246, norm, 8);
+ Assert.AreEqual(_x[i] + _y[i], result[i]);
}
+ }
- ///
- /// Can compute Infinity norm.
- ///
- [Test]
- public void CanComputeMatrixInfinityNorm()
+ ///
+ /// Can subtract two arrays.
+ ///
+ [Test]
+ public void CanSubtractArrays()
+ {
+ var result = new double[_y.Length];
+ Control.LinearAlgebraProvider.SubtractArrays(_x, _y, result);
+ for (var i = 0; i < result.Length; i++)
{
- var matrix = _matrices["Square3x3"];
- var work = new double[matrix.RowCount];
- var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
- Assert.AreEqual(16.5, norm);
+ Assert.AreEqual(_x[i] - _y[i], result[i]);
}
+ }
- ///
- /// Can compute L1 norm using a work array.
- ///
- [Test]
- public void CanComputeMatrixL1NormWithWorkArray()
+ ///
+ /// Can pointwise multiply two arrays.
+ ///
+ [Test]
+ public void CanPointWiseMultiplyArrays()
+ {
+ var result = new double[_y.Length];
+ Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_x, _y, result);
+ for (var i = 0; i < result.Length; i++)
{
- var matrix = _matrices["Square3x3"];
- var work = new double[18];
- var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
- AssertHelpers.AlmostEqual(12.1, norm, 6);
+ Assert.AreEqual(_x[i]*_y[i], result[i]);
}
+ }
- ///
- /// Can compute Frobenius norm using a work array.
- ///
- [Test]
- public void CanComputeMatrixFrobeniusNormWithWorkArray()
+ ///
+ /// Can pointwise divide two arrays.
+ ///
+ [Test]
+ public void CanPointWiseDivideArrays()
+ {
+ var result = new double[_y.Length];
+ Control.LinearAlgebraProvider.PointWiseDivideArrays(_x, _y, result);
+ for (var i = 0; i < result.Length; i++)
{
- var matrix = _matrices["Square3x3"];
- var work = new double[18];
- var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
- AssertHelpers.AlmostEqual(10.777754868246, norm, 8);
+ Assert.AreEqual(_x[i]/_y[i], result[i]);
}
+ }
- ///
- /// Can compute Infinity norm using a work array.
- ///
- [Test]
- public void CanComputeMatrixInfinityNormWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var work = new double[18];
- var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
- Assert.AreEqual(16.5, norm);
- }
+ ///
+ /// Can compute L1 norm.
+ ///
+ [Test]
+ public void CanComputeMatrixL1Norm()
+ {
+ var matrix = _matrices["Square3x3"];
+ var work = new double[matrix.RowCount];
+ var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
+ AssertHelpers.AlmostEqual(12.1, norm, 6);
+ }
- ///
- /// Can multiply two square matrices.
- ///
- [Test]
- public void CanMultiplySquareMatrices()
- {
- var x = _matrices["Singular3x3"];
- var y = _matrices["Square3x3"];
- var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+ ///
+ /// Can compute Frobenius norm.
+ ///
+ [Test]
+ public void CanComputeMatrixFrobeniusNorm()
+ {
+ var matrix = _matrices["Square3x3"];
+ var work = new double[matrix.RowCount];
+ var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
+ AssertHelpers.AlmostEqual(10.777754868246, norm, 8);
+ }
+
+ ///
+ /// Can compute Infinity norm.
+ ///
+ [Test]
+ public void CanComputeMatrixInfinityNorm()
+ {
+ var matrix = _matrices["Square3x3"];
+ var work = new double[matrix.RowCount];
+ var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
+ Assert.AreEqual(16.5, norm);
+ }
+
+ ///
+ /// Can compute L1 norm using a work array.
+ ///
+ [Test]
+ public void CanComputeMatrixL1NormWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var work = new double[18];
+ var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.OneNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
+ AssertHelpers.AlmostEqual(12.1, norm, 6);
+ }
+
+ ///
+ /// Can compute Frobenius norm using a work array.
+ ///
+ [Test]
+ public void CanComputeMatrixFrobeniusNormWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var work = new double[18];
+ var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.FrobeniusNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
+ AssertHelpers.AlmostEqual(10.777754868246, norm, 8);
+ }
- Control.LinearAlgebraProvider.MatrixMultiply(x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, c.Values);
+ ///
+ /// Can compute Infinity norm using a work array.
+ ///
+ [Test]
+ public void CanComputeMatrixInfinityNormWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var work = new double[18];
+ var norm = Control.LinearAlgebraProvider.MatrixNorm(Norm.InfinityNorm, matrix.RowCount, matrix.ColumnCount, matrix.Values, work);
+ Assert.AreEqual(16.5, norm);
+ }
- for (var i = 0; i < c.RowCount; i++)
+ ///
+ /// Can multiply two square matrices.
+ ///
+ [Test]
+ public void CanMultiplySquareMatrices()
+ {
+ var x = _matrices["Singular3x3"];
+ var y = _matrices["Square3x3"];
+ var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+
+ Control.LinearAlgebraProvider.MatrixMultiply(x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, c.Values);
+
+ for (var i = 0; i < c.RowCount; i++)
+ {
+ for (var j = 0; j < c.ColumnCount; j++)
{
- for (var j = 0; j < c.ColumnCount; j++)
- {
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 15);
- }
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 15);
}
}
+ }
- ///
- /// Can multiply a wide and tall matrix.
- ///
- [Test]
- public void CanMultiplyWideAndTallMatrices()
- {
- var x = _matrices["Wide2x3"];
- var y = _matrices["Tall3x2"];
- var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+ ///
+ /// Can multiply a wide and tall matrix.
+ ///
+ [Test]
+ public void CanMultiplyWideAndTallMatrices()
+ {
+ var x = _matrices["Wide2x3"];
+ var y = _matrices["Tall3x2"];
+ var c = new DenseMatrix(x.RowCount, y.ColumnCount);
- Control.LinearAlgebraProvider.MatrixMultiply(x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, c.Values);
+ Control.LinearAlgebraProvider.MatrixMultiply(x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, c.Values);
- for (var i = 0; i < c.RowCount; i++)
+ for (var i = 0; i < c.RowCount; i++)
+ {
+ for (var j = 0; j < c.ColumnCount; j++)
{
- for (var j = 0; j < c.ColumnCount; j++)
- {
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 15);
- }
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 15);
}
}
+ }
- ///
- /// Can multiply a tall and wide matrix.
- ///
- [Test]
- public void CanMultiplyTallAndWideMatrices()
- {
- var x = _matrices["Tall3x2"];
- var y = _matrices["Wide2x3"];
- var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+ ///
+ /// Can multiply a tall and wide matrix.
+ ///
+ [Test]
+ public void CanMultiplyTallAndWideMatrices()
+ {
+ var x = _matrices["Tall3x2"];
+ var y = _matrices["Wide2x3"];
+ var c = new DenseMatrix(x.RowCount, y.ColumnCount);
- Control.LinearAlgebraProvider.MatrixMultiply(x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, c.Values);
+ Control.LinearAlgebraProvider.MatrixMultiply(x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, c.Values);
- for (var i = 0; i < c.RowCount; i++)
+ for (var i = 0; i < c.RowCount; i++)
+ {
+ for (var j = 0; j < c.ColumnCount; j++)
{
- for (var j = 0; j < c.ColumnCount; j++)
- {
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 15);
- }
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 15);
}
}
+ }
- ///
- /// Can multiply two square matrices.
- ///
- [Test]
- public void CanMultiplySquareMatricesWithUpdate()
- {
- var x = _matrices["Singular3x3"];
- var y = _matrices["Square3x3"];
- var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+ ///
+ /// Can multiply two square matrices.
+ ///
+ [Test]
+ public void CanMultiplySquareMatricesWithUpdate()
+ {
+ var x = _matrices["Singular3x3"];
+ var y = _matrices["Square3x3"];
+ var c = new DenseMatrix(x.RowCount, y.ColumnCount);
- Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.DontTranspose, 2.2, x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, 1.0, c.Values);
+ Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.DontTranspose, 2.2, x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, 1.0, c.Values);
- for (var i = 0; i < c.RowCount; i++)
+ for (var i = 0; i < c.RowCount; i++)
+ {
+ for (var j = 0; j < c.ColumnCount; j++)
{
- for (var j = 0; j < c.ColumnCount; j++)
- {
- AssertHelpers.AlmostEqual(2.2 * x.Row(i) * y.Column(j), c[i, j], 15);
- }
+ AssertHelpers.AlmostEqual(2.2*x.Row(i)*y.Column(j), c[i, j], 15);
}
}
+ }
- ///
- /// Can multiply a wide and tall matrix.
- ///
- [Test]
- public void CanMultiplyWideAndTallMatricesWithUpdate()
- {
- var x = _matrices["Wide2x3"];
- var y = _matrices["Tall3x2"];
- var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+ ///
+ /// Can multiply a wide and tall matrix.
+ ///
+ [Test]
+ public void CanMultiplyWideAndTallMatricesWithUpdate()
+ {
+ var x = _matrices["Wide2x3"];
+ var y = _matrices["Tall3x2"];
+ var c = new DenseMatrix(x.RowCount, y.ColumnCount);
- Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.DontTranspose, 2.2, x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, 1.0, c.Values);
+ Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.DontTranspose, 2.2, x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, 1.0, c.Values);
- for (var i = 0; i < c.RowCount; i++)
+ for (var i = 0; i < c.RowCount; i++)
+ {
+ for (var j = 0; j < c.ColumnCount; j++)
{
- for (var j = 0; j < c.ColumnCount; j++)
- {
- AssertHelpers.AlmostEqual(2.2 * x.Row(i) * y.Column(j), c[i, j], 15);
- }
+ AssertHelpers.AlmostEqual(2.2*x.Row(i)*y.Column(j), c[i, j], 15);
}
}
+ }
- ///
- /// Can multiply a tall and wide matrix.
- ///
- [Test]
- public void CanMultiplyTallAndWideMatricesWithUpdate()
- {
- var x = _matrices["Tall3x2"];
- var y = _matrices["Wide2x3"];
- var c = new DenseMatrix(x.RowCount, y.ColumnCount);
+ ///
+ /// Can multiply a tall and wide matrix.
+ ///
+ [Test]
+ public void CanMultiplyTallAndWideMatricesWithUpdate()
+ {
+ var x = _matrices["Tall3x2"];
+ var y = _matrices["Wide2x3"];
+ var c = new DenseMatrix(x.RowCount, y.ColumnCount);
- Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.DontTranspose, 2.2, x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, 1.0, c.Values);
+ Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.DontTranspose, 2.2, x.Values, x.RowCount, x.ColumnCount, y.Values, y.RowCount, y.ColumnCount, 1.0, c.Values);
- for (var i = 0; i < c.RowCount; i++)
+ for (var i = 0; i < c.RowCount; i++)
+ {
+ for (var j = 0; j < c.ColumnCount; j++)
{
- for (var j = 0; j < c.ColumnCount; j++)
- {
- AssertHelpers.AlmostEqual(2.2 * x.Row(i) * y.Column(j), c[i, j], 15);
- }
+ AssertHelpers.AlmostEqual(2.2*x.Row(i)*y.Column(j), c[i, j], 15);
}
}
+ }
- ///
- /// Can compute the LU factor of a matrix.
- ///
- [Test]
- public void CanComputeLuFactor()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var ipiv = new int[matrix.RowCount];
-
- Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
-
- AssertHelpers.AlmostEqual(a[0], -4.4, 15);
- AssertHelpers.AlmostEqual(a[1], 0.25, 15);
- AssertHelpers.AlmostEqual(a[2], 0, 15);
- AssertHelpers.AlmostEqual(a[3], 5.5, 15);
- AssertHelpers.AlmostEqual(a[4], -3.575, 15);
- AssertHelpers.AlmostEqual(a[5], -0.307692307692308, 15);
- AssertHelpers.AlmostEqual(a[6], 6.6, 15);
- AssertHelpers.AlmostEqual(a[7], -4.95, 15);
- AssertHelpers.AlmostEqual(a[8], 0.676923076923077, 15);
- Assert.AreEqual(ipiv[0], 2);
- Assert.AreEqual(ipiv[1], 2);
- Assert.AreEqual(ipiv[2], 2);
- }
+ ///
+ /// Can compute the LU factor of a matrix.
+ ///
+ [Test]
+ public void CanComputeLuFactor()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var ipiv = new int[matrix.RowCount];
+
+ Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
+
+ AssertHelpers.AlmostEqual(a[0], -4.4, 15);
+ AssertHelpers.AlmostEqual(a[1], 0.25, 15);
+ AssertHelpers.AlmostEqual(a[2], 0, 15);
+ AssertHelpers.AlmostEqual(a[3], 5.5, 15);
+ AssertHelpers.AlmostEqual(a[4], -3.575, 15);
+ AssertHelpers.AlmostEqual(a[5], -0.307692307692308, 15);
+ AssertHelpers.AlmostEqual(a[6], 6.6, 15);
+ AssertHelpers.AlmostEqual(a[7], -4.95, 15);
+ AssertHelpers.AlmostEqual(a[8], 0.676923076923077, 15);
+ Assert.AreEqual(ipiv[0], 2);
+ Assert.AreEqual(ipiv[1], 2);
+ Assert.AreEqual(ipiv[2], 2);
+ }
- ///
- /// Can compute the inverse of a matrix using LU factorization.
- ///
- [Test]
- public void CanComputeLuInverse()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount);
-
- AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
- AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
- AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
- AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
- AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
- AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
- AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
- }
+ ///
+ /// Can compute the inverse of a matrix using LU factorization.
+ ///
+ [Test]
+ public void CanComputeLuInverse()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount);
+
+ AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
+ AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
+ AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
+ AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
+ AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
+ AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
+ AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
+ }
- ///
- /// Can compute the inverse of a matrix using LU factorization
- /// using a previously factored matrix.
- ///
- [Test]
- public void CanComputeLuInverseOnFactoredMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var ipiv = new int[matrix.RowCount];
-
- Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
- Control.LinearAlgebraProvider.LUInverseFactored(a, matrix.RowCount, ipiv);
-
- AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
- AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
- AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
- AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
- AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
- AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
- AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
- }
+ ///
+ /// Can compute the inverse of a matrix using LU factorization
+ /// using a previously factored matrix.
+ ///
+ [Test]
+ public void CanComputeLuInverseOnFactoredMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var ipiv = new int[matrix.RowCount];
+
+ Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
+ Control.LinearAlgebraProvider.LUInverseFactored(a, matrix.RowCount, ipiv);
+
+ AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
+ AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
+ AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
+ AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
+ AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
+ AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
+ AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
+ }
- ///
- /// Can compute the inverse of a matrix using LU factorization
- /// with a work array.
- ///
- [Test]
- public void CanComputeLuInverseWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var work = new double[matrix.RowCount];
- Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount, work);
-
- AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
- AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
- AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
- AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
- AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
- AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
- AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
- }
+ ///
+ /// Can compute the inverse of a matrix using LU factorization
+ /// with a work array.
+ ///
+ [Test]
+ public void CanComputeLuInverseWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var work = new double[matrix.RowCount];
+ Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount, work);
+
+ AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
+ AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
+ AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
+ AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
+ AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
+ AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
+ AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
+ }
- ///
- /// Can compute the inverse of a matrix using LU factorization
- /// using a previously factored matrix with a work array.
- ///
- [Test]
- public void CanComputeLuInverseOnFactoredMatrixWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var ipiv = new int[matrix.RowCount];
-
- Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
-
- var work = new double[matrix.RowCount];
- Control.LinearAlgebraProvider.LUInverseFactored(a, matrix.RowCount, ipiv, work);
-
- AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
- AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
- AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
- AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
- AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
- AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
- AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
- AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
- }
+ ///
+ /// Can compute the inverse of a matrix using LU factorization
+ /// using a previously factored matrix with a work array.
+ ///
+ [Test]
+ public void CanComputeLuInverseOnFactoredMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var ipiv = new int[matrix.RowCount];
+
+ Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
+
+ var work = new double[matrix.RowCount];
+ Control.LinearAlgebraProvider.LUInverseFactored(a, matrix.RowCount, ipiv, work);
+
+ AssertHelpers.AlmostEqual(a[0], -0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[1], -0.909090909090908, 14);
+ AssertHelpers.AlmostEqual(a[2], 0.454545454545454, 14);
+ AssertHelpers.AlmostEqual(a[3], -0.340909090909090, 14);
+ AssertHelpers.AlmostEqual(a[4], -2.045454545454543, 14);
+ AssertHelpers.AlmostEqual(a[5], 1.477272727272726, 14);
+ AssertHelpers.AlmostEqual(a[6], -0.113636363636364, 14);
+ AssertHelpers.AlmostEqual(a[7], 0.227272727272727, 14);
+ AssertHelpers.AlmostEqual(a[8], -0.113636363636364, 14);
+ }
- ///
- /// Can solve Ax=b using LU factorization.
- ///
- [Test]
- public void CanSolveUsingLU()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using LU factorization.
+ ///
+ [Test]
+ public void CanSolveUsingLU()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- Control.LinearAlgebraProvider.LUSolve(2, a, matrix.RowCount, b);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ Control.LinearAlgebraProvider.LUSolve(2, a, matrix.RowCount, b);
- AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 14);
- AssertHelpers.AlmostEqual(b[1], -4.318181818181815, 14);
- AssertHelpers.AlmostEqual(b[2], 3.068181818181816, 14);
- AssertHelpers.AlmostEqual(b[3], -4.204545454545451, 14);
- AssertHelpers.AlmostEqual(b[4], -12.499999999999989, 14);
- AssertHelpers.AlmostEqual(b[5], 8.522727272727266, 14);
+ AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 14);
+ AssertHelpers.AlmostEqual(b[1], -4.318181818181815, 14);
+ AssertHelpers.AlmostEqual(b[2], 3.068181818181816, 14);
+ AssertHelpers.AlmostEqual(b[3], -4.204545454545451, 14);
+ AssertHelpers.AlmostEqual(b[4], -12.499999999999989, 14);
+ AssertHelpers.AlmostEqual(b[5], 8.522727272727266, 14);
- NotModified(matrix.RowCount, matrix.ColumnCount, a, matrix);
- }
+ NotModified(matrix.RowCount, matrix.ColumnCount, a, matrix);
+ }
- ///
- /// Can solve Ax=b using LU factorization using a factored matrix.
- ///
- [Test]
- public void CanSolveUsingLUOnFactoredMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var ipiv = new int[matrix.RowCount];
- Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- Control.LinearAlgebraProvider.LUSolveFactored(2, a, matrix.RowCount, ipiv, b);
-
- AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 14);
- AssertHelpers.AlmostEqual(b[1], -4.318181818181815, 14);
- AssertHelpers.AlmostEqual(b[2], 3.068181818181816, 14);
- AssertHelpers.AlmostEqual(b[3], -4.204545454545451, 14);
- AssertHelpers.AlmostEqual(b[4], -12.499999999999989, 14);
- AssertHelpers.AlmostEqual(b[5], 8.522727272727266, 14);
- }
+ ///
+ /// Can solve Ax=b using LU factorization using a factored matrix.
+ ///
+ [Test]
+ public void CanSolveUsingLUOnFactoredMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var ipiv = new int[matrix.RowCount];
+ Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ Control.LinearAlgebraProvider.LUSolveFactored(2, a, matrix.RowCount, ipiv, b);
+
+ AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 14);
+ AssertHelpers.AlmostEqual(b[1], -4.318181818181815, 14);
+ AssertHelpers.AlmostEqual(b[2], 3.068181818181816, 14);
+ AssertHelpers.AlmostEqual(b[3], -4.204545454545451, 14);
+ AssertHelpers.AlmostEqual(b[4], -12.499999999999989, 14);
+ AssertHelpers.AlmostEqual(b[5], 8.522727272727266, 14);
+ }
- ///
- /// Can compute the Cholesky factorization.
- ///
- [Test]
- public void CanComputeCholeskyFactor()
- {
- var matrix = new double[] { 1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15 };
- Control.LinearAlgebraProvider.CholeskyFactor(matrix, 4);
- Assert.AreEqual(matrix[0], 1);
- Assert.AreEqual(matrix[1], 1);
- Assert.AreEqual(matrix[2], 1);
- Assert.AreEqual(matrix[3], 1);
- Assert.AreEqual(matrix[4], 0);
- Assert.AreEqual(matrix[5], 2);
- Assert.AreEqual(matrix[6], 2);
- Assert.AreEqual(matrix[7], 2);
- Assert.AreEqual(matrix[8], 0);
- Assert.AreEqual(matrix[9], 0);
- Assert.AreEqual(matrix[10], 3);
- Assert.AreEqual(matrix[11], 3);
- Assert.AreEqual(matrix[12], 0);
- Assert.AreEqual(matrix[13], 0);
- Assert.AreEqual(matrix[14], 0);
- Assert.AreEqual(matrix[15], 1);
- }
+ ///
+ /// Can compute the Cholesky factorization.
+ ///
+ [Test]
+ public void CanComputeCholeskyFactor()
+ {
+ var matrix = new double[] {1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15};
+ Control.LinearAlgebraProvider.CholeskyFactor(matrix, 4);
+ Assert.AreEqual(matrix[0], 1);
+ Assert.AreEqual(matrix[1], 1);
+ Assert.AreEqual(matrix[2], 1);
+ Assert.AreEqual(matrix[3], 1);
+ Assert.AreEqual(matrix[4], 0);
+ Assert.AreEqual(matrix[5], 2);
+ Assert.AreEqual(matrix[6], 2);
+ Assert.AreEqual(matrix[7], 2);
+ Assert.AreEqual(matrix[8], 0);
+ Assert.AreEqual(matrix[9], 0);
+ Assert.AreEqual(matrix[10], 3);
+ Assert.AreEqual(matrix[11], 3);
+ Assert.AreEqual(matrix[12], 0);
+ Assert.AreEqual(matrix[13], 0);
+ Assert.AreEqual(matrix[14], 0);
+ Assert.AreEqual(matrix[15], 1);
+ }
- ///
- /// Can solve Ax=b using Cholesky factorization.
- ///
- [Test]
- public void CanSolveUsingCholesky()
- {
- var matrix = new DenseMatrix(3, 3, new double[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 });
- var a = new double[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ ///
+ /// Can solve Ax=b using Cholesky factorization.
+ ///
+ [Test]
+ public void CanSolveUsingCholesky()
+ {
+ var matrix = new DenseMatrix(3, 3, new double[] {1, 1, 1, 1, 2, 3, 1, 3, 6});
+ var a = new double[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- Control.LinearAlgebraProvider.CholeskySolve(a, 3, b, 2);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ Control.LinearAlgebraProvider.CholeskySolve(a, 3, b, 2);
- AssertHelpers.AlmostEqual(b[0], 0, 14);
- AssertHelpers.AlmostEqual(b[1], 1, 14);
- AssertHelpers.AlmostEqual(b[2], 0, 14);
- AssertHelpers.AlmostEqual(b[3], 3, 14);
- AssertHelpers.AlmostEqual(b[4], 1, 14);
- AssertHelpers.AlmostEqual(b[5], 0, 14);
+ AssertHelpers.AlmostEqual(b[0], 0, 14);
+ AssertHelpers.AlmostEqual(b[1], 1, 14);
+ AssertHelpers.AlmostEqual(b[2], 0, 14);
+ AssertHelpers.AlmostEqual(b[3], 3, 14);
+ AssertHelpers.AlmostEqual(b[4], 1, 14);
+ AssertHelpers.AlmostEqual(b[5], 0, 14);
- NotModified(3, 3, a, matrix);
- }
+ NotModified(3, 3, a, matrix);
+ }
- ///
- /// Can solve Ax=b using LU factorization using a factored matrix.
- ///
- [Test]
- public void CanSolveUsingCholeskyOnFactoredMatrix()
- {
- var a = new double[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ ///
+ /// Can solve Ax=b using LU factorization using a factored matrix.
+ ///
+ [Test]
+ public void CanSolveUsingCholeskyOnFactoredMatrix()
+ {
+ var a = new double[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
- Control.LinearAlgebraProvider.CholeskyFactor(a, 3);
+ Control.LinearAlgebraProvider.CholeskyFactor(a, 3);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- Control.LinearAlgebraProvider.CholeskySolveFactored(a, 3, b, 2);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ Control.LinearAlgebraProvider.CholeskySolveFactored(a, 3, b, 2);
- AssertHelpers.AlmostEqual(b[0], 0, 14);
- AssertHelpers.AlmostEqual(b[1], 1, 14);
- AssertHelpers.AlmostEqual(b[2], 0, 14);
- AssertHelpers.AlmostEqual(b[3], 3, 14);
- AssertHelpers.AlmostEqual(b[4], 1, 14);
- AssertHelpers.AlmostEqual(b[5], 0, 14);
- }
+ AssertHelpers.AlmostEqual(b[0], 0, 14);
+ AssertHelpers.AlmostEqual(b[1], 1, 14);
+ AssertHelpers.AlmostEqual(b[2], 0, 14);
+ AssertHelpers.AlmostEqual(b[3], 3, 14);
+ AssertHelpers.AlmostEqual(b[4], 1, 14);
+ AssertHelpers.AlmostEqual(b[5], 0, 14);
+ }
- ///
- /// Can compute QR factorization of a square matrix.
- ///
- [Test]
- public void CanComputeQRFactorSquareMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var r = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, r, r.Length);
+ ///
+ /// Can compute QR factorization of a square matrix.
+ ///
+ [Test]
+ public void CanComputeQRFactorSquareMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var r = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, r, r.Length);
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.RowCount];
- Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
- var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
+ var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute QR factorization of a tall matrix.
- ///
- [Test]
- public void CanComputeQRFactorTallMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var r = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, r, r.Length);
+ ///
+ /// Can compute QR factorization of a tall matrix.
+ ///
+ [Test]
+ public void CanComputeQRFactorTallMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var r = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, r, r.Length);
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.RowCount];
- Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
- var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
+ var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute QR factorization of a wide matrix.
- ///
- [Test]
- public void CanComputeQRFactorWideMatrix()
- {
- var matrix = _matrices["Wide2x3"];
- var r = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, r, r.Length);
+ ///
+ /// Can compute QR factorization of a wide matrix.
+ ///
+ [Test]
+ public void CanComputeQRFactorWideMatrix()
+ {
+ var matrix = _matrices["Wide2x3"];
+ var r = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, r, r.Length);
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.RowCount];
- Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
- var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
+ var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute QR factorization of a square matrix using a work array.
- ///
- [Test]
- public void CanComputeQRFactorSquareMatrixWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var r = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, r, r.Length);
+ ///
+ /// Can compute QR factorization of a square matrix using a work array.
+ ///
+ [Test]
+ public void CanComputeQRFactorSquareMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var r = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, r, r.Length);
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.RowCount];
- var work = new double[matrix.ColumnCount * Control.BlockSize];
- Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ var work = new double[matrix.ColumnCount*Control.BlockSize];
+ Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
+ var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute QR factorization of a tall matrix using a work matrix.
- ///
- [Test]
- public void CanComputeQRFactorTallMatrixWithWorkArray()
- {
- var matrix = _matrices["Tall3x2"];
- var r = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, r, r.Length);
+ ///
+ /// Can compute QR factorization of a tall matrix using a work matrix.
+ ///
+ [Test]
+ public void CanComputeQRFactorTallMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var r = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, r, r.Length);
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.RowCount];
- var work = new double[matrix.ColumnCount * Control.BlockSize];
- Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ var work = new double[matrix.ColumnCount*Control.BlockSize];
+ Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
+ var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute QR factorization of a wide matrix using a work matrix.
- ///
- [Test]
- public void CanComputeQRFactorWideMatrixWithWorkArray()
- {
- var matrix = _matrices["Wide2x3"];
- var r = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, r, r.Length);
+ ///
+ /// Can compute QR factorization of a wide matrix using a work matrix.
+ ///
+ [Test]
+ public void CanComputeQRFactorWideMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Wide2x3"];
+ var r = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, r, r.Length);
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.RowCount];
- var work = new double[matrix.ColumnCount * Control.BlockSize];
- Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ var work = new double[matrix.ColumnCount*Control.BlockSize];
+ Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
+ var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute thin QR factorization of a square matrix.
- ///
- [Test]
- public void CanComputeThinQRFactorSquareMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, q, q.Length);
+ ///
+ /// Can compute thin QR factorization of a square matrix.
+ ///
+ [Test]
+ public void CanComputeThinQRFactorSquareMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, q, q.Length);
- Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
+ Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
- var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
- var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
+ var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute thin QR factorization of a tall matrix.
- ///
- [Test]
- public void CanComputeThinQRFactorTallMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, q, q.Length);
+ ///
+ /// Can compute thin QR factorization of a tall matrix.
+ ///
+ [Test]
+ public void CanComputeThinQRFactorTallMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, q, q.Length);
- Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
+ Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
- var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
- var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
+ var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute thin QR factorization of a square matrix using a work array.
- ///
- [Test]
- public void CanComputeThinQRFactorSquareMatrixWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, q, q.Length);
+ ///
+ /// Can compute thin QR factorization of a square matrix using a work array.
+ ///
+ [Test]
+ public void CanComputeThinQRFactorSquareMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, q, q.Length);
- var work = new double[matrix.ColumnCount * Control.BlockSize];
- Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
+ var work = new double[matrix.ColumnCount*Control.BlockSize];
+ Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
- var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
+ var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
+ var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can compute thin QR factorization of a tall matrix using a work matrix.
- ///
- [Test]
- public void CanComputeThinQRFactorTallMatrixWithWorkArray()
+ ///
+ /// Can compute thin QR factorization of a tall matrix using a work matrix.
+ ///
+ [Test]
+ public void CanComputeThinQRFactorTallMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var tau = new double[3];
+ var q = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, q, q.Length);
+
+ var work = new double[matrix.ColumnCount*Control.BlockSize];
+ Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
+
+ var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
+ var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
+ var a = mq*mr;
+ for (var row = 0; row < matrix.RowCount; row++)
{
- var matrix = _matrices["Tall3x2"];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- var tau = new double[3];
- var q = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, q, q.Length);
-
- var work = new double[matrix.ColumnCount * Control.BlockSize];
- Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
-
- var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
- var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
- for (var row = 0; row < matrix.RowCount; row++)
+ for (var col = 0; col < matrix.ColumnCount; col++)
{
- for (var col = 0; col < matrix.ColumnCount; col++)
- {
- AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
- }
+ AssertHelpers.AlmostEqual(matrix[row, col], a[row, col], 14);
}
}
+ }
- ///
- /// Can solve Ax=b using QR factorization with a square A matrix.
- ///
- [Test]
- public void CanSolveUsingQRSquareMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using QR factorization with a square A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingQRSquareMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
- NotModified(3, 3, a, matrix);
+ NotModified(3, 3, a, matrix);
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a tall A matrix.
- ///
- [Test]
- public void CanSolveUsingQRTallMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using QR factorization with a tall A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingQRTallMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
- NotModified(3, 2, a, matrix);
+ NotModified(3, 2, a, matrix);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a square A matrix
- /// using a work array.
- ///
- [Test]
- public void CanSolveUsingQRSquareMatrixUsingWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- var work = new double[matrix.RowCount * Control.BlockSize];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
-
- NotModified(3, 3, a, matrix);
-
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
-
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ ///
+ /// Can solve Ax=b using QR factorization with a square A matrix
+ /// using a work array.
+ ///
+ [Test]
+ public void CanSolveUsingQRSquareMatrixUsingWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ var work = new double[matrix.RowCount*Control.BlockSize];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
+
+ NotModified(3, 3, a, matrix);
+
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
+
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a tall A matrix
- /// using a work array.
- ///
- [Test]
- public void CanSolveUsingQRTallMatrixUsingWorkArray()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using QR factorization with a tall A matrix
+ /// using a work array.
+ ///
+ [Test]
+ public void CanSolveUsingQRTallMatrixUsingWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- var work = new double[matrix.RowCount * matrix.RowCount];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ var work = new double[matrix.RowCount*matrix.RowCount];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
- NotModified(3, 2, a, matrix);
+ NotModified(3, 2, a, matrix);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a square A matrix
- /// using a factored A matrix.
- ///
- [Test]
- public void CanSolveUsingQRSquareMatrixOnFactoredMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var tau = new double[matrix.ColumnCount];
- var q = new double[matrix.ColumnCount * matrix.ColumnCount];
- Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
-
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
-
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ ///
+ /// Can solve Ax=b using QR factorization with a square A matrix
+ /// using a factored A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingQRSquareMatrixOnFactoredMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var tau = new double[matrix.ColumnCount];
+ var q = new double[matrix.ColumnCount*matrix.ColumnCount];
+ Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
+
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
+
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a tall A matrix
- /// using a factored A matrix.
- ///
- [Test]
- public void CanSolveUsingQRTallMatrixOnFactoredMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using QR factorization with a tall A matrix
+ /// using a factored A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingQRTallMatrixOnFactoredMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var tau = new double[matrix.ColumnCount];
- var q = new double[matrix.RowCount * matrix.RowCount];
- Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
+ var tau = new double[matrix.ColumnCount];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a square A matrix
- /// using a factored A matrix with a work array.
- ///
- [Test]
- public void CanSolveUsingQRSquareMatrixOnFactoredMatrixWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.RowCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var tau = new double[matrix.ColumnCount];
- var q = new double[matrix.ColumnCount * matrix.ColumnCount];
- var work = new double[2048];
- Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
-
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
-
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ ///
+ /// Can solve Ax=b using QR factorization with a square A matrix
+ /// using a factored A matrix with a work array.
+ ///
+ [Test]
+ public void CanSolveUsingQRSquareMatrixOnFactoredMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.RowCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var tau = new double[matrix.ColumnCount];
+ var q = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var work = new double[2048];
+ Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
+
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
+
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using QR factorization with a tall A matrix
- /// using a factored A matrix with a work array.
- ///
- [Test]
- public void CanSolveUsingQRTallMatrixOnFactoredMatrixWithWorkArray()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var tau = new double[matrix.ColumnCount];
- var q = new double[matrix.RowCount * matrix.RowCount];
- var work = new double[2048];
- Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
-
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
-
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ ///
+ /// Can solve Ax=b using QR factorization with a tall A matrix
+ /// using a factored A matrix with a work array.
+ ///
+ [Test]
+ public void CanSolveUsingQRTallMatrixOnFactoredMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var tau = new double[matrix.ColumnCount];
+ var q = new double[matrix.RowCount*matrix.RowCount];
+ var work = new double[2048];
+ Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
+
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
+
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a square A matrix.
- ///
- [Test]
- public void CanSolveUsingThinQRSquareMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using thin QR factorization with a square A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRSquareMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
- NotModified(3, 3, a, matrix);
+ NotModified(3, 3, a, matrix);
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a tall A matrix.
- ///
- [Test]
- public void CanSolveUsingThinQRTallMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using thin QR factorization with a tall A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRTallMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
- NotModified(3, 2, a, matrix);
+ NotModified(3, 2, a, matrix);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a square A matrix
- /// using a work array.
- ///
- [Test]
- public void CanSolveUsingThinQRSquareMatrixUsingWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- var work = new double[matrix.RowCount * matrix.ColumnCount];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
-
- NotModified(3, 3, a, matrix);
-
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
-
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ ///
+ /// Can solve Ax=b using thin QR factorization with a square A matrix
+ /// using a work array.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRSquareMatrixUsingWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ var work = new double[matrix.RowCount*matrix.ColumnCount];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
+
+ NotModified(3, 3, a, matrix);
+
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
+
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a tall A matrix
- /// using a work array.
- ///
- [Test]
- public void CanSolveUsingThinQRTallMatrixUsingWorkArray()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using thin QR factorization with a tall A matrix
+ /// using a work array.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRTallMatrixUsingWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- var work = new double[matrix.RowCount * matrix.ColumnCount];
- Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ var work = new double[matrix.RowCount*matrix.ColumnCount];
+ Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
- NotModified(3, 2, a, matrix);
+ NotModified(3, 2, a, matrix);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a square A matrix
- /// using a factored A matrix.
- ///
- [Test]
- public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var tau = new double[matrix.ColumnCount];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
-
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
-
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ ///
+ /// Can solve Ax=b using thin QR factorization with a square A matrix
+ /// using a factored A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var tau = new double[matrix.ColumnCount];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
+
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
+
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a tall A matrix
- /// using a factored A matrix.
- ///
- [Test]
- public void CanSolveUsingThinQRTallMatrixOnFactoredMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using thin QR factorization with a tall A matrix
+ /// using a factored A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRTallMatrixOnFactoredMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var tau = new double[matrix.ColumnCount];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
+ var tau = new double[matrix.ColumnCount];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a square A matrix
- /// using a factored A matrix with a work array.
- ///
- [Test]
- public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrixWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var tau = new double[matrix.ColumnCount];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- var work = new double[2048];
- Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
-
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
-
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ ///
+ /// Can solve Ax=b using thin QR factorization with a square A matrix
+ /// using a factored A matrix with a work array.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var tau = new double[matrix.ColumnCount];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var work = new double[2048];
+ Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
+
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
+
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using thin QR factorization with a tall A matrix
- /// using a factored A matrix with a work array.
- ///
- [Test]
- public void CanSolveUsingThinQRTallMatrixOnFactoredMatrixWithWorkArray()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
-
- var tau = new double[matrix.ColumnCount];
- var r = new double[matrix.ColumnCount * matrix.ColumnCount];
- var work = new double[2048];
- Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
-
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin );
-
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
-
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
-
- ///
- /// Can compute the SVD factorization of a square matrix.
- ///
- [Test]
- public void CanComputeSVDFactorizationOfSquareMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using thin QR factorization with a tall A matrix
+ /// using a factored A matrix with a work array.
+ ///
+ [Test]
+ public void CanSolveUsingThinQRTallMatrixOnFactoredMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
+
+ var tau = new double[matrix.ColumnCount];
+ var r = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var work = new double[2048];
+ Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
+
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
+
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
+
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- var s = new double[matrix.RowCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
+ ///
+ /// Can compute the SVD factorization of a square matrix.
+ ///
+ [Test]
+ public void CanComputeSVDFactorizationOfSquareMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
+ var s = new double[matrix.RowCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
- var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
- for (var index = 0; index < s.Length; index++)
- {
- w[index, index] = s[index];
- }
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
- var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
-
- AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
- AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
- AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
- AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
- AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
- AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
- AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
- AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
- AssertHelpers.AlmostEqual(matrix[2, 2], result[2, 2], 14);
+ var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
+ for (var index = 0; index < s.Length; index++)
+ {
+ w[index, index] = s[index];
}
- ///
- /// Can compute the SVD factorization of a tall matrix.
- ///
- [Test]
- public void CanComputeSVDFactorizationOfTallMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
+ var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
+ var result = mU*w*mV;
- var s = new double[matrix.ColumnCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
+ AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 2], result[2, 2], 14);
+ }
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
+ ///
+ /// Can compute the SVD factorization of a tall matrix.
+ ///
+ [Test]
+ public void CanComputeSVDFactorizationOfTallMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
- for (var index = 0; index < s.Length; index++)
- {
- w[index, index] = s[index];
- }
+ var s = new double[matrix.ColumnCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
- var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
- var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
- AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
- AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
- AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
- AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
- AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
+ var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
+ for (var index = 0; index < s.Length; index++)
+ {
+ w[index, index] = s[index];
}
- ///
- /// Can compute the SVD factorization of a wide matrix.
- ///
- [Test]
- public void CanComputeSVDFactorizationOfWideMatrix()
- {
- var matrix = _matrices["Wide2x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
+ var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
+ var result = mU*w*mV;
- var s = new double[matrix.RowCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
+ AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
+ }
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
+ ///
+ /// Can compute the SVD factorization of a wide matrix.
+ ///
+ [Test]
+ public void CanComputeSVDFactorizationOfWideMatrix()
+ {
+ var matrix = _matrices["Wide2x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
- for (var index = 0; index < s.Length; index++)
- {
- w[index, index] = s[index];
- }
+ var s = new double[matrix.RowCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
- var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
- var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
- AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
- AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
- AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
- AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
- AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
+ var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
+ for (var index = 0; index < s.Length; index++)
+ {
+ w[index, index] = s[index];
}
- ///
- /// Can compute the SVD factorization of a square matrix using
- /// a work array.
- ///
- [Test]
- public void CanComputeSVDFactorizationOfSquareMatrixWithWorkArray()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
+ var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
+ var result = mU*w*mV;
- var s = new double[matrix.RowCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
- var work = new double[100];
+ AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
+ }
+
+ ///
+ /// Can compute the SVD factorization of a square matrix using
+ /// a work array.
+ ///
+ [Test]
+ public void CanComputeSVDFactorizationOfSquareMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
+ var s = new double[matrix.RowCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var work = new double[100];
- var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
- for (var index = 0; index < s.Length; index++)
- {
- w[index, index] = s[index];
- }
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
- var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
- var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
-
- AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
- AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
- AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
- AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
- AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
- AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
- AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
- AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
- AssertHelpers.AlmostEqual(matrix[2, 2], result[2, 2], 14);
+ var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
+ for (var index = 0; index < s.Length; index++)
+ {
+ w[index, index] = s[index];
}
- ///
- /// Can compute the SVD factorization of a tall matrix using
- /// a work array.
- ///
- [Test]
- public void CanComputeSVDFactorizationOfTallMatrixWithWorkArray()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
+ var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
+ var result = mU*w*mV;
- var s = new double[matrix.ColumnCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
- var work = new double[100];
+ AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 2], result[2, 2], 14);
+ }
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
+ ///
+ /// Can compute the SVD factorization of a tall matrix using
+ /// a work array.
+ ///
+ [Test]
+ public void CanComputeSVDFactorizationOfTallMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
- for (var index = 0; index < s.Length; index++)
- {
- w[index, index] = s[index];
- }
+ var s = new double[matrix.ColumnCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var work = new double[100];
- var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
- var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
- AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
- AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
- AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
- AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
- AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
- AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
+ var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
+ for (var index = 0; index < s.Length; index++)
+ {
+ w[index, index] = s[index];
}
- ///
- /// Can compute the SVD factorization of a wide matrix using
- /// a work array.
- ///
- [Test]
- public void CanComputeSVDFactorizationOfWideMatrixWithWorkArray()
- {
- var matrix = _matrices["Wide2x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
+ var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
+ var result = mU*w*mV;
- var s = new double[matrix.RowCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
- var work = new double[100];
+ AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 0], result[2, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[2, 1], result[2, 1], 14);
+ }
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
+ ///
+ /// Can compute the SVD factorization of a wide matrix using
+ /// a work array.
+ ///
+ [Test]
+ public void CanComputeSVDFactorizationOfWideMatrixWithWorkArray()
+ {
+ var matrix = _matrices["Wide2x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
- for (var index = 0; index < s.Length; index++)
- {
- w[index, index] = s[index];
- }
+ var s = new double[matrix.RowCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
+ var work = new double[100];
- var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
- var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
- AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
- AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
- AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
- AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
- AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
- AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
+ var w = new DenseMatrix(matrix.RowCount, matrix.ColumnCount);
+ for (var index = 0; index < s.Length; index++)
+ {
+ w[index, index] = s[index];
}
- ///
- /// Can solve Ax=b using SVD factorization with a square A matrix.
- ///
- [Test]
- public void CanSolveUsingSVDSquareMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
+ var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
+ var result = mU*w*mV;
+
+ AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 1], result[0, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 1], result[1, 1], 14);
+ AssertHelpers.AlmostEqual(matrix[0, 2], result[0, 2], 14);
+ AssertHelpers.AlmostEqual(matrix[1, 2], result[1, 2], 14);
+ }
+
+ ///
+ /// Can solve Ax=b using SVD factorization with a square A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingSVDSquareMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
- NotModified(3, 3, a, matrix);
+ NotModified(3, 3, a, matrix);
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using SVD factorization with a tall A matrix.
- ///
- [Test]
- public void CanSolveUsingSVDTallMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using SVD factorization with a tall A matrix.
+ ///
+ [Test]
+ public void CanSolveUsingSVDTallMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
- NotModified(3, 2, a, matrix);
+ NotModified(3, 2, a, matrix);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- ///
- /// Can solve Ax=b using SVD factorization with a square A matrix
- /// using a factored matrix.
- ///
- [Test]
- public void CanSolveUsingSVDSquareMatrixOnFactoredMatrix()
- {
- var matrix = _matrices["Square3x3"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using SVD factorization with a square A matrix
+ /// using a factored matrix.
+ ///
+ [Test]
+ public void CanSolveUsingSVDSquareMatrixOnFactoredMatrix()
+ {
+ var matrix = _matrices["Square3x3"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var s = new double[matrix.RowCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
+ var s = new double[matrix.RowCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
- var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
+ var mb = matrix*mx;
- AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
- AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
- AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
- AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
- AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
- AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
- }
+ AssertHelpers.AlmostEqual(mb[0, 0], b[0], 14);
+ AssertHelpers.AlmostEqual(mb[1, 0], b[1], 14);
+ AssertHelpers.AlmostEqual(mb[2, 0], b[2], 14);
+ AssertHelpers.AlmostEqual(mb[0, 1], b[3], 14);
+ AssertHelpers.AlmostEqual(mb[1, 1], b[4], 14);
+ AssertHelpers.AlmostEqual(mb[2, 1], b[5], 14);
+ }
- ///
- /// Can solve Ax=b using SVD factorization with a tall A matrix
- /// using a factored matrix.
- ///
- [Test]
- public void CanSolveUsingSVDTallMatrixOnFactoredMatrix()
- {
- var matrix = _matrices["Tall3x2"];
- var a = new double[matrix.RowCount * matrix.ColumnCount];
- Array.Copy(matrix.Values, a, a.Length);
+ ///
+ /// Can solve Ax=b using SVD factorization with a tall A matrix
+ /// using a factored matrix.
+ ///
+ [Test]
+ public void CanSolveUsingSVDTallMatrixOnFactoredMatrix()
+ {
+ var matrix = _matrices["Tall3x2"];
+ var a = new double[matrix.RowCount*matrix.ColumnCount];
+ Array.Copy(matrix.Values, a, a.Length);
- var s = new double[matrix.ColumnCount];
- var u = new double[matrix.RowCount * matrix.RowCount];
- var vt = new double[matrix.ColumnCount * matrix.ColumnCount];
+ var s = new double[matrix.ColumnCount];
+ var u = new double[matrix.RowCount*matrix.RowCount];
+ var vt = new double[matrix.ColumnCount*matrix.ColumnCount];
- Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
+ Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- var x = new double[matrix.ColumnCount * 2];
- Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
+ var b = new[] {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
+ var x = new double[matrix.ColumnCount*2];
+ Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
- var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var mb = new DenseMatrix(matrix.RowCount, 2, b);
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
- AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
- AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
- AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
- AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
- }
+ AssertHelpers.AlmostEqual(test[0, 0], x[0], 14);
+ AssertHelpers.AlmostEqual(test[1, 0], x[1], 14);
+ AssertHelpers.AlmostEqual(test[0, 1], x[2], 14);
+ AssertHelpers.AlmostEqual(test[1, 1], x[3], 14);
+ }
- [TestCase("Wide10x50000", "Tall50000x10")]
- [TestCase("Square1000x1000", "Square1000x1000")]
- [Timeout(1000 * 10)]
- public void IsMatrixMultiplicationPerformant(string leftMatrixKey, string rightMatrixKey)
- {
- var leftMatrix = _matrices[leftMatrixKey];
- var rightMatrix = _matrices[rightMatrixKey];
- var result = leftMatrix*rightMatrix;
- Assert.That(result, Is.Not.Null);
- }
+ [TestCase("Wide10x50000", "Tall50000x10")]
+ [TestCase("Square1000x1000", "Square1000x1000")]
+ [Timeout(1000*10)]
+ public void IsMatrixMultiplicationPerformant(string leftMatrixKey, string rightMatrixKey)
+ {
+ var leftMatrix = _matrices[leftMatrixKey];
+ var rightMatrix = _matrices[rightMatrixKey];
+ var result = leftMatrix*rightMatrix;
+ Assert.That(result, Is.Not.Null);
+ }
///
/// Checks to see if a matrix and array contain the same values.
@@ -1707,7 +1711,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Double
/// number of columns.
/// array to check.
/// matrix to check against.
- private static void NotModified(int rows, int columns, IList array, Matrix matrix)
+ static void NotModified(int rows, int columns, IList array, Matrix matrix)
{
var index = 0;
for (var col = 0; col < columns; col++)
diff --git a/src/UnitTests/LinearAlgebraProviderTests/Single/LinearAlgebraProviderTests.cs b/src/UnitTests/LinearAlgebraProviderTests/Single/LinearAlgebraProviderTests.cs
index c7ebac4d..f36d64b5 100644
--- a/src/UnitTests/LinearAlgebraProviderTests/Single/LinearAlgebraProviderTests.cs
+++ b/src/UnitTests/LinearAlgebraProviderTests/Single/LinearAlgebraProviderTests.cs
@@ -3,7 +3,9 @@
// http://numerics.mathdotnet.com
// http://github.com/mathnet/mathnet-numerics
// http://mathnetnumerics.codeplex.com
-// Copyright (c) 2009-2010 Math.NET
+//
+// Copyright (c) 2009-2013 Math.NET
+//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
@@ -12,8 +14,10 @@
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
+//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
+//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -44,30 +48,30 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
///
/// The Y float test vector.
///
- private readonly float[] _y = new[] { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f };
+ readonly float[] _y = new[] {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
///
/// The X float test vector.
///
- private readonly float[] _x = new[] { 6.6f, 7.7f, 8.8f, 9.9f, 10.1f };
+ readonly float[] _x = new[] {6.6f, 7.7f, 8.8f, 9.9f, 10.1f};
- private static readonly IContinuousDistribution Dist = new Normal();
+ static readonly IContinuousDistribution Dist = new Normal();
///
/// Test matrix to use.
///
readonly IDictionary _matrices = new Dictionary
- {
- { "Singular3x3", new DenseMatrix(new[,] { { 1.0f, 1.0f, 2.0f }, { 1.0f, 1.0f, 2.0f }, { 1.0f, 1.0f, 2.0f } }) },
- { "Square3x3", new DenseMatrix(new[,] { { -1.1f, -2.2f, -3.3f }, { 0.0f, 1.1f, 2.2f }, { -4.4f, 5.5f, 6.6f } }) },
- { "Square4x4", new DenseMatrix(new[,] { { -1.1f, -2.2f, -3.3f, -4.4f }, { 0.0f, 1.1f, 2.2f, 3.3f }, { 1.0f, 2.1f, 6.2f, 4.3f }, { -4.4f, 5.5f, 6.6f, -7.7f } }) },
- { "Singular4x4", new DenseMatrix(new[,] { { -1.1f, -2.2f, -3.3f, -4.4f }, { -1.1f, -2.2f, -3.3f, -4.4f }, { -1.1f, -2.2f, -3.3f, -4.4f }, { -1.1f, -2.2f, -3.3f, -4.4f } }) },
- { "Tall3x2", new DenseMatrix(new[,] { { -1.1f, -2.2f }, { 0.0f, 1.1f }, { -4.4f, 5.5f } }) },
- { "Wide2x3", new DenseMatrix(new[,] { { -1.1f, -2.2f, -3.3f }, { 0.0f, 1.1f, 2.2f } }) },
- { "Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist) },
- { "Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist) },
- { "Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist) }
- };
+ {
+ {"Singular3x3", new DenseMatrix(new[,] {{1.0f, 1.0f, 2.0f}, {1.0f, 1.0f, 2.0f}, {1.0f, 1.0f, 2.0f}})},
+ {"Square3x3", new DenseMatrix(new[,] {{-1.1f, -2.2f, -3.3f}, {0.0f, 1.1f, 2.2f}, {-4.4f, 5.5f, 6.6f}})},
+ {"Square4x4", new DenseMatrix(new[,] {{-1.1f, -2.2f, -3.3f, -4.4f}, {0.0f, 1.1f, 2.2f, 3.3f}, {1.0f, 2.1f, 6.2f, 4.3f}, {-4.4f, 5.5f, 6.6f, -7.7f}})},
+ {"Singular4x4", new DenseMatrix(new[,] {{-1.1f, -2.2f, -3.3f, -4.4f}, {-1.1f, -2.2f, -3.3f, -4.4f}, {-1.1f, -2.2f, -3.3f, -4.4f}, {-1.1f, -2.2f, -3.3f, -4.4f}})},
+ {"Tall3x2", new DenseMatrix(new[,] {{-1.1f, -2.2f}, {0.0f, 1.1f}, {-4.4f, 5.5f}})},
+ {"Wide2x3", new DenseMatrix(new[,] {{-1.1f, -2.2f, -3.3f}, {0.0f, 1.1f, 2.2f}})},
+ {"Tall50000x10", DenseMatrix.CreateRandom(50000, 10, Dist)},
+ {"Wide10x50000", DenseMatrix.CreateRandom(10, 50000, Dist)},
+ {"Square1000x1000", DenseMatrix.CreateRandom(1000, 1000, Dist)}
+ };
///
/// Can add a vector to scaled vector
@@ -91,10 +95,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
}
Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.AddVectorToScaledVector(result, (float)Math.PI, _x, result);
+ Control.LinearAlgebraProvider.AddVectorToScaledVector(result, (float) Math.PI, _x, result);
for (var i = 0; i < _y.Length; i++)
{
- AssertHelpers.AlmostEqual(_y[i] + ((float)Math.PI * _x[i]), result[i], 6);
+ AssertHelpers.AlmostEqual(_y[i] + ((float) Math.PI*_x[i]), result[i], 6);
}
}
@@ -113,10 +117,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
}
Array.Copy(_y, result, _y.Length);
- Control.LinearAlgebraProvider.ScaleArray((float)Math.PI, result, result);
+ Control.LinearAlgebraProvider.ScaleArray((float) Math.PI, result, result);
for (var i = 0; i < _y.Length; i++)
{
- AssertHelpers.AlmostEqual(_y[i] * (float)Math.PI, result[i], 6);
+ AssertHelpers.AlmostEqual(_y[i]*(float) Math.PI, result[i], 6);
}
}
@@ -168,7 +172,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_x, _y, result);
for (var i = 0; i < result.Length; i++)
{
- Assert.AreEqual(_x[i] * _y[i], result[i]);
+ Assert.AreEqual(_x[i]*_y[i], result[i]);
}
}
@@ -182,7 +186,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
Control.LinearAlgebraProvider.PointWiseDivideArrays(_x, _y, result);
for (var i = 0; i < result.Length; i++)
{
- Assert.AreEqual(_x[i] / _y[i], result[i]);
+ Assert.AreEqual(_x[i]/_y[i], result[i]);
}
}
@@ -274,7 +278,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -295,7 +299,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -316,7 +320,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -337,7 +341,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2f * x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(2.2f*x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -358,7 +362,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
{
for (var j = 0; j < c.ColumnCount; j++)
{
- AssertHelpers.AlmostEqual(2.2f * x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(2.2f*x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -379,7 +383,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
{
for (var j = 0; j < c.ColumnCount; j++)
{
- var test = 2.2f * x.Row(i) * y.Column(j);
+ var test = 2.2f*x.Row(i)*y.Column(j);
// if they are both close to zero, skip
if (Math.Abs(test) < 1e-7 && Math.Abs(c[i, j]) < 1e-7)
@@ -387,7 +391,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
continue;
}
- AssertHelpers.AlmostEqual(2.2f * x.Row(i) * y.Column(j), c[i, j], 6);
+ AssertHelpers.AlmostEqual(2.2f*x.Row(i)*y.Column(j), c[i, j], 6);
}
}
}
@@ -399,7 +403,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeLuFactor()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -427,7 +431,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeLuInverse()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
Control.LinearAlgebraProvider.LUInverse(a, matrix.RowCount);
@@ -451,7 +455,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeLuInverseOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -478,7 +482,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeLuInverseWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var work = new float[matrix.RowCount];
@@ -503,7 +507,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeLuInverseOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
@@ -531,10 +535,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingLU()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.LUSolve(2, a, matrix.RowCount, b);
AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 6);
@@ -554,13 +558,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingLUOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var ipiv = new int[matrix.RowCount];
Control.LinearAlgebraProvider.LUFactor(a, matrix.RowCount, ipiv);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.LUSolveFactored(2, a, matrix.RowCount, ipiv, b);
AssertHelpers.AlmostEqual(b[0], -1.477272727272726, 6);
@@ -577,7 +581,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
[Test]
public void CanComputeCholeskyFactor()
{
- var matrix = new float[] { 1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15 };
+ var matrix = new float[] {1, 1, 1, 1, 1, 5, 5, 5, 1, 5, 14, 14, 1, 5, 14, 15};
Control.LinearAlgebraProvider.CholeskyFactor(matrix, 4);
Assert.AreEqual(matrix[0], 1);
Assert.AreEqual(matrix[1], 1);
@@ -603,10 +607,10 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
[Test]
public void CanSolveUsingCholesky()
{
- var matrix = new DenseMatrix(3, 3, new float[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 });
- var a = new float[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ var matrix = new DenseMatrix(3, 3, new float[] {1, 1, 1, 1, 2, 3, 1, 3, 6});
+ var a = new float[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.CholeskySolve(a, 3, b, 2);
AssertHelpers.AlmostEqual(b[0], 0, 6);
@@ -625,11 +629,11 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
[Test]
public void CanSolveUsingCholeskyOnFactoredMatrix()
{
- var a = new float[] { 1, 1, 1, 1, 2, 3, 1, 3, 6 };
+ var a = new float[] {1, 1, 1, 1, 2, 3, 1, 3, 6};
Control.LinearAlgebraProvider.CholeskyFactor(a, 3);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
Control.LinearAlgebraProvider.CholeskySolveFactored(a, 3, b, 2);
AssertHelpers.AlmostEqual(b[0], 0, 6);
@@ -647,16 +651,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeQRFactorSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var r = new float[matrix.RowCount * matrix.ColumnCount];
+ var r = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.RowCount];
+ var q = new float[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -674,16 +678,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeQRFactorTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var r = new float[matrix.RowCount * matrix.ColumnCount];
+ var r = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.RowCount];
+ var q = new float[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -701,16 +705,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeQRFactorWideMatrix()
{
var matrix = _matrices["Wide2x3"];
- var r = new float[matrix.RowCount * matrix.ColumnCount];
+ var r = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.RowCount];
+ var q = new float[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -728,17 +732,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeQRFactorSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var r = new float[matrix.RowCount * matrix.ColumnCount];
+ var r = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.RowCount];
- var work = new float[matrix.ColumnCount * Control.BlockSize];
+ var q = new float[matrix.RowCount*matrix.RowCount];
+ var work = new float[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -756,17 +760,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeQRFactorTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var r = new float[matrix.RowCount * matrix.ColumnCount];
+ var r = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.RowCount];
- var work = new float[matrix.ColumnCount * Control.BlockSize];
+ var q = new float[matrix.RowCount*matrix.RowCount];
+ var work = new float[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -784,17 +788,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeQRFactorWideMatrixWithWorkArray()
{
var matrix = _matrices["Wide2x3"];
- var r = new float[matrix.RowCount * matrix.ColumnCount];
+ var r = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, r, r.Length);
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.RowCount];
- var work = new float[matrix.ColumnCount * Control.BlockSize];
+ var q = new float[matrix.RowCount*matrix.RowCount];
+ var work = new float[matrix.ColumnCount*Control.BlockSize];
Control.LinearAlgebraProvider.QRFactor(r, matrix.RowCount, matrix.ColumnCount, q, tau, work);
var mr = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, r).UpperTriangle();
var mq = new DenseMatrix(matrix.RowCount, matrix.RowCount, q);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -812,16 +816,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeThinQRFactorSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.ColumnCount];
+ var q = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -839,16 +843,16 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeThinQRFactorTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.ColumnCount];
+ var q = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -866,17 +870,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeThinQRFactorSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.ColumnCount];
+ var q = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
- var work = new float[matrix.RowCount * matrix.ColumnCount];
+ var work = new float[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
@@ -894,17 +898,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeThinQRFactorTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
var tau = new float[3];
- var q = new float[matrix.RowCount * matrix.ColumnCount];
+ var q = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, q, q.Length);
- var work = new float[matrix.RowCount * matrix.ColumnCount];
+ var work = new float[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(q, matrix.RowCount, matrix.ColumnCount, r, tau, work);
var mq = new DenseMatrix(matrix.RowCount, matrix.ColumnCount, q);
var mr = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, r);
- var a = mq * mr;
+ var a = mq*mr;
for (var row = 0; row < matrix.RowCount; row++)
{
for (var col = 0; col < matrix.ColumnCount; col++)
@@ -921,17 +925,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -948,17 +952,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -974,18 +978,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRSquareMatrixUsingWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
- var work = new float[matrix.RowCount * matrix.RowCount];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
+ var work = new float[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1003,18 +1007,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRTallMatrixUsingWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
- var work = new float[matrix.RowCount * matrix.RowCount];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
+ var work = new float[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1030,19 +1034,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var q = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var q = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1060,19 +1064,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var q = new float[matrix.RowCount * matrix.RowCount];
+ var q = new float[matrix.RowCount*matrix.RowCount];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1088,20 +1092,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRSquareMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.RowCount];
+ var a = new float[matrix.RowCount*matrix.RowCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var q = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var q = new float[matrix.ColumnCount*matrix.ColumnCount];
var work = new float[2048];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1119,20 +1123,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingQRTallMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var q = new float[matrix.RowCount * matrix.RowCount];
+ var q = new float[matrix.RowCount*matrix.RowCount];
var work = new float[2048];
Control.LinearAlgebraProvider.QRFactor(a, matrix.RowCount, matrix.ColumnCount, q, tau, work);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(q, a, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1147,17 +1151,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1174,17 +1178,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, QRMethod.Thin);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1200,18 +1204,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRSquareMatrixUsingWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
- var work = new float[matrix.RowCount * matrix.ColumnCount];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
+ var work = new float[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1229,18 +1233,18 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRTallMatrixUsingWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
- var work = new float[matrix.RowCount * matrix.ColumnCount];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
+ var work = new float[matrix.RowCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.QRSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x, work, QRMethod.Thin);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1256,19 +1260,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1286,19 +1290,19 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, QRMethod.Thin);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1314,20 +1318,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRSquareMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
var work = new float[2048];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 5);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 5);
@@ -1345,20 +1349,20 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingThinQRTallMatrixOnFactoredMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var tau = new float[matrix.ColumnCount];
- var r = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var r = new float[matrix.ColumnCount*matrix.ColumnCount];
var work = new float[2048];
Control.LinearAlgebraProvider.ThinQRFactor(a, matrix.RowCount, matrix.ColumnCount, r, tau, work);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.QRSolveFactored(a, r, matrix.RowCount, matrix.ColumnCount, tau, b, 2, x, work, QRMethod.Thin);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1373,12 +1377,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeSVDFactorizationOfSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.RowCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1390,7 +1394,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1410,12 +1414,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeSVDFactorizationOfTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.ColumnCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1427,7 +1431,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1444,12 +1448,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeSVDFactorizationOfWideMatrix()
{
var matrix = _matrices["Wide2x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.RowCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
@@ -1461,7 +1465,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1479,12 +1483,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeSVDFactorizationOfSquareMatrixWithWorkArray()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.RowCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
var work = new float[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1497,7 +1501,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1518,12 +1522,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeSVDFactorizationOfTallMatrixWithWorkArray()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.ColumnCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
var work = new float[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1536,7 +1540,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1554,12 +1558,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanComputeSVDFactorizationOfWideMatrixWithWorkArray()
{
var matrix = _matrices["Wide2x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.RowCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
var work = new float[100];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt, work);
@@ -1572,7 +1576,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
var mU = new DenseMatrix(matrix.RowCount, matrix.RowCount, u);
var mV = new DenseMatrix(matrix.ColumnCount, matrix.ColumnCount, vt);
- var result = mU * w * mV;
+ var result = mU*w*mV;
AssertHelpers.AlmostEqual(matrix[0, 0], result[0, 0], 6);
AssertHelpers.AlmostEqual(matrix[1, 0], result[1, 0], 6);
@@ -1589,17 +1593,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingSVDSquareMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 3, a, matrix);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 6);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 6);
@@ -1616,17 +1620,17 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingSVDTallMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolve(a, matrix.RowCount, matrix.ColumnCount, b, 2, x);
NotModified(3, 2, a, matrix);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1642,21 +1646,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingSVDSquareMatrixOnFactoredMatrix()
{
var matrix = _matrices["Square3x3"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.RowCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
var mx = new DenseMatrix(matrix.ColumnCount, 2, x);
- var mb = matrix * mx;
+ var mb = matrix*mx;
AssertHelpers.AlmostEqual(mb[0, 0], b[0], 6);
AssertHelpers.AlmostEqual(mb[1, 0], b[1], 6);
@@ -1674,21 +1678,21 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
public void CanSolveUsingSVDTallMatrixOnFactoredMatrix()
{
var matrix = _matrices["Tall3x2"];
- var a = new float[matrix.RowCount * matrix.ColumnCount];
+ var a = new float[matrix.RowCount*matrix.ColumnCount];
Array.Copy(matrix.Values, a, a.Length);
var s = new float[matrix.ColumnCount];
- var u = new float[matrix.RowCount * matrix.RowCount];
- var vt = new float[matrix.ColumnCount * matrix.ColumnCount];
+ var u = new float[matrix.RowCount*matrix.RowCount];
+ var vt = new float[matrix.ColumnCount*matrix.ColumnCount];
Control.LinearAlgebraProvider.SingularValueDecomposition(true, a, matrix.RowCount, matrix.ColumnCount, s, u, vt);
- var b = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
- var x = new float[matrix.ColumnCount * 2];
+ var b = new[] {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+ var x = new float[matrix.ColumnCount*2];
Control.LinearAlgebraProvider.SvdSolveFactored(matrix.RowCount, matrix.ColumnCount, s, u, vt, b, 2, x);
var mb = new DenseMatrix(matrix.RowCount, 2, b);
- var test = (matrix.Transpose() * matrix).Inverse() * matrix.Transpose() * mb;
+ var test = (matrix.Transpose()*matrix).Inverse()*matrix.Transpose()*mb;
AssertHelpers.AlmostEqual(test[0, 0], x[0], 6);
AssertHelpers.AlmostEqual(test[1, 0], x[1], 6);
@@ -1698,12 +1702,12 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
[TestCase("Wide10x50000", "Tall50000x10")]
[TestCase("Square1000x1000", "Square1000x1000")]
- [Timeout(1000 * 10)]
+ [Timeout(1000*10)]
public void IsMatrixMultiplicationPerformant(string leftMatrixKey, string rightMatrixKey)
{
var leftMatrix = _matrices[leftMatrixKey];
var rightMatrix = _matrices[rightMatrixKey];
- var result = leftMatrix * rightMatrix;
+ var result = leftMatrix*rightMatrix;
Assert.That(result, Is.Not.Null);
}
@@ -1714,7 +1718,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraProviderTests.Single
/// number of columns.
/// array to check.
/// matrix to check against.
- private static void NotModified(int rows, int columns, IList array, Matrix matrix)
+ static void NotModified(int rows, int columns, IList array, Matrix matrix)
{
var index = 0;
for (var col = 0; col < columns; col++)