线性代数公开课笔记1


因为后面要用到矩阵的变换,所以复习了一下线性代数,做个笔记方便回查


1. 二维方程组开始

假设有个方程组如下:

2 x − y = 0 − x + 2 y = 3 \begin{alignedat}{2} &2x-y = 0 \\ &-x+2y = 3 \end{alignedat} 2xy=0x+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} [2112][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[21]+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[21]+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} [21][12]12,[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 xa+yb=c 形式进行的组合我们称为线性组合, 而1 和 2 就是 向 量 [ 2 − 1 ] , 向 量 [ − 1 2 ] 的 一 组 线 性 组 合 向量\begin{bmatrix} 2 \\ -1 \end{bmatrix} ,向量 \begin{bmatrix} -1 \\ 2 \end{bmatrix}的一组线性组合 [21],[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} 2xy=0x+2yz=33y+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} 210123014xyz=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} x210+y123+z014=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. 思考一下

  1. 对于任意b, 形如 A x + b Ax+b Ax+b是否永远有解?
  2. 任意的b意味着在空间上的任意一个向量, 如果一定有解说明线性组合的向量能覆盖整个三维空间
  3. 但是其实有些情况不可能覆盖,比如两个向量在一个平面上, 而要组成的向量在垂直与这个平面的方向上有分量,那么任何在平面上的向量对于这个分量都不可能有贡献
  4. 出现3里的这种情况 A A A时, 那么我们说这个矩阵是不对所有b都有解的, 意味着给定一个b 去除以这个A有可能没有解的, 也就是说 b ⋅ A ( − 1 ) b\cdot A^(-1) bA(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} [2153][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} [2153][12]=[215211+23]=[87]

参考文献

latex 公式大全
latex 在线编辑文档和教学
latex 图片转公式工具
matplotlib 官方文档
matplotlib 点的标注
python 解方程组
3维matplotlib画图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值