us-wjz

线性代数

线性(linear)指量(变量)与量(变量)之间按比例、成直线关系,在数 学上可以理解为一阶导数为常数的函数;而非线性(non-linear)是 指不成比例、没有直线关系,一阶导数不是常数的函数。

线性代数中的基本量指的是向量,基本关系是严格的线性关系;也 就是可以简单的将线性代数理解为向量与向量之间的线性关系的映 射。

向量

向量的运算

正交向量

矩阵

矩阵:即描述线性代数中线性关系的参数,即矩阵是一个线性变换, 可以将一些向量转换为另一些向量。

初等代数中,y=ax表示的是x到y的一种映射关系,其中a是描述这 中关系的参数。

线性代数中,Y=AX表示的是向量X和Y的一种映射关系,其中A是 描述这种关系的参数。

矩阵的直观表示

 

from sympy import integrate,Rational,exp,E,sin,pi,factor,pprint
from sympy.abc import x,y
from sympy.matrices import Matrix

#创建矩阵
m = Matrix([[1,2,3],[4,5,6],[7,8,9]])
print(m)
pprint(m)
print()

#通过给定矩阵的大小和列表创建矩阵
m2 = Matrix(2,3,[i for i in range(6)])
pprint(m2)
print()

#通过元素与位置的映射函数创建矩阵
def f(i,j):
    if i == j:
        return 1
    else:
        return 0
m3 = Matrix(3,3,f)
pprint(m3)

 

 

矩阵与向量

from sympy import integrate,Rational,exp,E,sin,pi,factor,pprint
from sympy.abc import x,y
from sympy.matrices import Matrix
from sympy.vector import matrix_to_vector,CoordSys3D
C = CoordSys3D(\'C\')

#创建矩阵
m = Matrix([[1,2,3],[4,5,6],[7,8,9]])
print(m)
v1 = m.row(0)
v2 = m.col(2)
v3 = m[0,:]
v5 = m[:,2]
print(\'v1:{}\'.format(v1))
print(\'v2:{}\'.format(v2))
print(\'v3:{}\'.format(v3))
print(\'v5:{}\'.format(v5))
v6 = matrix_to_vector(v1,C)
print(\'v6:{}\'.format(v6))
m2 = v6.to_matrix(C)
print(\'m2:{}\'.format(m2))

矩阵相等

from sympy.matrices import Matrix,eye

#创建矩阵
m = Matrix([[1,2,3],[4,5,6],[7,8,9]])
m2 = Matrix(3,3,[i for i in range(1,10)])
m3 = eye(3)
print(\'m与m2是否相等:{}\'.format(m.equals(m2)))
print(\'m与m2是否同型:{}\'.format(m.shape == m2.shape))
print(\'m与m3是否相等:{}\'.format(m.equals(m3)))
print(\'m与m3是否同型:{}\'.format(m.shape == m3.shape))

方阵

负矩阵、上三角矩阵、下三角矩阵

对角矩阵

from sympy.matrices import Matrix,eye,diag
from sympy import pprint
#创建矩阵
m = diag([[1,2,3],[4,5,6],[7,8,9]],1,2,[3,6])
m2 = diag(1,2,3)
pprint(m)
print()
pprint(m2)

单位矩阵

from sympy.matrices import Matrix,eye,diag
from sympy import pprint
m = eye(5)
pprint(m)

零矩阵

from sympy.matrices import Matrix,zeros,diag
from sympy import pprint
m = zeros(5)
pprint(m)

矩阵的加减法

from sympy.matrices import Matrix
from sympy import pprint
A = Matrix([[1,2],[5,6]])
B = Matrix([[3,4],[7,8]])
print(\'A矩阵:\')
pprint(A)
print(\'B矩阵:\')
pprint(B)
print(\'A + B:\')
pprint(A+B)
print(\'A - B:\')
pprint(A-B)

矩阵与数的乘法

from sympy.matrices import Matrix
from sympy import pprint
A = Matrix([[1,0,2],[2,-1,3]])
B = Matrix([[1,3,4],[1,0,5]])
print(\'A矩阵:\')
pprint(A)
print(\'B矩阵:\')
pprint(B)
print(\'(-3)*A + 2B:\')
pprint((-3)*A+2*B)

矩阵与向量的乘法

from sympy.matrices import Matrix
from sympy import pprint
A = Matrix([[1,0,2],[2,-1,3]]) #矩阵
x = Matrix([1,2,3]) #向量
print(\'A*x:\')
pprint(A*x)

矩阵与矩阵的乘法

from sympy.matrices import Matrix
from sympy import pprint
A = Matrix([[1,1],[-1,-1]]) #矩阵
B = Matrix([[1,1],[1,1]]) #向量
C = Matrix([[-1,2],[3,0]])
print(\'A*B:\')
pprint(A*B)
print(\'B*A:\')
pprint(B*A)
print(\'A*C:\')
pprint(A*C)
print(\'A**2 = A*A:\')
pprint(A**2)

#操作矩阵每个元素的方法
print()
pprint(C.applyfunc(lambda x:x**2))

注意

 (1)只有当两个矩阵是同型矩阵时,才能进行加法 运算.

 (2)只有当第一个矩阵的列数等于第二个矩阵的行 数时,两个矩阵才能相乘,且矩阵相乘不满足交换律.

 (3)矩阵的数乘运算与行列式的数乘运算不同.

 (4)矩阵乘法中存在化零因子,而实数乘法中不存 在化零因子。

 (5)在实数运算系统中,如果方程有唯一解,等价的有消去律,矩阵乘法中没有,消去律不成立。

矩阵的转置

from sympy.matrices import Matrix
from sympy import pprint
A = Matrix([[1,1],[-1,-1]]) #矩阵
B = Matrix([[1,2],[5,6]]) #向量
C = Matrix([[-1,2],[3,0]])
print(\'A:\')
pprint(A)
print(\'A的转置:\')
pprint(A.T)
print(\'B:\')
pprint(B)
print(\'B的转置:\')
pprint(B.T)
print(\'C:\')
pprint(C)
print(\'C的转置\')
pprint(C.T)

对称矩阵

from sympy import pprint
from sympy.matrices import randMatrix #随机矩阵
import random
random.seed(28)
m = randMatrix(3,symmetric=True,prng=random)
pprint(m)

方阵行列式

代数余子式

 

from sympy import pprint
from sympy.matrices import Matrix
import random
random.seed(28)
m = Matrix([[3,1,4],[-1,2,-5],[1,3,0]])
print(m.det())

伴随矩阵

方阵的逆

from sympy import pprint
from sympy.matrices import Matrix
import random
random.seed(28)
m = Matrix([[3,1,4],[-1,2,-5],[1,3,0]])
m_det = m.det() #求矩阵的行列式
m_inv = m.inv() #求矩阵的逆:m**(-1)
print(\'m的伴随矩阵:\')
pprint(m_inv*m_det)

from sympy import pprint
from sympy.matrices import Matrix
import random
random.seed(28)
m = Matrix([[1,2,3],[2,2,1],[3,4,3]])
m_det = m.det() #求矩阵的行列式
print(m_det)
if m_det != 0:
    m_inv = m.inv() #求矩阵的逆:m**(-1)
    print(\'m的逆矩阵:\')
    pprint(m_inv)
else:
    print(\'不存在逆矩阵\')

 

分类:

技术点:

相关文章: