JuliaAlgebra / MultivariatePolynomials.jl

Multivariate polynomials interface
https://juliaalgebra.github.io/MultivariatePolynomials.jl/stable/
Other
134 stars 27 forks source link

Compatibility with OffsetMatrix? #293

Open NAThompson opened 3 months ago

NAThompson commented 3 months ago

In Polynomials.jl, we can use an OffsetArray to easily construct Laurent polynomials:

julia> using OffsetArrays
julia> using Polynomials
julia> o = OffsetArrays{Float64}(ones(5), -1:3)
julia> p = LaurentPolynomial(o)
LaurentPolynomial(1.0*x⁻¹ + 1.0 + 1.0*x + 1.0*x² + 1.0*x³)

However, I cannot do the same for an OffsetMatrix with MultivariatePolynomials. Reading through the documentation, it appears the this library is more focuses on very sophisticated manipulations on polynomials that you could type out by hand, rather than large polynomials whose coefficients are stored in a matrix-so hopefully this issue is not too annoying. However, I felt like it might be natural to type something like the following, as well as increase compatibility with the univariate case:

julia> using OffsetArrays
julia> using MultivariatePolynomials
julia> o = OffsetMatrix{Float64}(ones(5), ones(5), -1:1, -1:1)
julia> p = MultivariateLaurentPolynomial(o, x, y)
MultivariateLaurentPolynomial(1.0*x⁻¹ y⁻¹ + 1.0x⁻¹ + 1.0*y⁻¹ + 1.0 + 1.0*x + 1.0*y + 1.0*xy)
blegat commented 3 months ago

Negative exponents is currently not supported in this package, e.g., it will make printing fail but it's probably not too hard to add support for it. Then you could easily do sum(o[i, j] * x[i] * y[j] for i in axes(o, 1), j in axes(o, 2))