使用SymPy解决函数来反汇编Python程序(幕后会发生什么?)

时间:2015-12-30 12:58:51

标签: python sympy

我有这个Python代码,它解决了3变量线性方程式。

import numpy as np

from sympy import *

init_printing(use_latex='mathjax')

A = Matrix([[-2,3,-1],[2,2,3],[-4,-1,1]])

x,y,z= symbols('x,y,z')
In[12]:

X =Matrix([[x],[y],[z]])

B = Matrix([[1],[1],[1]])

solve(A*X-B)

snapshot of python program

我很满意并且对输出感到困惑。我想了解为了解决这个问题会采取什么样的步骤,以及它使用什么解决方案?

问题的第1部分是如何解决问题AX-B

第2部分:一般来说,有一个方法来查看任何python程序的反汇编(为了理解它)?

1 个答案:

答案 0 :(得分:3)

有两种基本方法:

阅读来源

理解它的最好方法是阅读源代码。在IPython中,您可以键入solve??,它将显示源代码以及该源所在的文件。您还可以查看SymPy GitHub

SymPy中的

solve有点复杂,因为它可以解决许多不同类型的方程。我相信在这种情况下,你想看solve_linear_system,它使用行减少。在将来的版本中,它将替换为linsolve,它使用基本相同的算法(Gauss-Jordan消除)。

使用可视化调试器

了解正在发生的事情的另一种方法是在可视化调试器中逐步执行代码。我建议使用一个调试器,它可以显示正在运行的函数的代码,以及变量列表及其值(pdb在这方面不是一个很好的调试器)。我个人更喜欢在终端上运行的PuDB,但也有其他好的。使用调试器的优点是,您可以准确地查看正在遍历的代码路径以及每个步骤中变量的值。