(译)Sympy的矩阵操作

最近在使用python的Sympy,因此想要简单的翻译。(这个翻译会快速的浏览一些比较简单的部分)
贴上原来的网址[Matrices](http://docs.sympy.org/latest/tutorial/matrices.html)
导入Sympy
    from sympy import *
"矩阵的表达"
>>Matrix([[1, -1], [3, 4], [0, 2]])
⎡1  -1⎤
⎢     ⎥
⎢3  4 ⎥
⎢     ⎥
⎣0  2"矩阵的列表达"
>>Matrix([1, 2, 3])
⎡1⎤
⎢ ⎥
⎢2⎥
⎢ ⎥
⎣3"矩阵相乘"
M = Matrix([[1, 2, 3], [3, 2, 1]])
N = Matrix([0, 1, 1])
>>M*N
⎡5⎤
⎢ ⎥
⎣3"获取矩阵的行列"
>>M = Matrix([[1, 2, 3], [-2, 0, 4]])
>>M.shape
(2, 3)

"获取矩阵中的任一行"
M.row(0)

"获取矩阵中的任一列"
M.col(-1)获取矩阵中的最后一列

"矩阵的行和列删除(上例的M)"
>>M.col_del(0)
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>M.row_del(1)
[2  3]

"添加矩阵的行和列"
>>M
[2  3]
>>M = M.row_insert(1, Matrix([[0, 4]]))
⎡2  3⎤
⎢    ⎥
⎣0  4⎦
>>M = M.col_insert(0, Matrix([1, -2]))
⎡1   2  3⎤
⎢        ⎥
⎣-2  0  4"矩阵的相加、相乘、求逆"
>>> M = Matrix([[1, 3], [-2, 3]])
>>> N = Matrix([[0, 3], [0, 7]])

>>> M + N
⎡1   6 ⎤
⎢      ⎥
⎣-2  10⎦

>>> M*N
⎡0  24⎤
⎢     ⎥
⎣0  15⎦

>>> 3*M
⎡3   9⎤
⎢     ⎥
⎣-6  9⎦

>>> M**2
⎡-5  12⎤
⎢      ⎥
⎣-8  3 ⎦

>>> M**-11/3  -1/3⎤
⎢         ⎥
⎣2/9  1/9 ⎦

>>> N**-1
Traceback (most recent call last):
...
ValueError: Matrix det == 0; not invertible.

"矩阵的转置"
>>> M = Matrix([[1, 2, 3], [4, 5, 6]])

>>> M
⎡1  2  3⎤
⎢       ⎥
⎣4  5  6⎦

>>> M.T
⎡1  4⎤
⎢    ⎥
⎢2  5⎥
⎢    ⎥
⎣3  6"创建单位矩阵"
>>> eye(3)
⎡1  0  0⎤
⎢       ⎥
⎢0  1  0⎥
⎢       ⎥
⎣0  0  1"创建元素全为0的矩阵"
"zeros(n,m)建立n*m的全元素为0的矩阵"
>>> zeros(2, 3)
⎡0  0  0⎤
⎢       ⎥
⎣0  0  0"创建元素全为1的矩阵"
>>> ones(3, 2)
⎡1  1⎤
⎢    ⎥
⎢1  1⎥
⎢    ⎥
⎣1  1"建立对角矩阵"
>>> diag(1, 2, 3)
⎡1  0  0⎤
⎢       ⎥
⎢0  2  0⎥
⎢       ⎥
⎣0  0  3"diag函数可以接受矩阵作为参数,矩阵被放在对角线上,其余的元素将为0"
>>> diag(-1, ones(2, 2), Matrix([5, 7, 5]))
⎡-1  0  0  0⎤
⎢           ⎥
⎢0   1  1  0⎥
⎢           ⎥
⎢0   1  1  0⎥
⎢           ⎥
⎢0   0  0  5⎥
⎢           ⎥
⎢0   0  0  7⎥
⎢           ⎥
⎣0   0  0  5"矩阵的行列式"
>>> M = Matrix([[1, 0, 1], [2, -1, 3], [4, 3, 2]])
>>> M
⎡1  0   1⎤
⎢        ⎥
⎢2  -1  3⎥
⎢        ⎥
⎣4  3   2⎦
>>> M.det()
-1

"简化行阶梯rref"
"通过初等行变换,转化为简化行阶梯矩阵。rref将返回两个值,第一个式简化行阶梯矩阵,第二个是主元位置的列表"
"注意:返回的元组第一个类型是Matrix,第二个是list"
>>> M = Matrix([[1, 0, 1, 3], [2, 3, 4, 7], [-1, -3, -3, -4]])
>>> M
⎡1   0   1   3 ⎤
⎢              ⎥
⎢2   3   4   7 ⎥
⎢              ⎥
⎣-1  -3  -3  -4⎦
>>> M.rref()
⎛⎡1  0   1    3 ⎤, [0, 1]⎞
⎜⎢              ⎥        ⎟
⎜⎢0  1  2/3  1/3⎥        ⎟
⎜⎢              ⎥        ⎟
⎝⎣0  0   0    0 ⎦        ⎠

"零空间"
"nullspace返回零空间矩阵的列向量的list"
>>> M = Matrix([[1, 2, 3, 0, 0], [4, 10, 0, 0, 1]])
>>> M
⎡1  2   3  0  0⎤
⎢              ⎥
⎣4  10  0  0  1⎦
>>> M.nullspace()
⎡⎡-15⎤, ⎡0⎤, ⎡ 1  ⎤⎤
⎢⎢   ⎥  ⎢ ⎥  ⎢    ⎥⎥
⎢⎢ 6 ⎥  ⎢0⎥  ⎢-1/2⎥⎥
⎢⎢   ⎥  ⎢ ⎥  ⎢    ⎥⎥
⎢⎢ 1 ⎥  ⎢0⎥  ⎢ 0  ⎥⎥
⎢⎢   ⎥  ⎢ ⎥  ⎢    ⎥⎥
⎢⎢ 0 ⎥  ⎢1⎥  ⎢ 0  ⎥⎥
⎢⎢   ⎥  ⎢ ⎥  ⎢    ⎥⎥
⎣⎣ 0 ⎦  ⎣0⎦  ⎣ 1  ⎦⎦

"列空间"
"columspace返回列空间矩阵的列向量的list"
>>> M = Matrix([[1, 1, 2], [2 ,1 , 3], [3 , 1, 4]])
>>> M
⎡1  1  2⎤
⎢       ⎥
⎢2  1  3⎥
⎢       ⎥
⎣3  1  4⎦
>>> M.columnspace()
⎡⎡1⎤, ⎡1⎤⎤
⎢⎢ ⎥  ⎢ ⎥⎥
⎢⎢2⎥  ⎢1⎥⎥
⎢⎢ ⎥  ⎢ ⎥⎥
⎣⎣3⎦  ⎣1⎦⎦

"矩阵的特征值"
"返回值为一个字典,特征值:根的重数"
>>> M = Matrix([[3, -2,  4, -2], [5,  3, -3, -2], [5, -2,  2, -2], [5, -2, -3,  3]])
>>> M
⎡3  -2  4   -2⎤
⎢             ⎥
⎢5  3   -3  -2⎥
⎢             ⎥
⎢5  -2  2   -2⎥
⎢             ⎥
⎣5  -2  -3  3 ⎦
>>> M.eigenvals()
{-2: 1, 3: 1, 5: 2}

"矩阵的特征向量"
"返回包含元组的列表,形式如:(特征值:根的重数,[特征向量])"
>>> M.eigenvects()
⎡⎛-2, 1, ⎡⎡0⎤⎤⎞, ⎛3, 1, ⎡⎡1⎤⎤⎞, ⎛5, 2, ⎡⎡1⎤, ⎡0 ⎤⎤⎞⎤
⎢⎜       ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢ ⎥  ⎢  ⎥⎥⎟⎥
⎢⎜       ⎢⎢1⎥⎥⎟  ⎜      ⎢⎢1⎥⎥⎟  ⎜      ⎢⎢1⎥  ⎢-1⎥⎥⎟⎥
⎢⎜       ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢ ⎥  ⎢  ⎥⎥⎟⎥
⎢⎜       ⎢⎢1⎥⎥⎟  ⎜      ⎢⎢1⎥⎥⎟  ⎜      ⎢⎢1⎥  ⎢0 ⎥⎥⎟⎥
⎢⎜       ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢ ⎥⎥⎟  ⎜      ⎢⎢ ⎥  ⎢  ⎥⎥⎟⎥
⎣⎝       ⎣⎣1⎦⎦⎠  ⎝      ⎣⎣1⎦⎦⎠  ⎝      ⎣⎣0⎦  ⎣1 ⎦⎦⎠⎦

"矩阵对角化"
"返回一个元组(P,D),其中D是对角化的,M=PDP**-1"

>>> P, D = M.diagonalize()
>>> P
⎡0  1  1  0 ⎤
⎢           ⎥
⎢1  1  1  -1⎥
⎢           ⎥
⎢1  1  1  0 ⎥
⎢           ⎥
⎣1  1  0  1 ⎦
>>> D
⎡-2  0  0  0⎤
⎢           ⎥
⎢0   3  0  0⎥
⎢           ⎥
⎢0   0  5  0⎥
⎢           ⎥
⎣0   0  0  5⎦
>>> P*D*P**-13  -2  4   -2⎤
⎢             ⎥
⎢5  3   -3  -2⎥
⎢             ⎥
⎢5  -2  2   -2⎥
⎢             ⎥
⎣5  -2  -3  3 ⎦
>>> P*D*P**-1 == M
True

"特征多项式"
"symbols()是建立符号"
>>> lamda = symbols('lamda')
>>> p = M.charpoly(lamda)
>>> factor(p)
       2
(λ - 5) ⋅(λ - 3)⋅(λ + 2)
  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值