Python 无法使用sympy和markdown显示计算步骤 问题:

Python 无法使用sympy和markdown显示计算步骤 问题:,python,markdown,sympy,literate-programming,Python,Markdown,Sympy,Literate Programming,我想在由python代码创建的标记文件中显示计算步骤(例如,在教科书中)。以下是我在原始python代码中需要的内容 from sympy import * angle = 60 # this will be changed to created different markdown files theta = symbols('ss') x = symbols('xx') a = Matrix([[cos(theta), -sin(theta), 0], [sin(theta),

我想在由python代码创建的标记文件中显示计算步骤(例如,在教科书中)。以下是我在原始python代码中需要的内容

from sympy import *

angle = 60    # this will be changed to created different markdown files

theta = symbols('ss')
x = symbols('xx')

a = Matrix([[cos(theta), -sin(theta), 0], [sin(theta), cos(theta), 0], [0, 0, 1]])
b = Matrix([[x, 0, 0], [0, x, 1], [0, 0, 0]])

print(
'$$',
latex(a), latex(b), '=',   # step 1
latex(a).replace('ss', latex(rad(angle))), latex(b).replace('xx', '2'), '=', # step 2
latex(a.subs('ss', rad(60))), latex(b.subs('xx', '2')), '=', # step 3
latex((a*b).subs({'ss': rad(60), 'xx':2}).evalf(2)), # step 4
'$$'
)
您可能会发现
步骤1
列出了公共矩阵,
步骤2
用给定值替换矩阵元素,
步骤3
计算/简化矩阵,
步骤4
将矩阵元素计算为浮点形式

latex
的调用太多,导致代码太长且难以阅读

初试 我写

from sympy import *

class T_Rotate(object):
    def __init__(self, theta):
        self.eq = Matrix([[cos(theta), -sin(theta), 0], [sin(theta), cos(theta), 0], [0, 0, 1]])
        self.str = latex(self.eq)

    def __mul__(self, mat):
        return self.eq * mat

    def __rmul__(self, mat):
        return  mat * self.eq

a = T_Rotate(60)
b = Matrix([[1, 0, 0], [0, 1, 1], [0, 0, 0]])

print('$$a*b = %s * %s = %s$$' % (a.str, latex(b), latex(a*b)))

print('$$b * a = %s * %s = %s$$' % (latex(b), a.str, latex(b*a)))
但是上面的
a*b
是一个错误的答案,它是一个3*3矩阵,但其元素都是3*3矩阵

那么,问题是什么

进一步思考 如果上述问题得到解决,仍然会调用
latex
函数。有没有提示包装symphy表达式,以便python代码更简洁

谢谢

现在我写信部分回答了这篇文章但我仍在寻找一种更常见的方法,而不需要用户提供所有功能

我发布它是因为它可以帮助别人。以下是一个例子:

如果您已经定义了一个函数,那么您可以像

T1 = T_Rotate('pi/6 + pi/2', useRad=True)
fOut.write(latexExpression('T1'))
容易吗?我想是的