97 lines
2.4 KiB
C#
97 lines
2.4 KiB
C#
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));
|
|
}
|
|
} |