Frage

Nehmen wir mit Sympy an, wir haben einen Ausdruck f, der ein Polynom des Symbols "x" (und möglicherweise anderer Symbole) ist.

Ich würde gerne wissen, was passiert, wenn es einen effizienten Weg gibt, alle Terme in f der Ordnung größer als eine ganze Zahl n zu löschen.

Als Sonderfall habe ich eine sehr komplizierte Funktion, aber ich möchte nur Terme bis zur 2. Ordnung in x beibehalten.Was ist der effiziente Weg, dies zu tun?

Der offensichtliche, nicht sehr effiziente Weg, dies zu tun, wäre für jedes m kleiner als n, m Ableitungen zu nehmen und x auf 0 zu setzen, um den Koeffizienten von x ^ m zu erhalten.Wir erhalten jeden Koeffizienten auf diese Weise und rekonstruieren dann das Polynom.Aber Derivate zu nehmen ist nicht die effizienteste Sache.

War es hilfreich?

Lösung

Ein einfacher Weg, dies zu tun, ist das Hinzufügen von O(x**n) zum Ausdruck, wie

In [23]: x + x**2 + x**4 + x**10 + O(x**3)
Out[23]:
     2    ⎛ 3⎞
x + x  + O⎝x ⎠

Wenn Sie es später entfernen möchten, verwenden Sie die removeO Methode

In [24]: (x + x**2 + x**4 + x**10 + O(x**3)).removeO()
Out[24]:
 2
x  + x

Sie können auch verwenden series um die Reihenerweiterung des Ausdrucks zu nehmen.Der Unterschied hier ist das Verhalten, wenn ein nichtpolynomieller Term im Ausdruck endet:

In [25]: x + sin(x) + O(x**3)
Out[25]:
              ⎛ 3⎞
sin(x) + x + O⎝x ⎠

In [26]: (x + sin(x)).series(x, 0, 3)
Out[26]:
       ⎛ 3⎞
2⋅x + O⎝x ⎠

Andere Tipps

Wenn Sie einen Blick auf das Polynomodul-Dokument ansehen:

http://docs.sympy.org/latest/modules/polys/referenz.html

Es gibt viele Möglichkeiten, um darüber zu gehen, abhängig von den Besonderheiten Ihrer Situation.Ein paar verschiedene Arten, die funktionieren würden:

Verwenden von .coeffs():

generasacodicetagpre.

Alternativ können Sie die Elemente in .all_terms() iterieren:

generasacodicetagpre.

Es gibt viele Manipulationsfunktionen im Modul, mit denen Sie mit dem Ausdruck direkt arbeiten können, anstatt Berechnungen / Einnahme derivate / etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top