【问题标题】:Tabulate Spherical Harmonic Functions制表球谐函数
【发布时间】:2021-01-26 10:53:56
【问题描述】:

嘿,我正在尝试以紧凑的方式表达球谐函数。我无法弄清楚如何在表格中表达这一点,我在列表中得到了 l = 0,1,2 和 m = -l, ...,+l 的球面谐波。但想要一个表格中的表格:

 m -2 -1 0 1 2
l        
0        x
1      x x x
2    x x x x x

有谁知道如何做到这一点,因为我只是想用普通表头创建更简单的表格。我有列表 sph_harmonics[] 中的函数。

from sympy import Ynm
from tabulate import tabulate

sph_harmonics = []
for l in range (0, 3):
            for m in range(-l, l+1):
                print('l =', l)
                print('m =',m)
                print(sp.simplify(Ynm(l, m, theta, phi).expand(func=True)))
                sph_harmonics.append(sp.simplify(Ynm(l, m, theta, phi).expand(func=True)))

【问题讨论】:

    标签: python format sympy tabulate


    【解决方案1】:

    Mathjax 本身没有table/tabular 环境,但仍然可以为此使用array 环境(link1link2link3)。

    因此,基于此,我编写了以下名为 fmt_table 的格式化函数,它可以像你提到的那样格式化公式:

    from sympy import Ynm, simplify, symbols, latex
    theta, phi = symbols('\Theta \phi')
    from IPython.display import HTML, display, Math, Latex
    
    def fmt_table(data,center_data=False,add_row_nums=False):
        from math import ceil
        buf='''
    \\newcommand\\T{\\Rule{0pt}{1em}{.3em}}
    \\begin{array}{%s}    
    '''
        max_cols = max(len(r) for r in data)
        column_spec = '|' + '|'.join(['c']*max_cols) + '|'
        buf = buf % column_spec
        row_idx = 0
        for row_data in data:
            row = ''
            if add_row_nums and row_idx > 0:
                row += str(row_idx) + " & "
            if center_data and row_idx > 0:
                to_add = ceil( (max_cols - len(row_data))/2 )
                row += ' & '.join([''] * to_add)
            row += ' & '.join(row_data)
            if row_idx == 0:
                row = '''\\hline''' + row + '''\\\\\hline'''
            else:
                row += '''\\\\\hline'''
            row += "\n"
            buf +=row
            row_idx += 1
        buf += '''\\end{array}'''
        # print(buf)
        return buf
        
    
    tbl = []
    tbl.append(['\\texttt{m/l}','-2','-1','0','1','2'])
    for l in range (0, 3):
        new_row = []    
        for m in range(-l, l+1):
            h = simplify(Ynm(l, m, theta, phi).expand(func=True))
            new_row.append(latex(h))
        tbl.append(new_row)
        
    
    display(Math(fmt_table(tbl,add_row_nums=True,center_data=True)))
    

    输出:

    此答案中的所有代码都是also available here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多