Ich möchte die Restsequenz von zwei Polynomen wie von GCD verwendet berechnen. Wenn ich den Wikipedia-Artikel über Pseudo-remainder sequence verstanden, eine Möglichkeit, es zu berechnen ist Euklids Algorithmus zu verwenden:Restsequenzen
gcd(a, b) := if b = 0 then a else gcd(b, rem(a, b))
Sinn will ich, dass rem()
Teile sammeln. Wenn jedoch die Koeffizienten ganze Zahlen sind, wachsen die Zwischenfraktionen sehr schnell, und dann gibt es die sogenannten "Pseudorestsequenzen", die versuchen, die Koeffizienten in kleinen ganzen Zahlen zu halten.
Meine Frage ist, wenn ich richtig verstanden habe (habe ich?), Die beiden obigen Sequenzen unterscheiden sich nur durch konstanten Faktor, aber wenn ich versuche, das folgende Beispiel auszuführen, bekomme ich unterschiedliche Ergebnisse, warum? Die erste Restsequenz unterscheidet sich um -2
, ok, aber warum ist die zweite Sequenz so anders? Ich nehme an, subresultants()
funktioniert richtig, aber warum funktioniert das g % (f % g)
nicht?
f = Poly(x**2*y + x**2 - 5*x*y + 2*x + 1, x, y)
g = Poly(2*x**2 - 12*x + 1, x)
print
print subresultants(f, g)[2]
print subresultants(f, g)[3]
print
print f % g
print g % (f % g)
die
Poly(-2*x*y - 16*x + y - 1, x, y, domain='ZZ')
Poly(-9*y**2 - 54*y + 225, x, y, domain='ZZ')
Poly(x*y + 8*x - 1/2*y + 1/2, x, y, domain='QQ')
Poly(2*x**2 - 12*x + 1, x, y, domain='QQ')