线性代数公开课笔记1
因为后面要用到矩阵的变换,所以复习了一下线性代数,做个笔记方便回查
1. 二维方程组开始
假设有个方程组如下:
2 x − y = 0 − x + 2 y = 3 \begin{alignedat}{2} &2x-y = 0 \\ &-x+2y = 3 \end{alignedat} 2x−y=0−x+2y=3
求一下解
x
=
1
y
=
2
\begin{alignedat}{2} &x = 1 \\ &y = 2 \end{alignedat}
x=1y=2
解方程组的关键在于未知数前面的系数, 于是把系数按行写成矩阵的形式
形如
A
x
=
b
Ax = b
Ax=b
具体如下
[
2
−
1
−
1
2
]
[
x
y
]
=
[
0
3
]
\begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 0 \\ 3 \end{bmatrix}
[2−1−12][xy]=[03]
然后再画出几何图形的图像, 就是两条线相交了:
# %matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import MultipleLocator
#从pyplot导入MultipleLocator类,这个类用于设置刻度间隔
x_values=np.linspace(-7,7,1000)
y_values=2 * x_values
y2_values = (3 + x_values)/2.0
L1, = plt.plot(x_values,y_values,c='green', label='2x-y=0') #注意加','逗号
L2, = plt.plot(x_values,y2_values,c='red', label='-x+2y=3')
p_x = 1
p_y = 2
plt.plot(p_x,p_y,marker='o')
plt.annotate("({},{})".format(p_x, p_y), (p_x, p_y), xytext=(-10, 10), textcoords='offset points')
plt.legend(handles=[L1,L2],labels=['2x-y=0','-x+2y=3'] ,loc='best')
plt.title('lines',fontsize=24)
plt.tick_params(axis='both',which='major',labelsize=14)
plt.xlabel('X',fontsize=14)
plt.ylabel('Y',fontsize=14)
x_major_locator=MultipleLocator(2)
#把x轴的刻度间隔设置为1,并存在变量里
y_major_locator=MultipleLocator(2)
#把y轴的刻度间隔设置为1,并存在变量里
ax=plt.gca()
#ax为两条坐标轴的实例
ax.xaxis.set_major_locator(x_major_locator)
#把x轴的主刻度设置为1的倍数
ax.yaxis.set_major_locator(y_major_locator)
#把y轴的主刻度设置为10的倍数
plt.xlim(-3,3)
#把x轴的刻度范围设置为-0.5到11,因为0.5不满一个刻度间隔,所以数字不会显示出来,但是能看到一点空白
plt.ylim(-5,5)
#把y轴的刻度范围设置为-5到110,同理,-5不会标出来,但是能看到一点空白
plt.show()
方程组也可以按列写成矩阵的形式, 这点非常重要算是线性代数的启蒙了
x ⋅ [ 2 − 1 ] + y ⋅ [ − 1 2 ] = [ 0 3 ] x \cdot \begin{bmatrix} 2 \\ -1 \end{bmatrix} + y \cdot \begin{bmatrix} -1 \\ 2 \end{bmatrix} = \begin{bmatrix} 0 \\ 3 \end{bmatrix} x⋅[2−1]+y⋅[−12]=[03]
用上面求出来的解
x
=
1
y
=
2
x = 1\\ y= 2
x=1y=2带进去看:
1
⋅
[
2
−
1
]
+
2
⋅
[
−
1
2
]
=
[
0
3
]
1 \cdot \begin{bmatrix} 2 \\ -1 \end{bmatrix} + 2 \cdot \begin{bmatrix} -1 \\ 2 \end{bmatrix} = \begin{bmatrix} 0 \\ 3 \end{bmatrix}
1⋅[2−1]+2⋅[−12]=[03]
然后我们也可以把的几何图形画出来,可以发现按列画的图是向量图:
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
ax = plt.gca()
X, Y, U, V = [0, 0, 2, -1]
ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=2)
X1, Y1, U1, V1 = [0, 0, -1, 2]
ax.quiver(X1, Y1, U1, V1, angles='xy', scale_units='xy', scale=1)
X2, Y2, U2, V2 = [0, 0, 0, 3]
ax.quiver(X2, Y2, U2, V2, [255,0 ,0],angles='xy', scale_units='xy', scale=2)
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
plt.grid()
plt.draw()
plt.show()
可以看到
向
量
[
2
−
1
]
向
量
[
−
1
2
]
按
1
和
2
的
组
合
,
组
成
了
向
量
[
0
3
]
向量\begin{bmatrix} 2 \\ -1 \end{bmatrix} \, 向量 \begin{bmatrix} -1 \\ 2 \end{bmatrix}按 1 和 2 的组合,组成了向量\begin{bmatrix} 0 \\ 3 \end{bmatrix}
向量[2−1]向量[−12]按1和2的组合,组成了向量[03]
不一定非得是
x
=
1
x=1
x=1和
y
=
2
y=2
y=2 来组合, 其实
x
x
x,
y
y
y 还有很多种组合,这种x,y按
x
⋅
a
+
y
⋅
b
=
c
x \cdot a + y \cdot b = c
x⋅a+y⋅b=c 形式进行的组合我们称为线性组合, 而1 和 2 就是
向
量
[
2
−
1
]
,
向
量
[
−
1
2
]
的
一
组
线
性
组
合
向量\begin{bmatrix} 2 \\ -1 \end{bmatrix} ,向量 \begin{bmatrix} -1 \\ 2 \end{bmatrix}的一组线性组合
向量[2−1],向量[−12]的一组线性组合
2. 发散到高维看看
方程是这个样子:
2
x
−
y
=
0
−
x
+
2
y
−
z
=
3
−
3
y
+
4
z
=
4
\begin{alignedat}{2} &&2x-y= 0 \\ &-&x+2y -z = 3\\ &&-3y+4z = 4 \end{alignedat}
−2x−y=0x+2y−z=3−3y+4z=4
一样按行,也就是
A
x
=
b
Ax = b
Ax=b的形式把它化成矩阵的样子(这么化需要xyz在方程中保持这个顺序)
[
2
−
1
0
−
1
2
−
1
0
−
3
4
]
⋅
[
x
y
z
]
=
[
0
3
4
]
\begin{bmatrix} 2 & -1 &0\\ -1 & 2 &-1\\ 0 & -3 & 4 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} 0 \\ 3 \\ 4 \end{bmatrix}
⎣⎡2−10−12−30−14⎦⎤⋅⎣⎡xyz⎦⎤=⎣⎡034⎦⎤
画出在三维中的图:
换了个角度估计好看点。。。。这图把我画🤮了
下面是代码,还好有很多大佬的模板,不然我没了
# 创建画布
fig = plt.figure(figsize=(12, 8),
facecolor='lightyellow'
)
# 创建 3D 坐标系
ax = fig.gca(fc='whitesmoke',
projection='3d'
)# 二元函数定义域平面
x = np.linspace(0, 9, 9)
y = np.linspace(0, 9, 9)
X, Y = np.meshgrid(x, y)
# -------------------------------- 绘制 3D 图形 --------------------------------
# 平面 y=2x 的部分
ax.plot_surface(X=X,
Y=2*X,
Z=Y,
color='g',
alpha=0.6
)
# 平面 x+2y−z=3 的部分
ax.plot_surface(X=X,
Y=Y,
Z=X-2*Y+3,
color='y',
alpha=0.6
)
# 平面 -3y+4z = 4 的部分
ax.plot_surface(X=X,
Y=Y,
Z=(4+3*Y)/4.0,
color='r',
alpha=0.6
)
ax.scatter3D([2.67],[5.3],[5], c = 'black', marker = '^')
# -------------------------------- --------------------------------
# 设置坐标轴标题和刻度
ax.set(xlabel='X',
ylabel='Y',
zlabel='Z',
xlim=(-9, 9),
ylim=(-9, 9),
zlim=(-9, 9),
xticks=np.arange(-9, 9, 1),
yticks=np.arange(-9, 9, 1),
zticks=np.arange(-9, 9, 1)
)
# 调整视角
ax.view_init(elev=75, # 仰角
azim=80 # 方位角
)
# 显示图形
plt.show()
我们发现其实它是三个平面相交于一个点, 也就是图中的黑色三角型:
位于这个点
import numpy as np
from numpy.linalg import solve
a=np.mat([[2,-1,0],[-1,2,-1],[0,-3,4]])#系数矩阵
b=np.mat([0,3,4]).T #常数项列矩阵
x=solve(a,b) #方程组的解
-------
matrix([[2.66666667],
[5.33333333],
[5. ]])
现在按列化成矩阵:
x
[
2
−
1
0
]
+
y
[
−
1
2
−
3
]
+
z
[
0
−
1
4
]
=
[
0
3
4
]
x \begin{bmatrix} 2 \\ -1 \\ 0 \end{bmatrix} + y \begin{bmatrix} -1 \\ 2 \\ -3 \end{bmatrix} + z \begin{bmatrix} 0 \\ -1 \\ 4 \end{bmatrix} = \begin{bmatrix} 0 \\ 3 \\ 4 \end{bmatrix}
x⎣⎡2−10⎦⎤+y⎣⎡−12−3⎦⎤+z⎣⎡0−14⎦⎤=⎣⎡034⎦⎤
画出向量图
这图画的我报警了,可能还画错了,以后再补补吧。。。
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
x,y,z = np.array([0]), np.array([0]), np.array([0])
# direction
u1 = np.array([ 2, 0, 0])
v1 = np.array([ 0, -1, 0])
w1 = np.array([0, 0, -3])
ax.quiver(x,y,z,u1,v1,w1, length=1, normalize=False, color='b')
u2 = np.array([ -1, 0, 0])
v2 = np.array([ 0, 2, 0])
w2 = np.array([0, 0, -1])
ax.quiver(x,y,z,u2,v2,w2, length=1, normalize=False, color='g')
u3 = np.array([ 0, 0, 0])
v3 = np.array([ 0, -1, 0])
w3 = np.array([0, 0, 4])
ax.quiver(x,y,z,u3,v3,w3, length=1, normalize=False, color='g')
u4 = np.array([ 0, 0, 0])
v4 = np.array([ 0, 3, 0])
w4 = np.array([0, 0, 4])
ax.quiver(x,y,z,u4,v4,w4, length=1.5, normalize=False, color='g')
ax.view_init(elev=30, # 仰角
azim=30 # 方位角
)
plt.show()
3. 思考一下
- 对于任意b, 形如 A x + b Ax+b Ax+b是否永远有解?
- 任意的b意味着在空间上的任意一个向量, 如果一定有解说明线性组合的向量能覆盖整个三维空间
- 但是其实有些情况不可能覆盖,比如两个向量在一个平面上, 而要组成的向量在垂直与这个平面的方向上有分量,那么任何在平面上的向量对于这个分量都不可能有贡献
- 出现3里的这种情况 A A A时, 那么我们说这个矩阵是不对所有b都有解的, 意味着给定一个b 去除以这个A有可能没有解的, 也就是说 b ⋅ A ( − 1 ) b\cdot A^(-1) b⋅A(−1) 没解, 于是A也是不可逆的, 我们统称这样的A为奇异矩阵.
4. 向量的乘法
推荐按列
来弄这样可以看得到组合,工整漂亮:
[
2
−
5
1
3
]
[
1
2
]
=
1
[
2
1
]
+
2
[
−
5
3
]
=
[
−
8
7
]
\begin{bmatrix} 2 & -5\\ 1 & 3\\ \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = 1 \begin{bmatrix} 2 \\ 1 \end{bmatrix} + 2\begin{bmatrix} -5 \\ 3 \end{bmatrix} = \begin{bmatrix} -8 \\ 7 \end{bmatrix}
[21−53][12]=1[21]+2[−53]=[−87]
当然也可以点乘法按行来看:
[
2
−
5
1
3
]
[
1
2
]
=
[
2
∗
1
−
5
∗
2
1
∗
1
+
2
∗
3
]
=
[
−
8
7
]
\begin{bmatrix} 2 & -5\\ 1 & 3\\ \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} 2*1-5*2 \\ 1*1+2*3 \end{bmatrix} = \begin{bmatrix} -8 \\ 7 \end{bmatrix}
[21−53][12]=[2∗1−5∗21∗1+2∗3]=[−87]
参考文献
latex 公式大全
latex 在线编辑文档和教学
latex 图片转公式工具
matplotlib 官方文档
matplotlib 点的标注
python 解方程组
3维matplotlib画图