m3
This commit is contained in:
114
tests/JordanPowerTest.cs
Normal file
114
tests/JordanPowerTest.cs
Normal file
@@ -0,0 +1,114 @@
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Skeleton.Samples;
|
||||
using Skeleton.Utils.Helpers;
|
||||
|
||||
namespace SkeletonTest.tests;
|
||||
|
||||
public static class JordanPowerTest
|
||||
{
|
||||
private static readonly Complex ii = new Complex(0, 1);
|
||||
[DatapointSource]
|
||||
public static readonly Complex[] Basic0TestData = 10.ScaleSamples(-1, 1).UCSamples().ToArray();
|
||||
[Theory]
|
||||
public static void J22TestBasic0(Complex eigenValue)
|
||||
{
|
||||
C22 block = new(
|
||||
eigenValue, 1,
|
||||
0, eigenValue
|
||||
);
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock2Power(eigenValue, 0).IsEqualApprox(C22.One));
|
||||
Assert.IsTrue(
|
||||
(
|
||||
AlgebraHelper.JordanBlock2Power(eigenValue, 3.4d) *
|
||||
AlgebraHelper.JordanBlock2Power(eigenValue, -3.4d)
|
||||
).IsEqualApprox(C22.One)
|
||||
);
|
||||
Assert.IsTrue(
|
||||
(
|
||||
AlgebraHelper.JordanBlock2Power(eigenValue, -2 - ii) *
|
||||
AlgebraHelper.JordanBlock2Power(eigenValue, 2 + ii)
|
||||
).IsEqualApprox(C22.One)
|
||||
);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public static void J22TestBasic1()
|
||||
{
|
||||
C22 u2 = new(
|
||||
1 + 2 * ii, 1,
|
||||
0, 1 + 2 * ii
|
||||
);
|
||||
Complex eigenValue = 1 + 2 * ii;
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock2Power(eigenValue, 3 - ii).IsEqualApprox(new C22(
|
||||
(-11 - 2 * ii) * Complex.Pow(1 + 2 * ii, -ii), (-5 + 15 * ii) * Complex.Pow(1 + 2 * ii, -ii),
|
||||
0, (-11 - 2 * ii) * Complex.Pow(1 + 2 * ii, -ii)
|
||||
)));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock2Power(eigenValue, 2).IsEqualApprox(u2*u2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public static void J22TestBasic2()
|
||||
{
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock2Power(0, 2).IsEqualApprox(C22.Zero));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock2Power(0, 0).IsEqualApprox(C22.One));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
public static void J33TestBasic0(Complex eigenValue)
|
||||
{
|
||||
C33 uw = new(
|
||||
eigenValue, 1, 0,
|
||||
0, eigenValue, 1,
|
||||
0, 0, eigenValue
|
||||
);
|
||||
Assert.IsTrue(
|
||||
(
|
||||
AlgebraHelper.JordanBlock3Power(eigenValue, 4.2) * AlgebraHelper.JordanBlock3Power(eigenValue, -4.2)
|
||||
).IsEqualApprox(C33.One)
|
||||
);
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock3Power(eigenValue, 2).IsEqualApprox(uw * uw));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public static void J33TestBasic1()
|
||||
{
|
||||
C33 ux = new(
|
||||
0, 1, 0,
|
||||
0, 0, 1,
|
||||
0, 0, 0
|
||||
);
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock3Power(0, 0).IsEqualApprox(C33.One));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock3Power(0, 1).IsEqualApprox(ux));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock3Power(0, 2).IsEqualApprox(new C33(
|
||||
0, 0, 1,
|
||||
0, 0, 0,
|
||||
0, 0, 0
|
||||
)));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock3Power(0, 3).IsEqualApprox(C33.Zero));
|
||||
}
|
||||
[Theory]
|
||||
public static void J44Test(Complex eigenValue)
|
||||
{
|
||||
C44 uf = new(
|
||||
eigenValue, 1, 0, 0,
|
||||
0, eigenValue, 1, 0,
|
||||
0, 0, eigenValue, 1,
|
||||
0, 0, 0, eigenValue
|
||||
);
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock4Power(eigenValue, 0).IsEqualApprox(C44.One));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock4Power(eigenValue, 1).IsEqualApprox(uf));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock4Power(eigenValue, 2).IsEqualApprox(uf * uf));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock4Power(eigenValue, 3).IsEqualApprox(uf * uf * uf));
|
||||
Assert.IsTrue(AlgebraHelper.JordanBlock4Power(eigenValue, 4).IsEqualApprox(uf * uf * uf * uf));
|
||||
Assert.IsTrue(
|
||||
(
|
||||
uf * AlgebraHelper.JordanBlock4Power(eigenValue, 1.4)
|
||||
).IsEqualApprox(
|
||||
AlgebraHelper.JordanBlock4Power(eigenValue, 2.4)
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user