显示格式化的未评估=在ipython笔记本中用sympy评估

时间:2015-04-11 19:04:18

标签: python-3.x ipython-notebook sympy mathjax

我想在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}

但我想在笔记本中看到

enter image description here

如果我在不同的单元格中编写每个部分,但是输出超过几行,它可以正常工作。我在Windows XP上使用Anaconda,所以它只是mathjax进行渲染。

我喜欢这样做的功能,甚至可能添加像Maple这样的eqn编号。

编辑:我刚刚发现了HTML,这种格式在笔记本中非常好。

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

我想我现在需要知道自动编号的最佳方法

2 个答案:

答案 0 :(得分:2)

也许这就是你要找的东西:

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

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

答案 1 :(得分:0)

所以我就像这样开始我的笔记本。

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))

我得到了

enter image description here

不是一个非常优雅的编号方案,但只需执行eqn = 0

就可以轻松重置