42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
using System.Numerics;
|
|
using Skeleton.Algebra.DimensionProviders;
|
|
using Skeleton.Utils.Helpers;
|
|
|
|
namespace Skeleton.Samples;
|
|
using C44 = Algebra.CategoryOf<IDim4>.OnField<Complex>.FMatrix;
|
|
/// <summary>
|
|
/// </summary>
|
|
public static class C44Samples
|
|
{
|
|
/// <summary>
|
|
/// </summary>
|
|
/// <param name="a"></param>
|
|
/// <returns></returns>
|
|
public static IEnumerable<C44> C44AnySamples(this IEnumerable<double> a)
|
|
{
|
|
(Complex, Complex, Complex, Complex)[] w = a
|
|
.RISamples()
|
|
.ShuffleZip3()
|
|
.ToArray();
|
|
foreach (((Complex, Complex, Complex, Complex), (Complex, Complex, Complex, Complex), (Complex, Complex, Complex
|
|
, Complex), (Complex, Complex, Complex, Complex)) info in w.ShuffleZip3())
|
|
yield return new C44(
|
|
info.Item1.Item1, info.Item1.Item2, info.Item1.Item3, info.Item1.Item4,
|
|
info.Item2.Item1, info.Item2.Item2, info.Item2.Item3, info.Item2.Item4,
|
|
info.Item3.Item1, info.Item3.Item2, info.Item3.Item3, info.Item3.Item4,
|
|
info.Item4.Item1, info.Item4.Item2, info.Item4.Item3, info.Item4.Item4
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
/// <param name="a"></param>
|
|
/// <returns></returns>
|
|
public static IEnumerable<C44> C44InvertibleSamples(this IEnumerable<double> a)
|
|
{
|
|
foreach (C44 m in a.C44AnySamples())
|
|
if (m.Det().Magnitude > 0.2d)
|
|
yield return m;
|
|
}
|
|
|
|
} |