Files
Skeleton.Test/tests/AlgebraMiscTest.cs
2024-11-30 20:11:27 +00:00

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 Skeleton.Test;
[TestFixture]
public class AlgebraMiscTest : BaseTest
{
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));
}
}