refactor: remove unnecessary class static access
This commit is contained in:
@@ -489,7 +489,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public virtual TScalar Trace()
|
public virtual TScalar Trace()
|
||||||
{
|
{
|
||||||
TScalar res = StaticAccess<TScalar>.AdditionUnit;
|
TScalar res = Structure.AdditionUnit;
|
||||||
for (int i = 1; i <= Dim; i++)
|
for (int i = 1; i <= Dim; i++)
|
||||||
res = Structure.Addition(res, this[i, i]);
|
res = Structure.Addition(res, this[i, i]);
|
||||||
return res;
|
return res;
|
||||||
@@ -932,9 +932,10 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
for (int r = 1; r <= Dim; r++)
|
for (int r = 1; r <= Dim; r++)
|
||||||
{
|
{
|
||||||
int p = 1;
|
int p = 1;
|
||||||
while (p < Dim && Structure.IsEqualApprox(res[r, p], StaticAccess<TScalar>.AdditionUnit))
|
|
||||||
|
while (p < Dim && Structure.IsEqualApprox(res[r, p], Structure.AdditionUnit))
|
||||||
p += 1;
|
p += 1;
|
||||||
if (!Structure.IsEqualApprox(res[r, p], StaticAccess<TScalar>.AdditionUnit))
|
if (!Structure.IsEqualApprox(res[r, p], Structure.AdditionUnit))
|
||||||
{
|
{
|
||||||
pivotCol.Add(p);
|
pivotCol.Add(p);
|
||||||
conj[r] = conj[r] / res[r, p];
|
conj[r] = conj[r] / res[r, p];
|
||||||
@@ -1090,7 +1091,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
void ScaleToUnit(int i, int j)
|
void ScaleToUnit(int i, int j)
|
||||||
{
|
{
|
||||||
TScalar scale = u[i, j];
|
TScalar scale = u[i, j];
|
||||||
if (Structure.IsEqualApprox(scale, StaticAccess<TScalar>.AdditionUnit))
|
if (Structure.IsEqualApprox(scale, Structure.AdditionUnit))
|
||||||
return;
|
return;
|
||||||
u[i] /= scale;
|
u[i] /= scale;
|
||||||
l[i, false] *= scale;
|
l[i, false] *= scale;
|
||||||
@@ -1101,7 +1102,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
{
|
{
|
||||||
bool pivotNotFound = Structure.IsEqualApprox(
|
bool pivotNotFound = Structure.IsEqualApprox(
|
||||||
u[i, i],
|
u[i, i],
|
||||||
StaticAccess<TScalar>.AdditionUnit
|
Structure.AdditionUnit
|
||||||
);
|
);
|
||||||
for (int j = i; j <= Dim; j++)
|
for (int j = i; j <= Dim; j++)
|
||||||
{
|
{
|
||||||
@@ -1110,7 +1111,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
pivotNotFound &&
|
pivotNotFound &&
|
||||||
!Structure.IsEqualApprox(
|
!Structure.IsEqualApprox(
|
||||||
u[j, i],
|
u[j, i],
|
||||||
StaticAccess<TScalar>.AdditionUnit
|
Structure.AdditionUnit
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -1120,10 +1121,10 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pivotNotFound)
|
if (pivotNotFound)
|
||||||
det = StaticAccess<TScalar>.AdditionUnit;
|
det = Structure.AdditionUnit;
|
||||||
for (int j = i + 1; j <= Dim; j++)
|
for (int j = i + 1; j <= Dim; j++)
|
||||||
{
|
{
|
||||||
if (Structure.IsEqualApprox(u[j, i], StaticAccess<TScalar>.AdditionUnit))
|
if (Structure.IsEqualApprox(u[j, i], Structure.AdditionUnit))
|
||||||
continue;
|
continue;
|
||||||
u[j] -= u[i];
|
u[j] -= u[i];
|
||||||
l[i, false] += l[j, false];
|
l[i, false] += l[j, false];
|
||||||
@@ -1149,7 +1150,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
TVector ei = id[i];
|
TVector ei = id[i];
|
||||||
TVector x = qia[i, false].UpTruncateBy(i - 1);
|
TVector x = qia[i, false].UpTruncateBy(i - 1);
|
||||||
TScalar alpha =
|
TScalar alpha =
|
||||||
Structure.IsEqualApprox(Structure.Abs(x[i]), StaticAccess<TScalar>.AdditionUnit)
|
Structure.IsEqualApprox(Structure.Abs(x[i]), Structure.AdditionUnit)
|
||||||
? Structure.MultiplicationUnit
|
? Structure.MultiplicationUnit
|
||||||
: Structure.Division(x[i], Structure.Abs(x[i]));
|
: Structure.Division(x[i], Structure.Abs(x[i]));
|
||||||
alpha = Structure.RealMul(alpha, x.Magnitude);
|
alpha = Structure.RealMul(alpha, x.Magnitude);
|
||||||
@@ -1157,7 +1158,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
TVector vi = ui.Normalize;
|
TVector vi = ui.Normalize;
|
||||||
TScalar dm = vi.Conj() * x;
|
TScalar dm = vi.Conj() * x;
|
||||||
TScalar omg = Structure.Division(x.Conj() * vi, dm);
|
TScalar omg = Structure.Division(x.Conj() * vi, dm);
|
||||||
if (Structure.IsEqualApprox(dm, StaticAccess<TScalar>.AdditionUnit))
|
if (Structure.IsEqualApprox(dm, Structure.AdditionUnit))
|
||||||
omg = Structure.MultiplicationUnit;
|
omg = Structure.MultiplicationUnit;
|
||||||
TMatrix qi =
|
TMatrix qi =
|
||||||
id - Structure.Addition(
|
id - Structure.Addition(
|
||||||
@@ -1207,7 +1208,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
TMatrix res = Copy();
|
TMatrix res = Copy();
|
||||||
for (int i = 1; i <= d; i++)
|
for (int i = 1; i <= d; i++)
|
||||||
for (int j = 1; j <= d; j++)
|
for (int j = 1; j <= d; j++)
|
||||||
res[i, j] = StaticAccess<TScalar>.AdditionUnit;
|
res[i, j] = Structure.AdditionUnit;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1223,7 +1224,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
int dim = Dim;
|
int dim = Dim;
|
||||||
for (int i = d; i <= dim; i++)
|
for (int i = d; i <= dim; i++)
|
||||||
for (int j = d; j <= dim; j++)
|
for (int j = d; j <= dim; j++)
|
||||||
res[i, j] = StaticAccess<TScalar>.AdditionUnit;
|
res[i, j] = Structure.AdditionUnit;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1238,7 +1239,7 @@ public abstract class Matrix<TScalar, TVector, TMatrix> : Matrix<TVector, TMatri
|
|||||||
for (int r = i; r >= 1; r--)
|
for (int r = i; r >= 1; r--)
|
||||||
{
|
{
|
||||||
if (Structure.IsEqualApprox(this[i, i], this[r, r]))
|
if (Structure.IsEqualApprox(this[i, i], this[r, r]))
|
||||||
col[r] = StaticAccess<TScalar>.MultiplicationUnit;
|
col[r] = Structure.MultiplicationUnit;
|
||||||
else
|
else
|
||||||
col[r] = Structure.Division(
|
col[r] = Structure.Division(
|
||||||
Structure.AdditionInverse(col * this[r]),
|
Structure.AdditionInverse(col * this[r]),
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ public class MatrixProperty<TScalar, TVector, TMatrix>
|
|||||||
/// M[i, j] = 0 if i!= j
|
/// M[i, j] = 0 if i!= j
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsDiagonal => Mat.OffDiagonals
|
public bool IsDiagonal => Mat.OffDiagonals
|
||||||
.All(x => Structure.IsEqualApprox(x, StaticAccess<TScalar>.AdditionUnit));
|
.All(x => Structure.IsEqualApprox(x, Structure.AdditionUnit));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// exist of inv(M)
|
/// exist of inv(M)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool IsInvertible => !Structure.IsEqualApprox(Mat.Det(), StaticAccess<TScalar>.AdditionUnit);
|
public bool IsInvertible => !Structure.IsEqualApprox(Mat.Det(), Structure.AdditionUnit);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// M M* = M* M
|
/// M M* = M* M
|
||||||
@@ -49,7 +49,7 @@ public class MatrixProperty<TScalar, TVector, TMatrix>
|
|||||||
{
|
{
|
||||||
for (int i = 2; i <= Mat.Dim; i++)
|
for (int i = 2; i <= Mat.Dim; i++)
|
||||||
for (int j = 1; j < i; j++)
|
for (int j = 1; j < i; j++)
|
||||||
if (!Structure.IsEqualApprox(Mat[i, j], StaticAccess<TScalar>.AdditionUnit))
|
if (!Structure.IsEqualApprox(Mat[i, j], Structure.AdditionUnit))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ public class MatrixProperty<TScalar, TVector, TMatrix>
|
|||||||
{
|
{
|
||||||
for (int i = 1; i <= Mat.Dim; i++)
|
for (int i = 1; i <= Mat.Dim; i++)
|
||||||
for (int j = i + 1; j <= Mat.Dim; j++)
|
for (int j = i + 1; j <= Mat.Dim; j++)
|
||||||
if (!Structure.IsEqualApprox(Mat[i, j], StaticAccess<TScalar>.AdditionUnit))
|
if (!Structure.IsEqualApprox(Mat[i, j], Structure.AdditionUnit))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ public class MatrixProperty<TScalar, TVector, TMatrix>
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// tr(M) = 0
|
/// tr(M) = 0
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsTraceless => Structure.IsEqualApprox(Mat.Trace(), StaticAccess<TScalar>.AdditionUnit);
|
public bool IsTraceless => Structure.IsEqualApprox(Mat.Trace(), Structure.AdditionUnit);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// M M^T = I
|
/// M M^T = I
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ public partial class CategoryOf<TDimension>
|
|||||||
{
|
{
|
||||||
for (int j = i + 1; j <= Dim; j++)
|
for (int j = i + 1; j <= Dim; j++)
|
||||||
{
|
{
|
||||||
this[i, j] = StaticAccess<TScalar>.AdditionUnit;
|
this[i, j] = Structure.AdditionUnit;
|
||||||
this[j, i] = StaticAccess<TScalar>.AdditionUnit;
|
this[j, i] = Structure.AdditionUnit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
base.Fix();
|
base.Fix();
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ public partial class CategoryOf<TDimension>
|
|||||||
{
|
{
|
||||||
for (int j = 1 + 1; j <= FDim; j++)
|
for (int j = 1 + 1; j <= FDim; j++)
|
||||||
{
|
{
|
||||||
this[i, j] = StaticAccess<TScalar>.AdditionUnit;
|
this[i, j] = Structure.AdditionUnit;
|
||||||
this[j, i] = StaticAccess<TScalar>.AdditionUnit;
|
this[j, i] = Structure.AdditionUnit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
InternalFix();
|
InternalFix();
|
||||||
|
|||||||
@@ -26,16 +26,9 @@ public abstract class FieldStructure<TScalar> : FieldStructure
|
|||||||
return (RealFieldStructure.Structure as FieldStructure<TScalar>)!;
|
return (RealFieldStructure.Structure as FieldStructure<TScalar>)!;
|
||||||
if (typeof(TScalar) == typeof(Complex))
|
if (typeof(TScalar) == typeof(Complex))
|
||||||
return (ComplexFieldStructure.Structure as FieldStructure<TScalar>)!;
|
return (ComplexFieldStructure.Structure as FieldStructure<TScalar>)!;
|
||||||
return ScalarFieldStructureProvider.GetOperation<TScalar>();
|
return FieldStructureRegistry.GetOperation<TScalar>();
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public FieldStructure()
|
|
||||||
{
|
|
||||||
StaticAccess<TScalar>.AdditionUnit = AdditionUnit;
|
|
||||||
StaticAccess<TScalar>.MultiplicationUnit = MultiplicationUnit;
|
|
||||||
StaticAccess<TScalar>.Structure = this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// addition in field
|
/// addition in field
|
||||||
|
|||||||
@@ -3,17 +3,24 @@ namespace Skeleton.Algebra.ScalarFieldStructure;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class ScalarFieldStructureProvider
|
public static class FieldStructureRegistry
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Register customer field structure
|
/// Register customer field structure
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="structure"></param>
|
/// <param name="structure"></param>
|
||||||
/// <typeparam name="TScalar"></typeparam>
|
/// <typeparam name="TScalar"></typeparam>
|
||||||
public static void Register<TScalar>(FieldStructure<TScalar> structure)
|
public static void Register<TScalar>(FieldStructure<TScalar> structure)
|
||||||
=> Cache[typeof(TScalar)] = structure;
|
=> FieldStructureRegistry<TScalar>.Structure = structure;
|
||||||
|
|
||||||
|
internal static FieldStructure<TScalar> GetOperation<TScalar>()
|
||||||
|
=> FieldStructureRegistry<TScalar>.Structure;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static class FieldStructureRegistry<TScalar>
|
||||||
|
{
|
||||||
|
internal static FieldStructure<TScalar> Structure { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
internal static FieldStructure<TScalar> GetOperation<TScalar>()
|
|
||||||
=> (Cache[typeof(TScalar)] as FieldStructure<TScalar>)!;
|
|
||||||
private static readonly Dictionary<Type, FieldStructure> Cache = new ();
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
namespace Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="T"></typeparam>
|
|
||||||
public static class StaticAccess<T>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public static T AdditionUnit { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public static T MultiplicationUnit { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public static FieldStructure<T> Structure { get; set; }
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -115,7 +115,7 @@ public static partial class CategoryOf<TDimension>
|
|||||||
|
|
||||||
protected override TScalar Dot(FVector other)
|
protected override TScalar Dot(FVector other)
|
||||||
{
|
{
|
||||||
TScalar res = StaticAccess<TScalar>.AdditionUnit;
|
TScalar res = Structure.AdditionUnit;
|
||||||
for (int i = 1; i <= FDim; i++)
|
for (int i = 1; i <= FDim; i++)
|
||||||
res = FieldStructure.Addition(res, FieldStructure.Multiplication(this[i], other[i]));
|
res = FieldStructure.Addition(res, FieldStructure.Multiplication(this[i], other[i]));
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
{
|
{
|
||||||
Elements = new TScalar[Dim];
|
Elements = new TScalar[Dim];
|
||||||
for (int i = 1; i <= Dim; i++)
|
for (int i = 1; i <= Dim; i++)
|
||||||
Elements[i] = StaticAccess<TScalar>.AdditionUnit;
|
Elements[i] = Structure.AdditionUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -272,15 +272,15 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
public bool IsLinearDependantWith(TVector v)
|
public bool IsLinearDependantWith(TVector v)
|
||||||
{
|
{
|
||||||
bool started = false;
|
bool started = false;
|
||||||
TScalar comDiv = StaticAccess<TScalar>.AdditionUnit;
|
TScalar comDiv = Structure.AdditionUnit;
|
||||||
for (int i = 1; i <= v.Dim; i++)
|
for (int i = 1; i <= v.Dim; i++)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
Structure.IsEqualApprox(v[i], StaticAccess<TScalar>.AdditionUnit) &&
|
Structure.IsEqualApprox(v[i], Structure.AdditionUnit) &&
|
||||||
Structure.IsEqualApprox(this[i], StaticAccess<TScalar>.AdditionUnit)
|
Structure.IsEqualApprox(this[i], Structure.AdditionUnit)
|
||||||
)
|
)
|
||||||
continue;
|
continue;
|
||||||
if (Structure.IsEqualApprox(v[i], StaticAccess<TScalar>.AdditionUnit))
|
if (Structure.IsEqualApprox(v[i], Structure.AdditionUnit))
|
||||||
return false;
|
return false;
|
||||||
TScalar ratio = Structure.Division(this[i], v[i]);
|
TScalar ratio = Structure.Division(this[i], v[i]);
|
||||||
if (!started)
|
if (!started)
|
||||||
@@ -345,7 +345,7 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
for (int i = 0; i <= Dim; i++)
|
for (int i = 0; i <= Dim; i++)
|
||||||
if (!Structure.IsEqualApprox(Elements[^(i + 1)], StaticAccess<TScalar>.AdditionUnit))
|
if (!Structure.IsEqualApprox(Elements[^(i + 1)], Structure.AdditionUnit))
|
||||||
return i;
|
return i;
|
||||||
return Dim;
|
return Dim;
|
||||||
}
|
}
|
||||||
@@ -356,7 +356,7 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
for(int i = 0;i<Dim; i++)
|
for(int i = 0;i<Dim; i++)
|
||||||
if (!Structure.IsEqualApprox(Elements[i], StaticAccess<TScalar>.AdditionUnit))
|
if (!Structure.IsEqualApprox(Elements[i], Structure.AdditionUnit))
|
||||||
return i;
|
return i;
|
||||||
return Dim;
|
return Dim;
|
||||||
}
|
}
|
||||||
@@ -462,7 +462,7 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
TVector res = new();
|
TVector res = new();
|
||||||
res.Elements = Enumerable.Range(0, Dim).Select(_ => StaticAccess<TScalar>.AdditionUnit).ToArray();
|
res.Elements = Enumerable.Range(0, Dim).Select(_ => Structure.AdditionUnit).ToArray();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -478,7 +478,7 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
{
|
{
|
||||||
TVector res = Copy();
|
TVector res = Copy();
|
||||||
for (int i = 1; i <= d; i++)
|
for (int i = 1; i <= d; i++)
|
||||||
res[i] = StaticAccess<TScalar>.AdditionUnit;
|
res[i] = Structure.AdditionUnit;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,7 +492,7 @@ public abstract class Vector<TScalar, TVector> : Vector<TVector>, IEnumerable<TS
|
|||||||
{
|
{
|
||||||
TVector res = Copy();
|
TVector res = Copy();
|
||||||
for (int i = d; i < Dim; i++)
|
for (int i = d; i < Dim; i++)
|
||||||
res[i] = StaticAccess<TScalar>.AdditionUnit;
|
res[i] = Structure.AdditionUnit;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user