Python、数学和 Latex : Display + Compute?

标签 python latex jupyter-notebook

假设我有一个依赖于变量 n 的方程组。我想做的是编写一个简单的代码,这样只需选择一个特定的 n,它就会生成该特定 n 值的方程。

这是我在 ipython 上编写的代码示例。它将显示我选择的任何 n 的调和级数的部分和(不对其进行评估)。

from IPython.display import display, Math, Latex

txt = "$1"
n = 100000
long = 0
for i in range(n):
    if (i<3 or i > n -3):
        str = "+\dfrac{{1}}"
        temp = "{0}".format(i+2)
        str +="{"+temp+"}"
        txt+=str
    else:
        if long == 0:
            txt +="+..."
            long+=1
    txt +="$"
display(Math(txt))

这会生成以下输出:

enter image description here

当然,我可以将 n 调整为我想要的任何值。

这段代码的编写方式并不能很好地适应其他类型的表达式。我还希望“=::无论值达到我想要的精度::”

有没有一种聪明的方法可以在 ipython 或 Latex 上执行此操作?

最佳答案

从 Python 生成 LaTeX 方程没有什么特别困难的。只是事实上,您必须转义字符串中的 \str.format 中的 {} 之类的内容,这使得它有点乏味。

您可以使用列表理解、列表串联和字符串的 join 方法将示例减少到三行代码。

In [1]: tmp = ['\dfrac{{1}}{{{:.1f}}}'.format(float(n)) for n in range(2, 12)]

In [2]: sl = ['$s'] + tmp[:3] + ['...'] + tmp[-3:]

In [3]: sl
Out[3]: 
['$s',
 '\\dfrac{1}{2.0}',
 '\\dfrac{1}{3.0}',
 '\\dfrac{1}{4.0}',
 '...',
 '\\dfrac{1}{9.0}',
 '\\dfrac{1}{10.0}',
 '\\dfrac{1}{11.0}']

In [4]: ' + '.join(sl) + '$'
Out[4]: '$s + \\dfrac{1}{2.0} + \\dfrac{1}{3.0} + \\dfrac{1}{4.0} + ... + \\dfrac{1}{9.0} + \\dfrac{1}{10.0} + \\dfrac{1}{11.0}$'

为了计算表达式的结果并对其进行格式化,我编写了一个名为 TeXcalc 的模块。从Python表达式开始,它使用eval来计算结果,并使用ast模块将它们格式化为LaTeX。请记住,eval 的使用使其不适合与不受信任的输入一起使用。

更新:

使用 +/- 的字符串格式可以这样完成;

In [1]: '{:+d}'.format(1)
Out[1]: '+1'

In [2]: '{:+d}'.format(-1)
Out[2]: '-1'

关于Python、数学和 Latex : Display + Compute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451076/

相关文章:

python - 如何找到相关矩阵的相关性低于给定值的最大子集?

emacs - 将组织模式表转换为LaTeX

python - Pandas 转换 float 删除指数

python - 线性回归的预处理文本是否有正确的步骤?

python - 在 jupyter notebook 中,按 tab 打印 "ipynb_checkpoints/"而不是自动完成

python - 忽略工具提示文本并仅获取当前使用 Beautiful Soup 显示的文本

python - 我可以弱引用方法吗?

python - Django 按最新评分列出所有作者

Latex - 提取子字符串/忽略字符

latex - 具有多列的自定义表格