2017-04-11 16 views
5

Sympy'de, fonksiyonların türevlerinin lateks() ile çıktısını nasıl değiştirebiliriz? Varsayılan oldukça hantal. Bu: Oldukça ayrıntılı birSympy: Türevlerin çıktısı çıktılarının değiştirilmesi

f = Function("f")(x,t) 
print latex(f.diff(x,x)) 

irade çıkışı

\frac{\partial^{2}}{\partial x^{2}} f{\left (x,t \right)} 

. Bu davranışı zorlamak için

gibi bir yöntemi tercih etmenin bir yolu var mı?

+0

bunun gibi görünebilir, ancak kontrol etmez Burada seçenekler: http://docs.sympy.org/latest/modules/printing.html#sympy.printing.latex.latex – csl

cevap

3

LatexPrinter'u alt sınıflara ayırabilir ve kendi _print_Derivative'nuzu tanımlayabilirsiniz. Mevcut uygulama Here.

Belki

>>> MyLatexPrinter().doprint(f(x, y).diff(x, y)) 
'f_{x y}' 
>>> MyLatexPrinter().doprint(Derivative(x, x)) 
'\\frac{d}{d x} x' 

gibi çalışır

from sympy import Symbol 
from sympy.printing.latex import LatexPrinter 
from sympy.core.function import UndefinedFunction 

class MyLatexPrinter(LatexPrinter): 
    def _print_Derivative(self, expr): 
     # Only print the shortened way for functions of symbols 
     function, *vars = expr.args 
     if not isinstance(type(function), UndefinedFunction) or not all(isinstance(i, Symbol) for i in vars): 
      return super()._print_Derivative(expr) 
     return r'%s_{%s}' % (self._print(Symbol(function.func.__name__)), ' '.join([self._print(i) for i in vars])) 

gibi bir şey Jupyter dizüstü kullanmak için, kullanmak

init_printing(latex_printer=MyLatexPrinter().doprint) 
+0

Bir çekicilik gibi çalıştım! Python2 desteği için "function, * vars = expr.args" değerini "function, vars = expr.args [0], expr.args [1:]" olarak değiştirdim. – Eskil

+0

Ayrıca, süper() 'süper (MyLatexPrinter, self)' olarak da değiştirmeniz gerekir. – asmeurer

+0

Huh, bu son değişiklik olmadan Python2.7'de koştu. – Eskil