Documentación |
---|
https://msolve.lip6.fr/
msolve
es una biblioteca C de código abierto que implementa algoritmos de álgebra informática para resolver sistemas polinomiales (con coeficientes racionales o coeficientes en un campo primo).
Actualmente, con msolve
, básicamente puedes resolver sistemas polinomiales multivariados. Esto abarca:
Un tutorial está disponible aquí.
Algunas de las funcionalidades de msolve ya están disponibles en los sistemas de álgebra informática Oscar y SageMath. Consulte a continuación para obtener más información sobre esto.
Vea el archivo de INSTALACIÓN.
Se proporciona más información en el tutorial (ver https://msolve.lip6.fr)
Los archivos de entrada msolve
deben tener el siguiente formato:
Primera línea : variables como lista separada por comas, por ejemplo x1,x2,x3,x4,y1,y2
.
2da línea : característica de campo, por ejemplo 0
.
siguientes líneas : generando polinomios, todos menos el último deben terminar en a ,
por ejemplo
x1,x2,x3,x4,y1,y2
101
x1+x2+x3+x4,
2*y1-145*y2
Los polinomios pueden ser multilínea, por tanto ,
como separador.
Los coeficientes pueden ser racionales, usando /
, por ejemplo -2/3*x2*y1^2+...
.
Algunos comandos básicos son los siguientes:
./msolve -f in.ms -o out.ms
voluntad:
msolve
aislará las soluciones realesmsolve
calculará una parametrización de las soluciones Todos los datos de salida se muestran en el archivo out.ms
El indicador -v
le permite controlar la verbosidad, brindando información sobre lo que está haciendo msolve
. Prueba esto.
./msolve -v 2 -f in.ms -o out.ms
msolve
calcula las bases de Groebner cuando el campo base es el campo de números racionales o un campo primo (la característica debe ser menor que 2^31).
El siguiente comando
./msolve -g 1 -f in.ms -o out.ms
calculará los monomios principales de la base de Groebner reducida del ideal generado por el sistema de entrada en in.ms
para el llamado ordenamiento lexicográfico inverso graduado. Esto le permite deducir la dimensión de la solución establecida para los polinomios de entrada (en un cierre algebraico del campo base), así como el grado del ideal que generan.
Usando el indicador -g 2
de la siguiente manera
./msolve -g 2 -f in.ms -o out.ms
devolverá la base de Groebner reducida para el orden lexicográfico inverso calificado.
msolve
también le permite realizar cálculos de bases de Groebner utilizando el orden monomial de eliminación de un bloque gracias al indicador -e
. El siguiente comando
./msolve -e 1 -g 2 -f in.ms -o out.ms
realizará el cálculo de la base de Groebner eliminando la primera variable. De manera más general, usar -ek
eliminará las primeras k
variables.
Cuando el sistema polinómico de entrada tiene coeficientes racionales y cuando tiene un número finito de soluciones complejas , msolve
, de forma predeterminada, calculará las soluciones reales del sistema de entrada. Estos están codificados con cuadros aislantes para todas las coordenadas de todas las soluciones reales.
Por ejemplo, en el archivo de entrada in.ms
de la siguiente manera
x, y
0
x^2+y^2-4,
x*y-1
la llamada ./msolve -f in.ms -o out.ms
mostrará en el archivo out.ms
el siguiente resultado
[0, [1,
[[[-41011514734338452707966945920 / 2^96, -41011514734338452707966945917 / 2^96], [-153057056683910732545430822374 / 2^96, -153057056683910732545430822373 / 2^96]],
[[-612228226735642930181723289497 / 2^98, -612228226735642930181723289492 / 2^98], [-164046058937353810831867783675 / 2^98, -164046058937353810831867783674 / 2^98]],
[[612228226735642930181723289492 / 2^98, 612228226735642930181723289497 / 2^98], [164046058937353810831867783674 / 2^98, 164046058937353810831867783675 / 2^98]],
[[41011514734338452707966945917 / 2^96, 41011514734338452707966945920 / 2^96], [153057056683910732545430822373 / 2^96, 153057056683910732545430822374 / 2^96]]]
]]:
cuales son las 4 cajas aislantes de las 4 raíces exactas cuyas aproximaciones numéricas son (-0.5176380902, -1.931851653)
, (-1.931851653, -0.5176380902)
, (1.931851653, 0.5176380902)
y (0.5176380902, 1.931851653)
.
Varios componentes de msolve
están paralelizados mediante subprocesos múltiples. Mecanografía
./msolve -t 4 -f in.ms -o out.ms
le dice msolve
que use 4 subprocesos. El subproceso múltiple en msolve
se utiliza en
msolve
en resolución algebraica AlgebraicSolving es un paquete de Julia que incluye msolve
y proporciona más funciones, como calcular soluciones racionales. Consulte aquí para obtener más información y documentación.
msolve
en oscar msolve
se utiliza en Oscar para resolver sistemas polinomiales con coeficientes racionales.
Detectará si el sistema de entrada tiene un número finito de soluciones complejas, en cuyo caso generará una parametrización racional del conjunto de soluciones, así como las soluciones reales del sistema de entrada (consulte el tutorial de msolve
aquí).
Puedes echar un vistazo a esto y a la documentación de Oscar.
Así es como puedes usarlo.
julia> R,(x1,x2,x3) = PolynomialRing(QQ, ["x1","x2","x3"])
(Multivariate Polynomial Ring in x1, x2, x3 over Rational Field, fmpq_mpoly[x1, x2, x3])
julia> I = ideal(R, [x1+2*x2+2*x3-1, x1^2+2*x2^2+2*x3^2-x1, 2*x1*x2+2*x2*x3-x2])
ideal(x1 + 2*x2 + 2*x3 - 1, x1^2 - x1 + 2*x2^2 + 2*x3^2, 2*x1*x2 + 2*x2*x3 - x2)
julia> real_solutions(I)
((84*x^4 - 40*x^3 + x^2 + x, 336*x^3 - 120*x^2 + 2*x + 1, PolyElem[-184*x^3 + 80*x^2 - 4*x - 1, -36*x^3 + 18*x^2 - 2*x], fmpz[-1, -1]), Vector{fmpq}[[744483363399261433351//1180591620717411303424, 372241681699630716673//1180591620717411303424, -154187553040555781639//1180591620717411303424], [1, 0, 0], [71793683196126133110381699745//316912650057057350374175801344, 71793683196126133110381699745//633825300114114700748351602688, 173325283664805084153412401855//633825300114114700748351602688], [196765270119568550571//590295810358705651712, 1//590295810358705651712, 196765270119568550571//590295810358705651712]])
msolve
en SageMath Cuando tiene instalado msolve
, SageMath lo utiliza cuando llama a la función Variety
para resolver sistemas polinomiales con coeficientes reales.
Puedes echar un vistazo aquí y aquí.
Agradecemos a Marc Mezzarobba que inició el uso de msolve
en SageMath y a todo el equipo de desarrollo de SageMath, en particular a los involucrados en este ticket.
msolve
Si ha utilizado msolve
en la preparación de algún artículo, le agradecemos que lo cite de la siguiente manera:
msolve: A Library for Solving Polynomial Systems,
J. Berthomieu, C. Eder, M. Safey El Din, Proceedings of the
46th International Symposium on Symbolic and Algebraic Computation (ISSAC),
pp. 51-58, ACM, 2021.
o, si usa entradas BibTeX:
@inproceedings{msolve,
TITLE = {{msolve: A Library for Solving Polynomial Systems}},
AUTHOR = {Berthomieu, J{'e}r{'e}my and Eder, Christian and {Safey El Din}, Mohab},
BOOKTITLE = {{2021 International Symposium on Symbolic and Algebraic Computation}},
ADDRESS = {Saint Petersburg, Russia},
SERIES = {46th International Symposium on Symbolic and Algebraic Computation},
PAGES = {51--58},
PUBLISHER = {{ACM}},
YEAR = {2021},
MONTH = Jul,
DOI = {10.1145/3452143.3465545},
PDF = {https://hal.sorbonne-universite.fr/hal-03191666v2/file/main.pdf},
HAL_ID = {hal-03191666},
HAL_VERSION = {v2},
}
El documento se puede descargar aquí.
El desarrollo de msolve
cuenta con el apoyo de la iniciativa Forschungsinitiative Rheinland-Pfalz.