【问题标题】:Failed to show calculation steps with sympy and markdown无法使用 sympy 和 markdown 显示计算步骤
【发布时间】:2018-12-18 13:16:14
【问题描述】:

问题

我想在由 python 代码创建的 markdown 文件中显示计算步骤(例如,在教科书中)。这是我在原始 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
'$$'
)

您可能会发现step 1 列出了公共矩阵,step 2 用给定值替换矩阵的元素,step 3 计算/简化矩阵,step 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 函数。是否有任何提示来包装 sympy 表达式以使 python 代码更简洁?

谢谢

【问题讨论】:

    标签: python markdown sympy literate-programming


    【解决方案1】:

    现在我写了https://github.com/retsyo/expand_expression来部分回答这个帖子。 但我也在寻找一种更通用的方法,而不是由用户提供所有功能

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

    如果你定义了一个函数,那么你可以像这样使用它

    T1 = T_Rotate('pi/6 + pi/2', useRad=True)
    fOut.write(latexExpression('T1'))
    

    容易吗?我想是的。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 1970-01-01
      • 2017-02-10
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2016-07-22
      • 1970-01-01
      相关资源
      最近更新 更多