递归生成给定python列表的连分数LaTeX表达式

zphenhs4  于 2022-11-27  发布在  Python
关注(0)|答案(1)|浏览(159)

我正在尝试为Jupyter Notebook中的连分数生成LaTeX字符串表达式。例如,一个给定的Python列表x=[1,2,3,4,5]可以写为连分数:

生成此LaTeX分数的结构表达式为\\frac{Numerator}{Denominator}
使用非递归代码:

from IPython.display import display, Markdown

# Non-recursive: 
def nest_frac(previous_expr, numerator_expr1, denominator_expr2):
    return previous_expr + " + \\frac{"+ numerator_expr1 + "}{" + denominator_expr2 + "}"

# Cumbersome, error-prone
display(Markdown("$"+ \
                 nest_frac("1","1", \
                           nest_frac("2","1", \
                                     nest_frac("3","1", \
                                              nest_frac("4","1", "5") \
                                              )  \
                                     ) \
                          ) \
            + "$") \
       )

x = [1,2,3,4,5]

如何递归生成表达式提供了一个python列表。

a64a0gku

a64a0gku1#

我们可以定义函数nest_frac_N,将x作为附加参数:

def nest_frac_N(previous_expr, numerator_expr1, denominator_expr2, x):
    
    temp_frac=str(x[len(x)-1]-1) +"+  \\frac{"+str(numerator_expr1)+"}{"+str(x[len(x)-1])+"}"
    
    for i in reversed(x[:len(x)-1]):
        
        temp_frac = str(i) +"+  \\frac{1}{"+temp_frac+"}"
    
    return temp_frac

如果我们需要x=[1,2,3,4,5]的输出,我们可以:

>>> x = [1,2,3,4,5]
>>> nest_frac_N(1, 1, 1, x)
... '1+  \\frac{1}{2+  \\frac{1}{3+  \\frac{1}{4+  \\frac{1}{5}}}}'

要获得减价格式,我们用途:

display(Markdown("$"+nest_frac_N(1, 1, 1, x)+"$"))

让我们把x的大小设为10以保证函数灵活:

输出

>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> nest_frac_N(1, 1, 1, x)
... '1+  \\frac{1}{2+  \\frac{1}{3+  \\frac{1}{4+  \\frac{1}{5+  \\frac{1}{6+  \\frac{1}{7+  \\frac{1}{8+  \\frac{1}{9+  \\frac{1}{10}}}}}}}}}'

要获得减价:

display(Markdown("$"+nest_frac_N(1, 1, 1, x)+"$"))

我们可以很容易地重新设置功能,直接显示减价格式。

相关问题