Показать отформатированную неоцененную = оцененную в блокноте ipython с симпати

Я хотел бы делать заметки в блокноте ipython. Есть ли способ заставить его работать, чтобы вы могли писать математику, как если бы это было для учебника?

from sympy import init_session
init_session()

expr = Integral(x,x)
print(latex(expr),'=',latex(expr.doit())) 

Дает за результат

\int x\, dx = \frac{x^{2}}{2}

Но я бы хотел видеть в блокноте

Это работает нормально, если я пишу каждую часть в отдельных ячейках, но вывод занимает несколько строк. Я использую Anaconda в Windows XP, так что это просто mathjax для рендеринга.

Я хотел бы функцию, которая делает это и, возможно, даже добавляет нумерацию eqn, как Maple.

редактировать: я только что обнаружил HTML, этот формат приятно в записной книжке.

from IPython.display import HTML
expr = Integral(x,x)
s = latex(expr) + ' = ' + latex(expr.doit())
HTML('$(1)~~'+ s + '$' + '\n' + '$$(2)~~'+ s + '$$')

Я думаю, теперь мне нужно знать, как сделать автоматическую нумерацию

2 ответа

Решение

Возможно, это то, что вы ищете:

In [15]: expr = Integral(x,x)

In [16]: Eq(expr, expr.doit())
Out[16]: 
          2
⌠        x 
⎮ x dx = ──
⌡        2 

Итак, я запускаю свой блокнот вот так.

from sympy import init_session
init_session()
from IPython.display import HTML
eqn = 0
eqns = [0] * 100 # max num of eqns 
import pandas as pd, numpy as np, matplotlib.pyplot as plt, math
%matplotlib inline

def outs(expr, *args):
    global eqn, eqns
    eqn +=1
    eqns[eqn] = expr
    s = latex(expr)+'='+latex(expr.doit())
    for count, thing in enumerate(args):
        s += '~' + latex(thing)
    display(HTML('$$('+str(eqn)+')~~' + s +'$$'))

Тогда я могу сделать это

eqn = 0
outs(Integral(x,x))
outs(Integral(x**2, x))
outs(eqns[1] + eqns[2], ', @x = 2 \Rightarrow ', (eqns[1]+eqns[2]).doit().subs(x,2))

И я получаю

Не очень элегантная схема нумерации, но ее легко сбросить, просто выполнив eqn = 0

Другие вопросы по тегам