Comments (9)
Sweet! You were super fast with this. Thanks a lot!
from groebner.jl.
The method is used for producing a solver for a family of polynomial systems. For every instance of this family, one could in principle produce multiplication matrices and find the roots, but this involves Gröbner basis calculations which are costly. However, by performing some offline calculations first, we can replace the Gröbner basis calculations with a linear system - the so-called elimination template. The resulting solver will just contain a linear system and an eigendecomposition.
If you're curious here is a recent paper, but I'd recommend this one first. More fleshed out reading can be found in this thesis from p. 29.
It's too early for me to share results or indeed promise a package, but I'll let you know if I need help with Groebner.jl. Thanks!
from groebner.jl.
Hi @martinkjlarsson ,
This is perhaps a bit tricky implementation-wise, but should be possible to add. I will look into it.
Two questions for the moment:
- are you interested in a transformation matrix for just
groebner
, or do you also need it forgroebner_learn
/groebner_apply!
? - which polynomials do you use (AbstractAlgebra.jl, DynamicsPolynomials.jl, etc) ?
from groebner.jl.
Hi @sumiya11,
the reason I asked was that I'm currently using Oscar.jl, but it's quite a large package and also doesn't work on Windows (except WSL). Another option for me would be to work directly against Singular.jl.
To answer your questions:
- I'm just interested in
groebner
. - I'm using the polynomials from AbstractAlgebra.jl.
from groebner.jl.
@martinkjlarsson thanks for the clarification.
I have implemented the first version of this. For now, you can do add Groebner#master
in Pkg mode to try it.
An example:
using Groebner, AbstractAlgebra
R, (x, y, z) = polynomial_ring(GF(2^30 + 3), ["x", "y", "z"], internal_ordering=:degrevlex)
f = [x * y * z - 1, x * y + x * z + y * z, x + y + z]
g, m = Groebner.groebner_with_change_matrix(f)
@show m
3×3 Matrix{AbstractAlgebra.Generic.MPoly{AbstractAlgebra.GFElem{Int64}}}:
0 0 1
0 1073741826 y + z
1 1073741826*z z^2
where the following holds:
@assert isgroebner(g)
@assert m * f == g
groebner_with_change_matrix
works over GF and QQ.
At the moment, it supports degree reverse lex. ordering (you can either create polynomial rings with internal_ordering=:degrevlex
as in the example, or use Groebner.groebner_with_change_matrix(f, ordering=DegRevLex())
)
from groebner.jl.
groebner_with_change_matrix
has noticeable performance overhead over groebner
on some examples. I have not compared it against Singular or Macaulay2 yet (perhaps will do..).
If it becomes a bottleneck in your code, please let me know, I think I know how to speed it up
from groebner.jl.
Out of curiosity, do you use these matrices in some application ?
from groebner.jl.
I'm experimenting with developing a Julia package for solving polynomial equation systems. It uses Gröbner basis methods to reduce a system to an eigendecomposition problem. In any case, there is a need to express some polynomials in the original generators rather than the Gröbner basis. The transformation matrix deals with this mapping.
from groebner.jl.
Thank you for the explanation! Do you mean using something akin to the Stickelberger’s theorem ?
I am also interested in solving polynomial systems. If you would need help with Groebner.jl or if you would like to discuss your experiments, feel free to let me know.
BTW, in case it can be useful, there is SemialgebraicSets.jl, which uses multiplication matrices with the Schur decomposition for solving systems.
from groebner.jl.
Related Issues (20)
- Fails to compute correct Gröbner basis on DynamicPolynomials variable with non-standard monomial ordering HOT 7
- Many invalidations
- groebner does not return leading coefficient 1 HOT 6
- Reduce a Polynomial by a Groebner Basis HOT 2
- llvmcall deprecation warnings HOT 1
- Julia 1.6 support HOT 2
- Integer Type Error HOT 1
- Error with `hashnextindex(::UInt32, ::Int64, ::UInt32)` HOT 3
- Compute basis in parallel HOT 19
- Groebner Basis with parameters HOT 2
- Computing bases up to some degree
- Issues with Computing Groebner Basis for High-Order Runge Kutta Systems with 8 Stages and Order 7 HOT 12
- RecoverableException in Groebner\to18i\src\interface.jl:100 HOT 3
- Possible to make Groebner.jl support 32bit Julia? HOT 1
- Bug in `groebner` in Z_2 HOT 1
- Issues with `normalform` HOT 4
- Huge amount of dynamic dispatch HOT 2
- Does Groebner use checked arithmetic, or does it fail silently if a coefficient overflows? HOT 2
- exponent vector overflow, restarting HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from groebner.jl.