M2
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
using System.Numerics;
|
||||
using Skeleton.Algebra.Extensions;
|
||||
using Skeleton.Analysis.BivariantFunctions.Real.Implements;
|
||||
using Skeleton.Analysis.BivariantFunctions.Real.PolynomialHelpers;
|
||||
using Skeleton.Utils.Helpers;
|
||||
|
||||
namespace Skeleton.Analysis.AnalyticFunctions.Polynomials.Implements;
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
public class C2Polynomial : Polynomial
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public C2Polynomial()
|
||||
{
|
||||
Coefficients = new Complex[3];
|
||||
Fix();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public C2Polynomial(Complex a0, Complex a1, Complex a2)
|
||||
{
|
||||
Coefficients = new[] { a0, a1, a2 };
|
||||
Fix();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
public Complex A0 => Coefficients[0];
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
public Complex A1 => Coefficients[1];
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
public Complex A2 => Coefficients[2];
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Representation =>
|
||||
$"{A0.Real} + {A0.Imaginary}i + ({A1.Real} + {A1.Imaginary}i)x + ({A2.Real} + {A2.Imaginary}i)x2";
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int Dim => 2;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Polynomial Derivative => new C1Polynomial(A1, A2 * 2);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override IEnumerable<Complex> Roots => Decorators.WithTol(1E-20,
|
||||
() =>
|
||||
{
|
||||
if (A2.IsEqualApprox(0))
|
||||
return new C1Polynomial(A0, A1).Roots;
|
||||
if (A0.IsEqualApprox(0))
|
||||
return new C1Polynomial(A1, A2).Roots.Concat(new[] { Complex.Zero });
|
||||
Complex x1 = (-A1 + Complex.Sqrt(A1 * A1 - 4 * A2 * A0)) / (2 * A2);
|
||||
Complex x2 = (-A1 - Complex.Sqrt(A1 * A1 - 4 * A2 * A0)) / (2 * A2);
|
||||
return new[] { x1, x2 };
|
||||
}
|
||||
);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override BivariantContinuous Re => new PolyCHelper.PolyC2Re(A0, A1, A2);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override BivariantContinuous Im => new PolyCHelper.PolyC2Im(A0, A1, A2);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Complex Evaluate(Complex x)
|
||||
{
|
||||
return A0 + x * (A1 + x * A2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user