|
|
@ -25,7 +25,6 @@ |
|
|
// </copyright>
|
|
|
// </copyright>
|
|
|
|
|
|
|
|
|
using System; |
|
|
using System; |
|
|
using MathNet.Numerics.LinearAlgebra; |
|
|
|
|
|
using NUnit.Framework; |
|
|
using NUnit.Framework; |
|
|
|
|
|
|
|
|
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
@ -47,7 +46,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
public void CanFactorizeIdentity(int order) |
|
|
public void CanFactorizeIdentity(int order) |
|
|
{ |
|
|
{ |
|
|
var matrixI = UserDefinedMatrix.Identity(order); |
|
|
var matrixI = UserDefinedMatrix.Identity(order); |
|
|
var factorSvd = matrixI.Svd(true); |
|
|
var factorSvd = matrixI.Svd(); |
|
|
var u = factorSvd.U; |
|
|
var u = factorSvd.U; |
|
|
var vt = factorSvd.VT; |
|
|
var vt = factorSvd.VT; |
|
|
var w = factorSvd.W; |
|
|
var w = factorSvd.W; |
|
|
@ -84,7 +83,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
public void CanFactorizeRandomMatrix(int row, int column) |
|
|
public void CanFactorizeRandomMatrix(int row, int column) |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
var u = factorSvd.U; |
|
|
var u = factorSvd.U; |
|
|
var vt = factorSvd.VT; |
|
|
var vt = factorSvd.VT; |
|
|
var w = factorSvd.W; |
|
|
var w = factorSvd.W; |
|
|
@ -102,7 +101,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
Assert.AreEqual(column, w.ColumnCount); |
|
|
Assert.AreEqual(column, w.ColumnCount); |
|
|
|
|
|
|
|
|
// Make sure the U*W*VT is the original matrix.
|
|
|
// Make sure the U*W*VT is the original matrix.
|
|
|
var matrix = u * w * vt; |
|
|
var matrix = u*w*vt; |
|
|
for (var i = 0; i < matrix.RowCount; i++) |
|
|
for (var i = 0; i < matrix.RowCount; i++) |
|
|
{ |
|
|
{ |
|
|
for (var j = 0; j < matrix.ColumnCount; j++) |
|
|
for (var j = 0; j < matrix.ColumnCount; j++) |
|
|
@ -124,7 +123,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
public void CanCheckRankOfNonSquare(int row, int column) |
|
|
public void CanCheckRankOfNonSquare(int row, int column) |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
|
|
|
|
|
|
var mn = Math.Min(row, column); |
|
|
var mn = Math.Min(row, column); |
|
|
Assert.AreEqual(factorSvd.Rank, mn); |
|
|
Assert.AreEqual(factorSvd.Rank, mn); |
|
|
@ -143,7 +142,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
public void CanCheckRankSquare(int order) |
|
|
public void CanCheckRankSquare(int order) |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(order, order); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(order, order); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
|
|
|
|
|
|
if (factorSvd.Determinant != 0) |
|
|
if (factorSvd.Determinant != 0) |
|
|
{ |
|
|
{ |
|
|
@ -175,7 +174,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
matrixA[i + 1, i] = 1; |
|
|
matrixA[i + 1, i] = 1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
|
|
|
|
|
|
Assert.AreEqual(factorSvd.Determinant, Complex32.Zero); |
|
|
Assert.AreEqual(factorSvd.Determinant, Complex32.Zero); |
|
|
Assert.AreEqual(factorSvd.Rank, order - 1); |
|
|
Assert.AreEqual(factorSvd.Rank, order - 1); |
|
|
@ -222,14 +221,14 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
|
|
|
|
|
|
var vectorb = MatrixLoader.GenerateRandomUserDefinedVector(row); |
|
|
var vectorb = MatrixLoader.GenerateRandomUserDefinedVector(row); |
|
|
var resultx = factorSvd.Solve(vectorb); |
|
|
var resultx = factorSvd.Solve(vectorb); |
|
|
|
|
|
|
|
|
Assert.AreEqual(matrixA.ColumnCount, resultx.Count); |
|
|
Assert.AreEqual(matrixA.ColumnCount, resultx.Count); |
|
|
|
|
|
|
|
|
var matrixBReconstruct = matrixA * resultx; |
|
|
var matrixBReconstruct = matrixA*resultx; |
|
|
|
|
|
|
|
|
// Check the reconstruction.
|
|
|
// Check the reconstruction.
|
|
|
for (var i = 0; i < vectorb.Count; i++) |
|
|
for (var i = 0; i < vectorb.Count; i++) |
|
|
@ -263,7 +262,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
|
|
|
|
|
|
var matrixB = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixB = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixX = factorSvd.Solve(matrixB); |
|
|
var matrixX = factorSvd.Solve(matrixB); |
|
|
@ -274,7 +273,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
// The solution X has the same number of columns as B
|
|
|
// The solution X has the same number of columns as B
|
|
|
Assert.AreEqual(matrixB.ColumnCount, matrixX.ColumnCount); |
|
|
Assert.AreEqual(matrixB.ColumnCount, matrixX.ColumnCount); |
|
|
|
|
|
|
|
|
var matrixBReconstruct = matrixA * matrixX; |
|
|
var matrixBReconstruct = matrixA*matrixX; |
|
|
|
|
|
|
|
|
// Check the reconstruction.
|
|
|
// Check the reconstruction.
|
|
|
for (var i = 0; i < matrixB.RowCount; i++) |
|
|
for (var i = 0; i < matrixB.RowCount; i++) |
|
|
@ -311,13 +310,13 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
var vectorb = MatrixLoader.GenerateRandomUserDefinedVector(row); |
|
|
var vectorb = MatrixLoader.GenerateRandomUserDefinedVector(row); |
|
|
var vectorbCopy = vectorb.Clone(); |
|
|
var vectorbCopy = vectorb.Clone(); |
|
|
var resultx = new UserDefinedVector(column); |
|
|
var resultx = new UserDefinedVector(column); |
|
|
factorSvd.Solve(vectorb, resultx); |
|
|
factorSvd.Solve(vectorb, resultx); |
|
|
|
|
|
|
|
|
var matrixBReconstruct = matrixA * resultx; |
|
|
var matrixBReconstruct = matrixA*resultx; |
|
|
|
|
|
|
|
|
// Check the reconstruction.
|
|
|
// Check the reconstruction.
|
|
|
for (var i = 0; i < vectorb.Count; i++) |
|
|
for (var i = 0; i < vectorb.Count; i++) |
|
|
@ -357,7 +356,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
{ |
|
|
{ |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixA = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var matrixACopy = matrixA.Clone(); |
|
|
var factorSvd = matrixA.Svd(true); |
|
|
var factorSvd = matrixA.Svd(); |
|
|
|
|
|
|
|
|
var matrixB = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixB = MatrixLoader.GenerateRandomUserDefinedMatrix(row, column); |
|
|
var matrixBCopy = matrixB.Clone(); |
|
|
var matrixBCopy = matrixB.Clone(); |
|
|
@ -371,7 +370,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32.Factorization |
|
|
// The solution X has the same number of columns as B
|
|
|
// The solution X has the same number of columns as B
|
|
|
Assert.AreEqual(matrixB.ColumnCount, matrixX.ColumnCount); |
|
|
Assert.AreEqual(matrixB.ColumnCount, matrixX.ColumnCount); |
|
|
|
|
|
|
|
|
var matrixBReconstruct = matrixA * matrixX; |
|
|
var matrixBReconstruct = matrixA*matrixX; |
|
|
|
|
|
|
|
|
// Check the reconstruction.
|
|
|
// Check the reconstruction.
|
|
|
for (var i = 0; i < matrixB.RowCount; i++) |
|
|
for (var i = 0; i < matrixB.RowCount; i++) |
|
|
|