簡體   English   中英

為給定的 python 列表遞歸生成連續分數的 LaTeX 表達式

[英]Recursively generate LaTeX expression for continued fractions for a given python list

我正在嘗試為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 列表。

我們可以將x作為附加參數來定義 function nest_frac_N

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)-2]):
        
        temp_frac = str(i) +"+  \\frac{1}{"+temp_frac+"}"
    
    return temp_frac

如果我們需要x=[1,2,3,4,5]的 output,我們會這樣做:

>>> 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}}}}'

要獲得 markdown 格式,我們使用:

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

x大小為 10 以確保 function 是靈活的:

Output

>>> 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}}}}}}}}}'

並獲得 markdown:

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

而我們可以很方便的重新設置function,直接顯示markdown的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM