Documentation |
---|
https://msolve.lip6.fr/
msolve
est une bibliothèque C open source implémentant des algorithmes de calcul formel pour résoudre des systèmes polynomiaux (avec des coefficients rationnels ou des coefficients dans un champ premier).
Actuellement, avec msolve
, vous pouvez essentiellement résoudre des systèmes polynomiaux multivariés. Cela englobe :
Un tutoriel est disponible ici
Certaines fonctionnalités de msolve sont déjà disponibles dans les systèmes de calcul formel Oscar et SageMath. Voir ci-dessous pour plus d'informations à ce sujet.
Voir le fichier INSTALL.
Plus d'informations sont données dans le tutoriel (voir https://msolve.lip6.fr)
Les fichiers d'entrée msolve
doivent être au format suivant :
1ère ligne : variables sous forme de liste séparée par des virgules, par exemple x1,x2,x3,x4,y1,y2
.
2ème ligne : caractéristique du champ, par exemple 0
.
lignes suivantes : générer des polynômes, tous sauf le dernier doivent se terminer par un ,
, par exemple
x1,x2,x3,x4,y1,y2
101
x1+x2+x3+x4,
2*y1-145*y2
Les polynômes peuvent être multilignes ,
donc comme séparateur.
Les coefficients peuvent être rationnels, en utilisant /
, par exemple -2/3*x2*y1^2+...
.
Certaines commandes de base sont les suivantes :
./msolve -f in.ms -o out.ms
volonté:
msolve
isolera les solutions réellesmsolve
calculera une paramétrisation des solutions Toutes les données de sortie sont affichées dans le fichier out.ms
L'indicateur -v
vous permet de contrôler la verbosité, donnant un aperçu de ce que fait msolve
. Essayez ceci.
./msolve -v 2 -f in.ms -o out.ms
msolve
calcule les bases de Groebner lorsque le champ de base est soit le champ des nombres rationnels, soit un champ premier (la caractéristique doit être inférieure à 2 ^ 31).
La commande suivante
./msolve -g 1 -f in.ms -o out.ms
calculera les monômes principaux de la base de Groebner réduite de l'idéal généré par le système d'entrée en in.ms
pour ce que l'on appelle l'ordre lexicographique inversé gradué. Cela permet de déduire la dimension de la solution fixée aux polynômes d'entrée (dans une clôture algébrique du corps de base) ainsi que le degré de l'idéal qu'ils génèrent.
Utiliser l'indicateur -g 2
comme suit
./msolve -g 2 -f in.ms -o out.ms
renverra la base Groebner réduite pour l'ordre lexicographique inversé gradué.
msolve
vous permet également d'effectuer des calculs de bases de Groebner en utilisant l'ordre monôme d'élimination en un seul bloc grâce à l'indicateur -e
. La commande suivante
./msolve -e 1 -g 2 -f in.ms -o out.ms
effectuera le calcul de la base de Groebner en éliminant la première variable. Plus généralement, l'utilisation -ek
éliminera les k
premières variables.
Lorsque le système polynomial d'entrée a des coefficients rationnels et lorsqu'il a un nombre fini de solutions complexes , msolve
calculera, par défaut, les solutions réelles du système d'entrée. Ceux-ci sont codés avec des cases isolantes pour toutes les coordonnées de toutes les solutions réelles.
Par exemple, sur le fichier d'entrée in.ms
comme suit
x, y
0
x^2+y^2-4,
x*y-1
l'appel ./msolve -f in.ms -o out.ms
affichera dans le fichier out.ms
la sortie suivante
[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]]]
]]:
qui sont les 4 cases isolantes des 4 racines exactes dont les approximations numériques sont (-0.5176380902, -1.931851653)
, (-1.931851653, -0.5176380902)
, (1.931851653, 0.5176380902)
et (0.5176380902, 1.931851653)
.
Plusieurs composants de msolve
sont parallélisés via multi-thread. Dactylographie
./msolve -t 4 -f in.ms -o out.ms
dit msolve
d'utiliser 4 threads. Le multithreading dans msolve
est utilisé dans
msolve
en résolution algébrique AlgebraicSolving est un package Julia qui englobe msolve
et fournit des fonctionnalités supplémentaires telles que le calcul de solutions rationnelles. Voir ici pour plus d'informations et de documentation.
msolve
dans Oscar msolve
est utilisé dans Oscar pour résoudre des systèmes polynomiaux avec des coefficients rationnels.
Il détectera si le système d'entrée a un nombre fini de solutions complexes, auquel cas il produira une paramétrisation rationnelle de l'ensemble de solutions ainsi que les solutions réelles du système d'entrée (voir le tutoriel de msolve
ici).
Vous pouvez consulter ceci et la documentation d'Oscar.
Voici comment vous pouvez l'utiliser.
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
dans SageMath Lorsque msolve
est installé, il est utilisé par SageMath lorsque vous appelez la fonction Variety
pour résoudre des systèmes polynomiaux avec des coefficients réels.
Vous pouvez jeter un oeil ici et ici
Nous remercions Marc Mezzarobba qui a initié l'utilisation de msolve
dans SageMath et toute l'équipe de développement de SageMath, en particulier celles impliquées dans ce ticket.
msolve
Si vous avez utilisé msolve
dans la préparation d'un article, nous vous remercions de le citer comme suit :
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.
ou, si vous utilisez des entrées 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},
}
Le document peut être téléchargé ici.
Le développement de msolve
est soutenu par la Forschungsinitiative Rheinland-Pfalz.