public void NullTest() { Assert.Throws(typeof(ArgumentNullException), () => { var test = new ComplexFloatQRDecomp(null); }); }
public void SquareDecomp() { ComplexFloatMatrix a = new ComplexFloatMatrix(3); a[0, 0] = new ComplexFloat(1.1f, 1.1f); a[0, 1] = new ComplexFloat(2.2f, -2.2f); a[0, 2] = new ComplexFloat(3.3f, 3.3f); a[1, 0] = new ComplexFloat(4.4f, -4.4f); a[1, 1] = new ComplexFloat(5.5f, 5.5f); a[1, 2] = new ComplexFloat(6.6f, -6.6f); a[2, 0] = new ComplexFloat(7.7f, 7.7f); a[2, 1] = new ComplexFloat(8.8f, -8.8f); a[2, 2] = new ComplexFloat(9.9f, 9.9f); ComplexFloatQRDecomp qrd = new ComplexFloatQRDecomp(a); ComplexFloatMatrix qq = qrd.Q.GetConjugateTranspose() * qrd.Q; ComplexFloatMatrix qr = qrd.Q * qrd.R; ComplexFloatMatrix I = ComplexFloatMatrix.CreateIdentity(3); // determine the maximum relative error double MaxError = 0.0; for (int i = 0; i < 3; i++) { for (int j = 0; i < 3; i++) { double E = ComplexMath.Absolute((qq[i, j] - I[i, j])); if (E > MaxError) { MaxError = E; } } } Assert.IsTrue(MaxError < 1.0E-6); MaxError = 0.0; for (int i = 0; i < 3; i++) { for (int j = 0; i < 3; i++) { double E = ComplexMath.Absolute((qr[i, j] - a[i, j]) / a[i, j]); if (E > MaxError) { MaxError = E; } } } Assert.IsTrue(MaxError < 2.4E-6); }
public void NullTest() { ComplexFloatQRDecomp test = new ComplexFloatQRDecomp(null); }
public void SolveMatrix() { ComplexFloatMatrix a = new ComplexFloatMatrix(3); a[0, 0] = new ComplexFloat(1.1f, 1.1f); a[0, 1] = new ComplexFloat(2.2f, -2.2f); a[0, 2] = new ComplexFloat(3.3f, 3.3f); a[1, 0] = new ComplexFloat(4.4f, -4.4f); a[1, 1] = new ComplexFloat(5.5f, 5.5f); a[1, 2] = new ComplexFloat(6.6f, -6.6f); a[2, 0] = new ComplexFloat(7.7f, 7.7f); a[2, 1] = new ComplexFloat(8.8f, -8.8f); a[2, 2] = new ComplexFloat(9.9f, 9.9f); ComplexFloatQRDecomp qr = new ComplexFloatQRDecomp(a); ComplexFloatMatrix b = new ComplexFloatMatrix(3); b[0, 0] = new ComplexFloat(2.3f, -3.2f); b[0, 1] = new ComplexFloat(2.3f, -3.2f); b[0, 2] = new ComplexFloat(2.3f, -3.2f); b[1, 0] = new ComplexFloat(6.7f, 7.8f); b[1, 1] = new ComplexFloat(6.7f, 7.8f); b[1, 2] = new ComplexFloat(6.7f, 7.8f); b[2, 0] = new ComplexFloat(1.3f, -9.7f); b[2, 1] = new ComplexFloat(1.3f, -9.7f); b[2, 2] = new ComplexFloat(1.3f, -9.7f); ComplexFloatMatrix X = qr.Solve(b); Assert.IsTrue(Comparer.AreEqual(X[0, 0], new ComplexFloat(-0.57f, 1.14f), .01)); Assert.IsTrue(Comparer.AreEqual(X[0, 1], new ComplexFloat(-0.57f, 1.14f), .01)); Assert.IsTrue(Comparer.AreEqual(X[0, 2], new ComplexFloat(-0.57f, 1.14f), .01)); Assert.IsTrue(Comparer.AreEqual(X[1, 0], new ComplexFloat(1.03f, -0.16f), .01)); Assert.IsTrue(Comparer.AreEqual(X[1, 1], new ComplexFloat(1.03f, -0.16f), .01)); Assert.IsTrue(Comparer.AreEqual(X[1, 2], new ComplexFloat(1.03f, -0.16f), .01)); Assert.IsTrue(Comparer.AreEqual(X[2, 0], new ComplexFloat(0.16f, -0.52f), .01)); Assert.IsTrue(Comparer.AreEqual(X[2, 1], new ComplexFloat(0.16f, -0.52f), .01)); Assert.IsTrue(Comparer.AreEqual(X[2, 2], new ComplexFloat(0.16f, -0.52f), .01)); a = new ComplexFloatMatrix(3, 2); a[0, 0] = new ComplexFloat(1.1f, 1.1f); a[0, 1] = new ComplexFloat(2.2f, -2.2f); a[1, 0] = new ComplexFloat(4.4f, -4.4f); a[1, 1] = new ComplexFloat(5.5f, 5.5f); a[2, 0] = new ComplexFloat(7.7f, 7.7f); a[2, 1] = new ComplexFloat(8.8f, -8.8f); qr = new ComplexFloatQRDecomp(a); b = new ComplexFloatMatrix(3); b[0, 0] = new ComplexFloat(2.3f, -3.2f); b[0, 1] = new ComplexFloat(2.3f, -3.2f); b[0, 2] = new ComplexFloat(2.3f, -3.2f); b[1, 0] = new ComplexFloat(6.7f, 7.8f); b[1, 1] = new ComplexFloat(6.7f, 7.8f); b[1, 2] = new ComplexFloat(6.7f, 7.8f); b[2, 0] = new ComplexFloat(1.3f, -9.7f); b[2, 1] = new ComplexFloat(1.3f, -9.7f); b[2, 2] = new ComplexFloat(1.3f, -9.7f); X = qr.Solve(b); Assert.IsTrue(Comparer.AreEqual(X[0, 0], new ComplexFloat(-0.344f, 0.410f), .01)); Assert.IsTrue(Comparer.AreEqual(X[0, 1], new ComplexFloat(-0.344f, 0.410f), .01)); Assert.IsTrue(Comparer.AreEqual(X[0, 2], new ComplexFloat(-0.344f, 0.410f), .01)); Assert.IsTrue(Comparer.AreEqual(X[1, 0], new ComplexFloat(1.01f, -0.170f), .01)); Assert.IsTrue(Comparer.AreEqual(X[1, 1], new ComplexFloat(1.01f, -0.170f), .01)); Assert.IsTrue(Comparer.AreEqual(X[1, 2], new ComplexFloat(1.01f, -0.170f), .01)); }