文件 |
---|
https://msolve.lip6.fr/
msolve
是一個開源 C 函式庫,實作用於求解多項式系統(具有有理係數或素數域中的係數)的電腦代數演算法。
目前,使用msolve
基本上可以求解多元多項式系統。這包括:
此處提供了教程
msolve 的一些功能已經在電腦代數系統 Oscar 和 SageMath 中可用。有關此內容的更多信息,請參閱下文。
請參閱安裝檔。
教程中提供了更多資訊(請參閱 https://msolve.lip6.fr)
msolve
輸入檔需要採用以下格式:
第一行:變數作為逗號分隔列表,例如x1,x2,x3,x4,y1,y2
。
第二行:場特徵,例如0
。
以下幾行:產生多項式,除了最後一個之外的所有多項式都需要以,
終止,例如
x1,x2,x3,x4,y1,y2
101
x1+x2+x3+x4,
2*y1-145*y2
多項式可以是多行的, ,
可以作為分隔符號。
係數可以是有理數,使用/
,例如-2/3*x2*y1^2+...
。
一些基本指令如下:
./msolve -f in.ms -o out.ms
將要:
msolve
將隔離實數解msolve
將計算解的參數化所有輸出資料都顯示在檔案out.ms
中
-v
標誌可讓您控制詳細程度,從而深入了解msolve
正在做什麼。試試這個。
./msolve -v 2 -f in.ms -o out.ms
當基域是有理數域或質數域(特徵應小於 2^31)時, msolve
計算 Groebner 基。
以下命令
./msolve -g 1 -f in.ms -o out.ms
將計算輸入系統產生的理想值的簡化 Groebner 基底的主要單項式(以in.ms
為單位),用於所謂的分級反向字典排序。這允許您推導出輸入多項式(在基域的代數閉包中)的解集的維數以及它們產生的理想的次數。
使用-g 2
標誌如下
./msolve -g 2 -f in.ms -o out.ms
將傳回分級反向字典排序的簡化 Groebner 基礎。
由於-e
標誌, msolve
還允許您使用單塊消除單項式順序執行 Groebner 基底計算。以下命令
./msolve -e 1 -g 2 -f in.ms -o out.ms
將執行 Groebner 基礎計算,消除第一個變數。更一般地,使用-ek
將消除前k
個變數。
當輸入多項式系統具有有理係數並且具有有限多個複數解時,預設情況下, msolve
將計算輸入系統的實數解。這些都是用隔離框編碼的,用於所有實際解決方案的所有座標。
例如,在輸入檔in.ms
上如下
x, y
0
x^2+y^2-4,
x*y-1
呼叫./msolve -f in.ms -o out.ms
將在檔案out.ms
中顯示以下輸出
[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]]]
]]:
這是 4 個精確根的 4 個隔離框,其數值近似值為(-0.5176380902, -1.931851653)
、 (-1.931851653, -0.5176380902)
、 (1.931851653, 0.5176380902)
, (0.5176380902, 1.931851653)
。
msolve
的多個元件透過多執行緒並行化。打字
./msolve -t 4 -f in.ms -o out.ms
告訴msolve
使用 4 個執行緒。 msolve
中的多執行緒用於
msolve
AlgebraicSolving 是一個 Julia 包,它包裝了msolve
並提供了更多功能,例如計算有理解。請參閱此處以了解更多資訊和文件。
msolve
奧斯卡Oscar 中使用msolve
來求解具有有理係數的多項式系統。
它將檢測輸入系統是否具有有限多個複雜解,在這種情況下,它將輸出解集的合理參數化以及輸入系統的真實解(請參閱此處的msolve
教程)。
你可以看看這個和 Oscar 的文檔。
以下是如何使用它。
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
安裝msolve
後,當您呼叫Variety
函數來求解具有實數係數的多項式系統時,SageMath 會使用它。
你可以看看這裡和這裡
我們感謝 Marc Mezzarobba 發起在 SageMath 中使用msolve
以及 SageMath 的整個開發團隊,特別是參與此票證的人員
msolve
如果您在準備某些論文時使用過msolve
,我們非常感謝您按如下方式引用它:
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.
或者,如果您使用 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},
}
該論文可以在這裡下載。
msolve
的發展得到了萊茵蘭-普法爾茨州研究計畫的支持。