Skip to content

AdamWhiteHat/CSharp11Preview.GenericMath.Polynomial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GenericPolynomial

A univariate, sparse, generic polynomial arithmetic library. That is, a polynomial in only one indeterminate, X, that only tracks terms with non-zero coefficients.

C# 11/.NET 7 - This version of my polynomial library is implemented using the new C# 11/.NET 7 feature(s): Generic Math and static virtual members in interfaces. Read more about this here, under the C# 11/.NET 7 heading.

All arithmetic is done symbolically. That means the result of an arithmetic operation on two polynomials is another polynomial, not the arithmetic operation of the evaluated results of those two polynomials for some value of X.

  • Supports the following arithmetic operations:
    • Addition
    • Subtraction
    • Multiplication
    • Division
    • Modulus
    • Exponentiation
    • GCD of polynomials
    • Derivative
    • Integral
    • Reciprocal
    • Irreducibility checking
    • Polynomial evaluation by assigning to the invariant (X in this case) a value.

C# 11/.NET 7

This version of my polynomial library is implemented using the new C# 11/.NET 7 feature(s): Generic Math and static virtual members in interfaces.

Prerequisites

In particular, this means you'll need to be able to run and build .NET 7 framework assemblies, which supports C# 11. The C# 11 compiler is available starting with Visual Studio 2022, version 17.3 or the .NET 7 SDK.

You'll need to tell visual studio to use the C# 11 preview features by manually editing your .csproj file to set the C# language version to "preview", inside a element:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

Other polynomial projects & numeric types

I've written a number of other polynomial implementations and numeric types catering to various specific scenarios. Depending on what you're trying to do, another implementation of this same library might be more appropriate. All of my polynomial projects should have feature parity, where appropriate1.

  • Polynomial. The original. A univariate polynomial that uses System.Numerics.BigInteger as the indeterminate type.
  • GenericPolynomial allows the indeterminate to be of an arbitrary type, as long as said type implements operator overloading. This is implemented by dynamically, at run time, calling the operator overload methods using Linq.Expressions and reflection.
  • CSharp11Preview.GenericMath.Polynomial allows the indeterminate to be of an arbitrary type, but this version is implemented using C# 11's new Generic Math via static virtual members in interfaces.
  • MultivariatePolynomial. A multivariate polynomial (meaning more than one indeterminate, e.g. 2XY^2) which uses BigInteger as the type for the indeterminates.
  • GenericMultivariatePolynomial. As above, but allows the indeterminates to be of [the same] arbitrary type. GenericMultivariatePolynomial is to MultivariatePolynomial what GenericPolynomial is to Polynomial, and indeed is implemented using the same strategy as GenericPolynomial (i.e. dynamic calling of the operator overload methods at runtime using Linq.Expressions and reflection).
  • ComplexPolynomial. Same idea as Polynomial, but using the System.Numerics.Complex class instead of System.Numerics.BigInteger.
  • ComplexMultivariatePolynomial. Same idea as MultivariatePolynomial, but using the System.Numerics.Complex class instead of System.Numerics.BigInteger.
  • BigDecimal - An arbitrary precision, base-10 floating point number class.
  • BigRational encodes a numeric value as an Integer + Fraction
  • BigComplex - Essentially the same thing as System.Numerics.Complex but uses a System.Numerics.BigInteger type for the real and imaginary parts instead of a double.
  • IntervalArithmetic. Instead of representing a value as a single number, interval arithmetic represents each value as a mathematical interval, or range of possibilities, [a,b], and allows the standard arithmetic operations to be performed upon them too, adjusting or scaling the underlying interval range as appropriate. See Wikipedia's article on Interval Arithmetic for further information.
  • GNFS - A C# reference implementation of the General Number Field Sieve algorithm for the purpose of better understanding the General Number Field Sieve algorithm.

Footnotes

  1. For example, the ComplexPolynomial implementation may be missing certain operations (namely: Irreducibility), because such a notion does not make sense or is ill defined in the context of complex numbers).

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published