using System; using System.Linq; using System.Numerics; using Skeleton.Algebra.Extensions; using Skeleton.Analysis.AnalyticFunctions.Polynomials.Implements; namespace SkeletonTest.tests; public static class AlgebraMiscTest { private static readonly Complex ii = new Complex(0, 1); [Test] public static void SolverTest() { var fff = new C2Polynomial(ii, ii, 1); var qrs = fff.Roots.ToArray(); Assert.IsTrue(qrs.LSum().IsEqualApprox(-ii)); Assert.IsTrue(qrs.LProd().IsEqualApprox(ii)); GeneralExt.SetTol(1E-7f); qrs = new C3Polynomial(ii, ii, 1, 1).Roots.ToArray(); Assert.IsTrue(qrs.LSum().IsEqualApprox(-1)); Assert.IsTrue(qrs.LProd().IsEqualApprox(-ii)); Assert.IsTrue(qrs.ApproxContains(-1)); Assert.IsTrue(qrs.ApproxContains((1 - ii) / Complex.Sqrt(2))); Assert.IsTrue(qrs.ApproxContains(-(1 - ii) / Complex.Sqrt(2))); qrs = new C4Polynomial(ii, ii, 1, -ii, 1).Roots.ToArray(); Assert.IsTrue(qrs.LSum().IsEqualApprox(ii)); Assert.IsTrue(qrs.LProd().IsEqualApprox(ii)); GeneralExt.ResetTol(); } [Test] public static void KernelTest() { C22 mc22 = new C22( 1 + ii, 2, 0, 0 ); C2Space c2ks = mc22.Ker; Assert.IsTrue(c2ks.Rank == 1); Console.WriteLine((mc22 * c2ks[0]).Representation); Assert.IsTrue((mc22 * c2ks[0]).IsEqualApprox(C2.Zero)); R22 mr22 = new R22( 1, 3, 0, 0 ); R2Space r2ks = mr22.Ker; Assert.IsTrue(r2ks.Rank == 1); Console.WriteLine((mr22 * r2ks[0]).Representation); Assert.IsTrue((mr22 * r2ks[0]).IsEqualApprox(R2.Zero)); C33 mc33 = new C33( 3 + ii, 0, 1 - ii, 0, 0, 0, 0, 0, 0 ); C3Space c3ks = mc33.Ker; Assert.IsTrue(c3ks.Rank == 2); Assert.IsTrue((mc33 * ((3.2 + 1.7 * ii) * c3ks[0] + (1.1 - 0.8 * ii) * c3ks[1])).IsEqualApprox(C3.Zero)); Assert.IsTrue((mc33 * ((1.2 + 3.7 * ii) * c3ks[0] + (3.1 + 1.2 * ii) * c3ks[1])).IsEqualApprox(C3.Zero)); R33 mr33 = new R33( 3, 5, 1, 3, 0, 1, 0, 5, 0 ); R3Space r3ks = mr33.Ker; Assert.IsTrue(r3ks.Rank == 1); Assert.IsTrue((mr33 * r3ks[0]).IsEqualApprox(R3.Zero)); C44 mc44 = new C44( 1 + ii, 2 - ii, 0, 0, 1 + ii, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ); C4Space c4ks = mc44.Ker; Assert.IsTrue(c4ks.Rank == 2); Assert.IsTrue((mc44 * (1.2 * c4ks[0] + 3.1 * c4ks[1])).IsEqualApprox(C4.Zero)); } [Test] public static void TransposeTest() { C22 a = new C22( 1, 2, 3, 4 ); C22 at = new C22( 1, 3, 2, 4 ); Assert.IsTrue(a.Transpose().IsEqualApprox(at)); } }