线性代数
【转载自B站:萌弟AI数学基础基于Python】
第一章:向量空间
举例:正如我们所生活的三维空间,它就是一个向量空间。
定义:令F是一个数域,对于一个集合V,对于任意的a,b∈F,α,β,γ∈V,我们称V为一个向量空间,则它必须满足以下条件:
(1)α+β=β+α;
(2)(α+β)+γ=α+(β+γ);
(3)∃0∈V,它具有以下性质:∀α∈V,都有0+α=α;
(4)对于V中的每一个向量α,在V中存在一个向量α′,使得α+α′=0。这样的α′叫做α的负向量;
(5)a(α+β)=aα+aβ:
(6)(a+b)α=aα+bβ;
(7)(ab)α=a(bα);
(8)1α=α。
第二章:向量及其内积
import numpy as np
a = np.array([1,0,0,0])
b = np.array([1,1,0,0])
np.dot(a,b)
output : 1
什么是向量?
我们称向量空间中的元素为为向量,向量空间中的向量满足向量的加法及数量乘法,向量的加法满足平行四边形法则;而向量的内积则是指在向量空间中所定义的一种运算,内积也称为点积,其结果是一个实数。对于向量空间中的两个向量a,b,它们的内积为:
a⋅b=|a|⋅|b|cosθ
x1(2,3) x2(1,2) 的内积为(12) + (32) = 8(实数R 8)
其中θ是a,b的夹角。
向量内积满足:
⟨α,β⟩=⟨β,α⟩
k⟨α,β⟩=⟨kα,β⟩=⟨α,kβ⟩
⟨α+β,γ⟩=⟨α,β⟩+⟨β,γ⟩
⟨α,α⟩⩾0,等号成立当且仅当α=0
用numpy写一个向量a⃗ =(a1,a2,…,an),代码为:
import numpy
a=array([a1,a2,⋯,an])
用代码表示两向量a⃗ ,b⃗ 的内积:
c=dot(numpy.transpose(a),b)
或
c=dot(a.T,b)
from sympy.matrices import Matrix,GramSchmidt
# Schmidt 正交化:由一个线性无关向量组来构造一个正交向量组
l = [Matrix([1,2,-1]),Matrix([-1,3,1]),Matrix([4,1,0])]
o = GramSchmidt(l,True) # 正交化
o
[Matrix([
[ sqrt(6)/6],
[ sqrt(6)/3],
[-sqrt(6)/6]]), Matrix([
[-sqrt(3)/3],
[ sqrt(3)/3],
[ sqrt(3)/3]]), Matrix([
[sqrt(2)/2],
[ 0],
[sqrt(2)/2]])]
第三章:范数
第四章:矩阵及矩阵的秩
什么是矩阵?
矩阵是一个由m行n列数字构成的一个数表,我们一般会在矩阵的外面加上一个圆括号或中括号,表示这是一个整体,并用大写字母A表示,
# 矩阵的乘法
A = np.array([[2,1,4],
[1,-1,3]])
B = np.array([[1,3,1],
[0,-1,2],
[1,-3,1]])
np.matmul(A,B)
array([[ 6, -7, 8],
[ 4, -5, 2]])
第五章:矩阵范数
第六章:矩阵的秩 齐次线性方程组及其解空间
# 矩阵的秩
# 一个矩阵中不等于零的子式的最大阶数
x = np.array([[2,0,1],
[1,-4,-1],
[-1,8,3]])
np.linalg.matrix_rank(x)
3
x = np.array([[2,0,1],
[0,1,0],
[0,0,0]])
np.linalg.matrix_rank(x)
2
x = np.array([[2,0,1],
[0,0,0],
[0,0,0]])
np.linalg.matrix_rank(x)
1
x = np.array([[0,0,0],
[0,0,0],
[0,0,0]])
np.linalg.matrix_rank(x)
0
import numpy
A=numpy.mat(’a11 ⋯ a1n;⋯;am1 ⋯ amn’)
b=zeors(1,n)
x=numpy.linalg.solve(A,b)
print(x)
第七章:特征值与特征向量及矩阵的迹
import numpy as np
A=np.mat(’a11 ⋯ a1n;⋯;an1 ⋯ ann’)
np.linalg.eig(A)
# 特征值和特征向量
# 特征值:某个向量的变化大小叫特征值
# 特征向量:某个向量依然保持这个方向
x = np.array([[-1,1,0],
[-4,3,0],
[1,0,2]])
np.linalg.eig(x)
(array([2., 1., 1.]), array([[ 0. , 0.40824829, 0.40824829],
[ 0. , 0.81649658, 0.81649658],
[ 1. , -0.40824829, -0.40824829]]))
# 矩阵的迹
# 一个矩阵变化的速率
x = np.array([[-1,1,0],
[-4,3,0],
[1,0,2]])
np.trace(x)
4
import numpy as np
trA = 0 A = array([(a11,⋯,a1n),⋯,(an1,⋯,ann)])
for i in range(0,n):
trA = A[i,1] + trA
print(trA)