【方法与技巧】在jupyternotebook输出latex公式的几种方法
(2020-12-06 11:27:12)分类: 方法与技巧 |
1、方法一:配置并启用mathjax.js
在jupter
notebook环境(adaconda)中配置并启用mathjax.js,将cell的设置称为markdown标记,在标记中输入latex文本,latex形式的输出原理是用mathjax.js解析。示例如下:
\begin{bmatrix}
0 & 0\\
0 & 0\\
0 & 0\\
0 & 1\\
2 & 3\\
4 & 5\\
0 & 0\\
0 & 0\\
0 & 0
\end{bmatrix}
$$
DME = \begin{bmatrix}
0 &0 &0 &0 &2 &3 &0 &1\\
0 &0 &0 &0 &4 &5 &2 &3\\
0 &1 &2 &3 &0 &0 &0 &0\\
2 &3 &4 &5 &0 &0 &0 &0
\end{bmatrix}
$$
运行即得latex的显示公式。
特点:用户输入的是标记,需要输入latex字符串,正确性由用户自己确认,用户需要熟悉latex的语法;或者将如matlab、mathmatics、word等软件产生公式的latex字符串拷贝。
2、方法二:使用sympy模块
将cell设置为代码,引用sympy模块,latex的输出解析方法不明,猜想应该是使用了mathjax.js,但是用户在配置jupter
notebook环境时很可能未配置mathjax.js,也可能是sympy模块安装时同时安装了mathjax.js,如果显示不成功配置即可。
sympy的display函数的原理是将函数的表达式树转换成latex字符串。示例如下:
from sympy import *
init_session()
r, s = symbols("r s")
N = S(1)/4 *Matrix([
[(1 - r)*(1 - s)],
[(1 + r)*(1 - s)],
[(1 + r)*(1 + s)],
[(1 - r)*(1 + s)]])
dHdr = zeros(2, 4)
for cont in range(4):
#显示变量dHdr 的letex公式
display(dHdr)
#显示变量dHdr化简后的letex公式
display( simplify(dHdr))
#显示变量dHdr的latex字符串,显示的字符串如果要单独使用,将两个斜杠替换成一个斜杠
display( latex(dHdr))
特点:用户输入是代码,不用手工输入latex字符串,正确性由程序编译负责。难以构造积分导数之类的latex输出。
又一个例子:
from sympy import *
init_session()
init_session()
#定义变量
alpha, b, c =
symbols("alpha b c")
#定义函数表达式
X = (-b + b**2 -
4*alpha*c) / (2*alpha*sin(b)*pi)/7*(alpha+1)*cos(b)
#定义矩阵
Y = Matrix([
[X],
[X+1]])
#定义矩阵
Y = Matrix([
[X],
[X+1]])
#显示latex公式
X
Y
Y.T
Y *Y.T
#输出latex的字符串
latex(X)
latex(Y)
latex(Y.T)
latex(Y
*Y.T)
3、使用latexify模块
anaconda安装包未缺省导入latexify模块,需要下载安装。将cell设置成代码,latexify的原理是将函数定义体的语法树转换成latex。示例如下:
import math
import latexify
@latexify.with_latex
def solve(a, b, c):
"输出函数的计算结果"
print(solve(1, 4, 3))
"输出函数公式的latex字符串"
print(solve)
"输出函数公式的latex形式"
Solve
"又一个示例"
@latexify.with_latex
def sinc(x):
if x ==
0:
return 1
else:
return math.sin(x) / x
def sinc(x):
print(sinc)
print()
sinc
print()
sinc
特点:用户输入是代码,不用手工输入latex字符串,正确性由程序编译以及latexify负责,如果变量的名称是alpha之类,会自动显示为希腊字符。难以构造积分导数之类的latex输出。函数的定义只解析python中math模块的原生函数,如果包含用户的自定义函数,只解析函数名称。
复杂一些的示例:
import math
import latexify
@latexify.with_latex
def solve(alpha, b, c):
if b ==
0:
return b+c
elif b ==
1:
return b-c
else :
return (-b + math.sqrt(b**2 - 4*alpha*c)) / (2*alpha)
@latexify.with_latex
def plus(alpha,delta):
return
alpha+delta
@latexify.with_latex
def minus(a,b):
return
a-b
@latexify.with_latex
def times(a,b):
return
a*b
@latexify.with_latex
def devide(a,b):
return
a/b
@latexify.with_latex
def F(x,y,op):
if op ==
0:
return plus(x,y)/x
elif op
==1:
return minus(x,y)/x
elif op
==2:
return times(x,y)/plus(x,y)
elif op
==3:
return devide(x,y)/x
elif op
==4:
return solve(x-1, x, y)
else :
return math.sin(x) / x
import latexify
@latexify.with_latex
def solve(alpha, b, c):
@latexify.with_latex
def plus(alpha,delta):
@latexify.with_latex
def minus(a,b):
@latexify.with_latex
def times(a,b):
@latexify.with_latex
def devide(a,b):
@latexify.with_latex
def F(x,y,op):
#输出latex字符串
print(F)
#输出latex公式
F
solve
plus
minus
times
devide
solve
plus
minus
times
devide
前一篇:【图游记】沈阳故宫