矩阵的建立
可以使用sympy.Matrix()建立矩阵,其中的参数可以是Python的列表,也可以是numpy的array
1 2 3 4 5 6 7 8 9 10 11 12 >>> a = [[1 ,1 ],[0 ,2 ]]>>> b = np.array([[1 ,0 ],[1 ,1 ]])>>> A = sympy.Matrix(a)>>> B = sympy.Matrix(b)>>> AMatrix([ [1 , 1 ], [0 , 2 ]]) >>> BMatrix([ [1 , 0 ], [1 , 1 ]])
最常见的矩阵是单位矩阵,建立单位矩阵需要矩阵的参数,使用sympy.eye()建立单位矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 >>> sympy.eye(3 )Matrix([ [1 , 0 , 0 ], [0 , 1 , 0 ], [0 , 0 , 1 ]]) >>> sympy.eye(3 ,2 )Matrix([ [1 , 0 ], [0 , 1 ], [0 , 0 ]]) >>> sympy.eye(2 ,3 )Matrix([ [1 , 0 , 0 ], [0 , 1 , 0 ]])
另外还可以建立全零矩阵sympy.zeros()和全一矩阵sympy.ones()
1 2 3 4 5 6 7 8 9 10 11 12 13 >>> sympy.ones(2 ) Matrix([ [1 , 1 ], [1 , 1 ]]) >>> sympy.ones(2 ,3 )Matrix([ [1 , 1 , 1 ], [1 , 1 , 1 ]]) >>> sympy.zeros(3 ,2 )Matrix([ [0 , 0 ], [0 , 0 ], [0 , 0 ]])
另外还可以建立对角矩阵sympy.diag()
1 2 3 4 5 >>> sympy.diag(1 ,1 ,2 )Matrix([ [1 , 0 , 0 ], [0 , 1 , 0 ], [0 , 0 , 2 ]])
矩阵的运算
SymPy可以进行矩阵的加法、减法、乘法、求逆、转置、行列式。
使用之前建立的矩阵 ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 >>> A+BMatrix([ [2 , 1 ], [1 , 3 ]]) >>> A-BMatrix([ [ 0 , 1 ], [-1 , 1 ]]) >>> A*BMatrix([ [2 , 1 ], [2 , 2 ]]) >>> A * B**-1 Matrix([ [ 0 , 1 ], [-2 , 2 ]]) >>> B**-1 Matrix([ [ 1 , 0 ], [-1 , 1 ]]) >>> A.TMatrix([ [1 , 0 ], [1 , 2 ]]) >>> A.det()2
可以使用eigenvals(),eigenvects(),diagonalize()方法进行对角化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> AMatrix([ [1 , 1 ], [0 , 2 ]]) >>> A.eigenvals(){2 : 1 , 1 : 1 } >>> A.eigenvects()[(1 , 1 , [Matrix([ [1 ], [0 ]])]), (2 , 1 , [Matrix([ [1 ], [1 ]])])] >>> A.diagonalize()(Matrix([ [1 , 1 ], [0 , 1 ]]), Matrix([ [1 , 0 ], [0 , 2 ]]))
eigenvals()返回的结果中,第一个表示特征值,第二个表示特征值的重数。
eigenvects()返回的列表中,第一列表示特征值,第二个表示特征值的重数,第三个表示特征向量。
diagnonalize()返回的结果中,第一个矩阵表示 ,第二个矩阵表示 ,其中
在线性代数中,可以使用矩阵解线性方程组,例如求解Ax=b,以 为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >>> A = sympy.Matrix([[1 ,1 ],[0 ,2 ]])>>> AMatrix([ [1 , 1 ], [0 , 2 ]]) >>> b = sympy.Matrix([3 ,5 ])>>> bMatrix([ [3 ], [5 ]]) >>> A**-1 *bMatrix([ [1 /2 ], [5 /2 ]]) >>> sympy.linsolve((A,b)){(1 /2 , 5 /2 )}