线性代数
线性(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(\'不存在逆矩阵\')