Gibt es eine Möglichkeit, ganzzahlige Division in Sympy zu tun?

8

Ich habe einen sehr langen Ausdruck, von dem ich denke, dass er vereinfacht werden kann, und ich dachte, dass sympy der perfekte Weg wäre, dies zu tun. Leider beruht die Formel auf einigen ganzzahligen Teilungen, und ich kann keine Möglichkeit finden, diese in sympy darzustellen.

%Vor%

Offensichtlich nicht was ich will, 1/2 ist keine Ganzzahl.

%Vor%

Offensichtlich behandelt sympy nicht // .

%Vor%

Es scheint, dass Integer nur dazu gedacht ist, mit konstanten Zahlen zu arbeiten, nicht mit Formeln.

Es gibt eine Funktion trunc , aber es scheint nichts zu tun, was ich möchte.

Gibt es eine Möglichkeit, eine ganzzahlige Division in sympy darzustellen?

    
Mark Ransom 05.05.2017, 04:42
quelle

2 Antworten

5

Kriterien

Ich nehme an, dass Sie eine Funktion div wollen, die die folgenden Tests besteht:

%Vor%

Modulo

Sie können eine ganzzahlige Division mit dem Modulo-Operator wie folgt realisieren:

%Vor%

Da SymPy Modulo-Arithmetik unterstützt und es vereinfachen kann, besteht diese Funktion die obigen Tests. Wenn jedoch keine vollständige Vereinfachung möglich ist, werden Sie mit Modulo-Ausdrücken enden, die unerwünscht sein können.

Etage

Wie bereits in den Kommentaren erwähnt, stellt SymPy eine Funktion floor zur Verfügung, mit der eine Ganzzahldivision als erhalten werden kann (was auch der // Operator für Ausdrücke ist):

%Vor%

floor unterstützt jedoch keine Vereinfachungen und schlägt daher den zweiten Test fehl.

    
Wrzlprmft 05.05.2017 08:02
quelle
1

Das Erstellen einer stückweisen Funktion könnte der richtige Weg sein. Es wird auf die Simplifikationsanforderung reagieren und die Varianten der Lösungen abhängig vom Modul des Arguments relativ zu der Ganzzahl halten, mit der Sie teilen. Die Verwendung von piecewise_flatten in einem Ausdruck, in dem es mehrere Ganzzahl-Divisionen gibt, wird wahrscheinlich notwendig sein, um alles zusammenzufallen.

%Vor%

Zum Beispiel

%Vor%     
smichr 13.02.2018 00:52
quelle

Tags und Links