向量及其运算
向量是什么
谈到向量,我们都很熟悉,因为高中学过,就是有大小又有方向的量嘛。
对于一个一维向量,正负号表示的是方向,长度表示大小:
对于一个二维向量,方向就很好理解了,大小即是模长:
如果是三维向量呢,也一样
n维向量呢,就用一个有序n元组来表示,比如上面是一维向量就是一个元素,一个二维向量是两个元素的组合,三维向量呢是三个向量的组合,自然n维向量就是n个元素的有序组合了:
x
⃗
=
(
x
1
x
2
.
.
.
x
n
)
\vec x=\begin{pmatrix} x_1&x_2&...&x_n \end{pmatrix}
x=(x1x2...xn)
模长和夹角
二维向量的模长,大家都熟悉,就是用勾股定理计算,计算之前先正交投影分解,为了方便书写,我用列表示法:
x
⃗
=
(
x
1
x
2
)
=
(
x
1
0
)
+
(
0
x
2
)
=
b
⃗
+
a
⃗
\vec x=\begin{pmatrix} x_1\\x_2 \end{pmatrix}=\begin{pmatrix} x_1\\0 \end{pmatrix}+\begin{pmatrix} 0\\x_2 \end{pmatrix}=\vec b+\vec a
x=(x1x2)=(x10)+(0x2)=b+a
正交投影后可得到模长计算公式,勾股定理有:
∣ x ⃗ ∣ = ∣ b ⃗ ∣ 2 + ∣ a ⃗ ∣ 2 \vert \vec x \vert=\sqrt{\vert\vec b\vert ^2+\vert\vec a\vert ^2} ∣x∣=∣b∣2+∣a∣2
说到方向的话,这个向量的二元组本身就包含方向信息啊,你会说我就用
(
x
1
x
2
)
\begin{pmatrix} x_1&x_2 \end{pmatrix}
(x1x2)表示方向可不可以么,实际上是可以的,但是会出现一个问题,如果有两个长度不等,方向相同的向量,比如:
y
⃗
=
(
2
x
1
2
x
2
)
\vec y=\begin{pmatrix} 2x_1&2x_2 \end{pmatrix}
y=(2x12x2)。按照上述方法表示方向,就会得到
y
⃗
\vec y
y方向与
x
⃗
\vec x
x方向不等,为了解决这个问题,我们采取的手段是对向量进行归一化处理(就是让它长度等于1,在单位圆上,下图蓝色向量),即原始向量除以其模长:
D
d
i
r
e
c
t
:
x
⃗
=
1
∣
x
⃗
∣
×
x
⃗
=
(
x
1
∣
x
⃗
∣
x
2
∣
x
⃗
∣
)
Ddirect:\vec x = \frac{1}{\vert\vec x\vert}\times\vec x=\begin{pmatrix} \frac{x_1}{\vert\vec x\vert}&\frac{x_2}{\vert\vec x\vert} \end{pmatrix}
Ddirect:x=∣x∣1×x=(∣x∣x1∣x∣x2)
当然,如果我们如果细心一点就会发现,如果设
θ
\theta
θ是向量与横轴夹角,可以得到:
c
o
s
(
θ
)
=
x
1
∣
x
⃗
∣
cos(\theta) =\frac{x_1}{\vert\vec x\vert}
cos(θ)=∣x∣x1 ,
s
i
n
(
θ
)
=
x
2
∣
x
⃗
∣
sin(\theta) =\frac{x_2}{\vert\vec x\vert}
sin(θ)=∣x∣x2
方向向量可以这样描述:
D
d
i
r
e
c
t
:
x
⃗
=
1
∣
x
⃗
∣
×
x
⃗
=
(
c
o
s
θ
s
i
n
θ
)
Ddirect:\vec x = \frac{1}{\vert\vec x\vert}\times\vec x=\begin{pmatrix} cos\theta \\sin\theta \end{pmatrix}
Ddirect:x=∣x∣1×x=(cosθsinθ)
向量加减运算
加减运算遵循的是平行四边形法则,或者说三角形法则:
我们可以很直观的看到
加法:
c
⃗
=
a
⃗
+
b
⃗
\vec c = \vec a+\vec b
c=a+b
减法:
a
⃗
=
c
⃗
−
b
⃗
\vec a = \vec c-\vec b
a=c−b
实际上,减法可以转变为变相的加法:
a
⃗
=
c
⃗
+
(
−
b
⃗
)
\vec a = \vec c+(-\vec b)
a=c+(−b)
当然,上述法则并不要求两个向量正交(垂直的意思),非正交向量依旧满足上述规律:
行向量、列向量、矩阵
前面,我们表示一个向量,就很随意的来回切换,一下子表示成行的形式,一下子表示成列的形式:
行向量形式: x ⃗ = ( x 1 x 2 ) \vec x=\begin{pmatrix} x_1&x_2 \end{pmatrix} x=(x1x2)
列向量形式: x ⃗ = ( x 1 x 2 ) \vec x=\begin{pmatrix} x_1\\x_2 \end{pmatrix} x=(x1x2)
你会觉得,不就是一种表示形式么,行列不就是可以随意切换的么,行向量加法和列向量加法结果不是一致的么?
实际上的确如此,但如果计算过程涉及到乘法,他们就不能随意切换了,即便切换了,再做涉及乘法运算又得切换回去。
对于矩阵,这看着是一个新概念,实际上它是一个向量有序组合,比如我有n个二维向量,就可以把他们组合一起:
A
=
(
x
1
x
2
.
.
.
.
x
n
y
1
y
2
.
.
.
.
y
n
)
A=\begin{pmatrix} x_1&x_2&....&x_n\\y_1&y_2&....&y_n \end{pmatrix}
A=(x1y1x2y2........xnyn)
实际上,你可以有两种观点,你可以认为是n个
(
x
i
y
i
)
\begin{pmatrix} x_i\\y_i \end{pmatrix}
(xiyi)向量组合而成,也可以认为是由2个
(
m
1
m
2
.
.
.
.
m
n
)
\begin{pmatrix} m_1&m_2&....&m_n \end{pmatrix}
(m1m2....mn)向量组合而成。
矩阵的向量视角
我们把每个向量看做一个元素,矩阵也可以看做一个向量,因为它也满足作为一个有序n元组这个条件,举个例中,比如矩阵A如下:
A = ( u 1 v 1 u 2 v 2 ) A=\begin{pmatrix} u_1&v_1\\u_2&v_2 \end{pmatrix} A=(u1u2v1v2)
你可以把它看成一个行向量,但该向量中每个元素是一个列向量:
A
=
(
u
⃗
v
⃗
)
A=\begin{pmatrix} \vec u&\vec v \end{pmatrix}
A=(uv),其中
u
⃗
=
(
u
1
u
2
)
\vec u=\begin{pmatrix} u_1\\u_2 \end{pmatrix}
u=(u1u2) ,
v
⃗
=
(
v
1
v
2
)
\vec v=\begin{pmatrix} v_1\\v_2 \end{pmatrix}
v=(v1v2)
或者你把它看做一个列向量,但该向量中的每个元素是一个行向量:
A
=
(
a
⃗
b
⃗
)
A=\begin{pmatrix} \vec a\\\vec b \end{pmatrix}
A=(ab),其中
a
⃗
=
(
u
1
v
1
)
\vec a=\begin{pmatrix} u_1&v_1 \end{pmatrix}
a=(u1v1) ,
b
⃗
=
(
u
2
v
2
)
\vec b=\begin{pmatrix} u_2&v_2 \end{pmatrix}
b=(u2v2)
所以如果说两个矩阵相加或者相减,你把矩阵看做行向量或者列向量,利用前面的向量法则进行加减即可,比如:
A
=
(
u
1
v
1
u
2
v
2
)
A=\begin{pmatrix} u_1&v_1\\u_2&v_2 \end{pmatrix}
A=(u1u2v1v2),
B
=
(
x
1
y
1
x
2
y
2
)
B=\begin{pmatrix} x_1&y_1\\x_2&y_2 \end{pmatrix}
B=(x1x2y1y2)
计算两个矩阵的加法:
把A和B都看做行向量:
A = ( u ⃗ v ⃗ ) A=\begin{pmatrix} \vec u&\vec v \end{pmatrix} A=(uv),其中 u ⃗ = ( u 1 u 2 ) \vec u=\begin{pmatrix} u_1\\u_2 \end{pmatrix} u=(u1u2) , v ⃗ = ( v 1 v 2 ) \vec v=\begin{pmatrix} v_1\\v_2 \end{pmatrix} v=(v1v2)
B = ( x ⃗ y ⃗ ) B=\begin{pmatrix} \vec x&\vec y \end{pmatrix} B=(xy),其中 x ⃗ = ( x 1 x 2 ) \vec x=\begin{pmatrix} x_1\\x_2 \end{pmatrix} x=(x1x2) , y ⃗ = ( y 1 y 2 ) \vec y=\begin{pmatrix} y_1\\y_2 \end{pmatrix} y=(y1y2)
然后计算A向量+B向量即可得到:
A + B = ( u ⃗ v ⃗ ) + ( x ⃗ y ⃗ ) = ( u ⃗ + x ⃗ v ⃗ + y ⃗ ) A+B=\begin{pmatrix} \vec u&\vec v \end{pmatrix}+\begin{pmatrix} \vec x&\vec y \end{pmatrix}=\begin{pmatrix} \vec u+\vec x&\vec v +\vec y\end{pmatrix} A+B=(uv)+(xy)=(u+xv+y)
.
令 m ⃗ = u ⃗ + x ⃗ \vec m= \vec u+\vec x m=u+x、 n ⃗ = v ⃗ + y ⃗ \vec n=\vec v +\vec y n=v+y
可得:
A + B = ( m ⃗ n ⃗ ) A+B=\begin{pmatrix} \vec m&\vec n\end{pmatrix} A+B=(mn)
.
由于向量 u ⃗ 、 v ⃗ 、 x ⃗ 、 y ⃗ \vec u、\vec v、\vec x、\vec y u、v、x、y都是列向量,所以进一步按列向量展开计算:
m ⃗ = u ⃗ + x ⃗ = ( u 1 u 2 ) + ( x 1 x 2 ) = ( u 1 + x 1 u 2 + x 2 ) \vec m=\vec u+\vec x=\begin{pmatrix} u_1\\u_2 \end{pmatrix}+\begin{pmatrix} x_1\\x_2 \end{pmatrix}=\begin{pmatrix} u_1+x_1\\u_2+x_2 \end{pmatrix} m=u+x=(u1u2)+(x1x2)=(u1+x1u2+x2)
n ⃗ = v ⃗ + y ⃗ = ( v 1 v 2 ) + ( y 1 y 2 ) = ( v 1 + y 1 v 2 + y 2 ) \vec n=\vec v+\vec y=\begin{pmatrix} v_1\\v_2 \end{pmatrix}+\begin{pmatrix} y_1\\y_2 \end{pmatrix}=\begin{pmatrix} v_1+y_1\\v_2+y_2 \end{pmatrix} n=v+y=(v1v2)+(y1y2)=(v1+y1v2+y2)
.
带回去,可得:
A + B = ( m ⃗ n ⃗ ) = ( u 1 + x 1 v 1 + y 1 u 2 + x 2 v 2 + y 2 ) A+B=\begin{pmatrix} \vec m&\vec n\end{pmatrix}=\begin{pmatrix} u_1+x_1&v_1+y_1\\u_2+x_2&v_2+y_2 \end{pmatrix} A+B=(mn)=(u1+x1u2+x2v1+y1v2+y2)
如果直接从结果去看,矩阵加法其实就是对应元素分别相加。
向量点乘(数量积与张量积)及其应用
说起向量乘法,其实是有两种的,分别是点乘和叉乘,你问为什么要两种,其实名称只是为了区别运算过程,你把叉乘换个名字比如叉积,也不是不可以,名字随便起,大家都这么叫,索性就这么来了。
向量点乘
之前为什么提行和列的区别,因为这里向量点乘和行列关系可大了:
(
u
1
v
1
)
⋅
(
x
1
y
1
)
=
u
1
⋅
x
1
+
v
1
⋅
y
1
\begin{pmatrix} u_1&v_1\end{pmatrix}\cdot\begin{pmatrix} x_1\\y_1\end{pmatrix}=u_1\cdot x_1+v_1\cdot y_1
(u1v1)⋅(x1y1)=u1⋅x1+v1⋅y1
( u 1 v 1 ) ⋅ ( x 1 y 1 ) = ( u 1 ⋅ x 1 u 1 ⋅ y 1 v 1 ⋅ x 1 v 1 ⋅ y 1 ) \begin{pmatrix} u_1\\v_1\end{pmatrix}\cdot\begin{pmatrix} x_1&y_1\end{pmatrix}=\begin{pmatrix} u_1\cdot x_1&u_1\cdot y_1\\v_1\cdot x_1&v_1\cdot y_1 \end{pmatrix} (u1v1)⋅(x1y1)=(u1⋅x1v1⋅x1u1⋅y1v1⋅y1)
我们可以看出来行向量点乘列向量,是一个标量值,列向量点乘行向量,变成了一个矩阵,你可能会问,为什么要这么区分,这两个运算有什么现实意义么?
行向量 * 列向量,实 际上就是我们所说的数量积,又叫内积,学过高中课程我们应该很清楚, a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ⋅ ∣ b ⃗ ∣ ⋅ c o s θ \vec a\cdot \vec b=|\vec a|\cdot |\vec b|\cdot cos\theta a⋅b=∣a∣⋅∣b∣⋅cosθ。即求的是 a ⃗ \vec a a模长乘 b ⃗ \vec b b在a方向的投影长度,实际上也就是求两个向量的有效投影的积分面积:
.
它可以求两个向量的夹角 c o s θ = a ⃗ ⋅ b ⃗ ∣ a ⃗ ∣ ⋅ ∣ b ⃗ ∣ cos\theta=\frac{\vec a \cdot \vec b}{|\vec a|\cdot |\vec b|} cosθ=∣a∣⋅∣b∣a⋅b
或者你想求向量a在b方向的投影: ∣ a ∣ c o s θ = ∣ a ∣ a ⃗ ⋅ b ⃗ ∣ a ⃗ ∣ ⋅ ∣ b ⃗ ∣ = a ⃗ ⋅ b ⃗ ⋅ 1 ∣ b ∣ |a|cos\theta=|a|\frac{\vec a \cdot \vec b}{|\vec a|\cdot |\vec b|}=\vec a \cdot \vec b \cdot \frac{1}{|b|} ∣a∣cosθ=∣a∣∣a∣⋅∣b∣a⋅b=a⋅b⋅∣b∣1
列向量*行向量,它叫张量积,又叫外积,实际上,这个我们也很好理解的,就是,举个简单的例中:
如果向量只有一行,且元素是一个数,该式变成了:
u 1 ⋅ ( x 1 y 1 ) = ( u 1 ⋅ x 1 u 1 ⋅ y 1 ) u_1\cdot\begin{pmatrix} x_1&y_1\end{pmatrix}=\begin{pmatrix} u_1\cdot x_1&u_1\cdot y_1\end{pmatrix} u1⋅(x1y1)=(u1⋅x1u1⋅y1)
如果列向量有两行呢,就对另一行也这样操作
v 1 ⋅ ( x 1 y 1 ) = ( v 1 ⋅ x 1 v 1 ⋅ y 1 ) v_1\cdot\begin{pmatrix} x_1&y_1\end{pmatrix}=\begin{pmatrix} v_1\cdot x_1&v_1\cdot y_1\end{pmatrix} v1⋅(x1y1)=(v1⋅x1v1⋅y1)
即可得到结果:
( u 1 v 1 ) ⋅ ( x 1 y 1 ) = ( u 1 ⋅ x 1 u 1 ⋅ y 1 v 1 ⋅ x 1 v 1 ⋅ y 1 ) \begin{pmatrix} u_1\\v_1\end{pmatrix}\cdot\begin{pmatrix} x_1&y_1\end{pmatrix}=\begin{pmatrix} u_1\cdot x_1&u_1\cdot y_1\\v_1\cdot x_1&v_1\cdot y_1 \end{pmatrix} (u1v1)⋅(x1y1)=(u1⋅x1v1⋅x1u1⋅y1v1⋅y1)
.
通过上面的描述呢,我们可以得到两点:1、对于列向量的每一行,运算是独立的(可以并行)
2、对于列向量的每一行,元素由一个数,张成了一个行向量
3、对于行向量的每一列,元素由一个数,张成了一个列向量
你肯定要问,这内积和外积有什么具体意义吗?答案是有的。
首先,提出这俩玩意儿,我们得兼容过去的体系,我们先说外积特例化一下这里的行向量和列向量,都只有一个元素:
( u 1 ) ⋅ ( x 1 ) = ( u 1 ⋅ x 1 ) = d 1 \begin{pmatrix} u_1\end{pmatrix}\cdot\begin{pmatrix} x_1\end{pmatrix}=\begin{pmatrix} u_1\cdot x_1\end{pmatrix}=d_1 (u1)⋅(x1)=(u1⋅x1)=d1
我们一看,欸,这不就是对应普通两个数的乘法嘛
.
我们再来看一下内积,实际上它由两个张量积的加法组成:
( u 1 v 1 ) ⋅ ( x 1 y 1 ) = u 1 ⋅ x 1 + v 1 ⋅ y 1 = d 1 + d 2 \begin{pmatrix} u_1&v_1\end{pmatrix}\cdot\begin{pmatrix} x_1\\y_1\end{pmatrix}=u_1\cdot x_1+v_1\cdot y_1=d_1+d_2 (u1v1)⋅(x1y1)=u1⋅x1+v1⋅y1=d1+d2
如果我们特例化 u 1 = v 1 = 1 u_1=v_1=1 u1=v1=1,很明显就能得到它其实就是在讲两个数的加法
内积从现实意义上讲,我们可能就比较熟悉了:
大家应该都挺熟悉,比如求力做功:
力向量为 F ⃗ = ( F x 0 ) \vec F=\begin{pmatrix} F_x&0\end{pmatrix} F=(Fx0)
位移向量为 S ⃗ = ( x 0 ) \vec S=\begin{pmatrix} x\\0\end{pmatrix} S=(x0)
做功为 W = F ⃗ ⋅ S ⃗ = ( F x F y ) ⋅ ( x y ) = F x ⋅ x + 0 ⋅ 0 W=\vec F\cdot \vec S=\begin{pmatrix} F_x&F_y\end{pmatrix} \cdot \begin{pmatrix} x\\y\end{pmatrix}=F_x\cdot x+0\cdot 0 W=F⋅S=(FxFy)⋅(xy)=Fx⋅x+0⋅0
即我们高中常用的公式(力的分解):
W = F ⃗ ⋅ S ⃗ = ∣ F ⃗ ∣ ⋅ ∣ S ⃗ ∣ ⋅ c o s ( θ ) W=\vec F\cdot \vec S=\vert \vec F\vert\cdot\vert \vec S\vert\cdot cos(\theta) W=F⋅S=∣F∣⋅∣S∣⋅cos(θ)
上述内积求的是力对物体做的总功,但是我可能想知道每个分力在不同方向位移上做的功,这就可以用外积来求了
求 F x F_x Fx分别在x、y方向位移上的做功
F x ⋅ ( x y ) = ( F x ⋅ x F x ⋅ 0 ) = ( F x ⋅ x 0 ) F_x\cdot\begin{pmatrix} x&y \end{pmatrix}=\begin{pmatrix} F_x\cdot x&F_x\cdot 0 \end{pmatrix}=\begin{pmatrix} F_x\cdot x&0 \end{pmatrix} Fx⋅(xy)=(Fx⋅xFx⋅0)=(Fx⋅x0)
.
求 F y F_y Fy分别在x、y方向位移上的做功
F y ⋅ ( x y ) = ( F y ⋅ x F y ⋅ 0 ) = ( 0 ⋅ x 0 ) = ( 0 0 ) F_y\cdot\begin{pmatrix} x&y \end{pmatrix}=\begin{pmatrix} F_y\cdot x&F_y\cdot 0 \end{pmatrix}=\begin{pmatrix} 0\cdot x&0 \end{pmatrix}=\begin{pmatrix} 0&0 \end{pmatrix} Fy⋅(xy)=(Fy⋅xFy⋅0)=(0⋅x0)=(00)
.
合起来,求力F各个分量,在个方向上的做功
F ⃗ ⋅ S ⃗ = ( F x F y ) ⋅ ( x y ) = ( F x ⋅ x F x ⋅ 0 0 ⋅ x 0 ⋅ 0 ) = ( F x ⋅ x 0 0 0 ) \vec F\cdot \vec S=\begin{pmatrix} F_x\\ F_y \end{pmatrix}\cdot \begin{pmatrix} x& y \end{pmatrix}=\begin{pmatrix} F_x\cdot x& F_x\cdot 0\\0\cdot x& 0 \cdot 0 \end{pmatrix}=\begin{pmatrix} F_x\cdot x& 0\\0& 0 \end{pmatrix} F⋅S=(FxFy)⋅(xy)=(Fx⋅x0⋅xFx⋅00⋅0)=(Fx⋅x000)
若求得外积,也就是每个分力单独的做功,想求总功只要把他们加一块就可以了。
当然,聪明的你肯定会想到一个问题,我都知道力和位移如果垂直,肯定不做功,上面计算外积的时候,还计算 F x ⋅ y F_x\cdot y Fx⋅y, F y ⋅ x F_y\cdot x Fy⋅x这两个,是不是傻,即便y不等于0, F x ⋅ y F_x\cdot y Fx⋅y这一项也没有丝毫意义!实际上的确是这样的,我们如果是计算做功的话,只要对角线上两个 F x ⋅ x F_x\cdot x Fx⋅x和 F y ⋅ y F_y\cdot y Fy⋅y就够了,剩余的两个和我们完全没有关系,因为他们的组合本就毫无意义。所以我们如果是求功,自然用内积,如果是想知道内部详细做功部分,可以用外积计算,然后再抽取其中有意义的结果进行观察,没有意义的就不要管。
.
实际上它隐含着一个单位的问题,某些部分单位就是0,有意义部分单位是1
或许对于做功问题,外积中只有左斜对角线上那两个才有意义,但是如果换了一个问题,比如求力矩:
我们都知道力矩 M = M= M= ∣ F ⃗ ∣ ⋅ ∣ a ⃗ ∣ ⋅ s i n ( θ ) |\vec F|\cdot|\vec a|\cdot sin(\theta) ∣F∣⋅∣a∣⋅sin(θ),
我们一看,啊,这不就是之前没意义的 F x ⋅ y F_x\cdot y Fx⋅y、 F y ⋅ x F_y\cdot x Fy⋅x那部分嘛,所以说,换个问题它没准就变得有意义了,你需要什么,把有意义的部分拿出来看就可以了,剩下的不用看。
聪明的你到这里就想明白了,在这个问题上,之前有意义的那两项 F x ⋅ x F_x\cdot x Fx⋅x、 F y ⋅ y F_y\cdot y Fy⋅y,反倒变得没意义了。
矩阵乘法(点乘)
之前我们提到了矩阵,如果是两个矩阵之间的点乘,我们怎么计算,实际上我们可以把它看做向量,然后用向量计算法则进行计算,比如说有如下矩阵:
A
=
(
u
1
v
1
u
2
v
2
)
A=\begin{pmatrix} u_1&v_1\\u_2&v_2 \end{pmatrix}
A=(u1u2v1v2),
B
=
(
x
1
x
2
y
1
y
2
)
B=\begin{pmatrix} x_1&x_2\\y_1&y_2 \end{pmatrix}
B=(x1y1x2y2)
方法1:把A看做行向量(元素是列向量),B看做列向量(元素是行向量),利用内积计算:
A = ( u ⃗ v ⃗ ) A=\begin{pmatrix} \vec u&\vec v \end{pmatrix} A=(uv),其中 u ⃗ = ( u 1 u 2 ) \vec u=\begin{pmatrix} u_1\\u_2 \end{pmatrix} u=(u1u2) , v ⃗ = ( v 1 v 2 ) \vec v=\begin{pmatrix} v_1\\v_2 \end{pmatrix} v=(v1v2)
B = ( x ⃗ y ⃗ ) B=\begin{pmatrix} \vec x\\\vec y \end{pmatrix} B=(xy),其中 x ⃗ = ( x 1 x 2 ) \vec x=\begin{pmatrix} x_1&x_2 \end{pmatrix} x=(x1x2) , y ⃗ = ( y 1 y 2 ) \vec y=\begin{pmatrix} y_1&y_2 \end{pmatrix} y=(y1y2)
.
然后计算向量 A ⋅ B A\cdot B A⋅B,用内积公式即可得到:
A ⋅ B = ( u ⃗ v ⃗ ) ⋅ ( x ⃗ y ⃗ ) = u ⃗ ⋅ x ⃗ + v ⃗ ⋅ y ⃗ A\cdot B=\begin{pmatrix} \vec u&\vec v \end{pmatrix}\cdot \begin{pmatrix} \vec x\\ \vec y \end{pmatrix}=\vec u\cdot \vec x+\vec v \cdot \vec y A⋅B=(uv)⋅(xy)=u⋅x+v⋅y
.
令 m ⃗ = u ⃗ ⋅ x ⃗ \vec m= \vec u\cdot \vec x m=u⋅x、 n ⃗ = v ⃗ ⋅ y ⃗ \vec n=\vec v \cdot \vec y n=v⋅y,这里就可以展开成外积公式:
m ⃗ = u ⃗ ⋅ x ⃗ = ( u 1 u 2 ) ⋅ ( x 1 x 2 ) = ( u 1 x 1 u 1 x 2 u 2 x 1 u 2 x 2 ) \vec m= \vec u\cdot \vec x=\begin{pmatrix} u_1\\u_2 \end{pmatrix}\cdot \begin{pmatrix} x_1&x_2 \end{pmatrix}=\begin{pmatrix} u_1 x_1&u_1x_2\\u_2 x_1&u_2x_2 \end{pmatrix} m=u⋅x=(u1u2)⋅(x1x2)=(u1x1u2x1u1x2u2x2)
n ⃗ = v ⃗ ⋅ y ⃗ = ( v 1 v 2 ) ⋅ ( y 1 y 2 ) = ( v 1 y 1 v 1 y 2 v 2 y 1 v 2 y 2 ) \vec n= \vec v\cdot \vec y=\begin{pmatrix} v_1\\v_2 \end{pmatrix}\cdot \begin{pmatrix} y_1&y_2 \end{pmatrix}=\begin{pmatrix} v_1 y_1&v_1y_2\\v_2 y_1&v_2y_2 \end{pmatrix} n=v⋅y=(v1v2)⋅(y1y2)=(v1y1v2y1v1y2v2y2)
可得:
A ⋅ B = m ⃗ + n ⃗ = ( u 1 x 1 u 1 x 2 u 2 x 1 u 2 x 2 ) + ( v 1 y 1 v 1 y 2 v 2 y 1 v 2 y 2 ) A\cdot B= \vec m+\vec n=\begin{pmatrix} u_1 x_1&u_1x_2\\u_2 x_1&u_2x_2 \end{pmatrix}+\begin{pmatrix} v_1 y_1&v_1y_2\\v_2 y_1&v_2y_2 \end{pmatrix} A⋅B=m+n=(u1x1u2x1u1x2u2x2)+(v1y1v2y1v1y2v2y2)
通过前面矩阵加法的总结,我们知道即对应元素分别相加,得:
. A ⋅ B = m ⃗ + n ⃗ = ( u 1 x 1 + v 1 y 1 u 1 x 2 + v 1 y 2 u 2 x 1 + v 2 y 1 u 2 x 2 + v 2 y 2 ) A\cdot B= \vec m+\vec n=\begin{pmatrix} u_1 x_1+v_1 y_1&u_1x_2+v_1y_2\\u_2 x_1+v_2 y_1&u_2x_2+v_2y_2 \end{pmatrix} A⋅B=m+n=(u1x1+v1y1u2x1+v2y1u1x2+v1y2u2x2+v2y2)
方法2:把A看做列向量(元素是行向量),B看做行向量(元素是列向量),利用外积计算:
A = ( a ⃗ b ⃗ ) A=\begin{pmatrix} \vec a\\\vec b \end{pmatrix} A=(ab),其中 a ⃗ = ( u 1 v 1 ) \vec a=\begin{pmatrix} u_1&v_1 \end{pmatrix} a=(u1v1) , b ⃗ = ( u 2 v 2 ) \vec b=\begin{pmatrix} u_2&v_2 \end{pmatrix} b=(u2v2)
B = ( c ⃗ d ⃗ ) B=\begin{pmatrix} \vec c&\vec d \end{pmatrix} B=(cd),其中 c ⃗ = ( x 1 y 1 ) \vec c=\begin{pmatrix} x_1\\y_1 \end{pmatrix} c=(x1y1) , d ⃗ = ( x 2 y 2 ) \vec d=\begin{pmatrix} x_2\\y_2 \end{pmatrix} d=(x2y2)
.
然后计算向量 A ⋅ B A\cdot B A⋅B,用外积公式即可得到:
A ⋅ B = ( a ⃗ b ⃗ ) ⋅ ( c ⃗ d ⃗ ) = u ⃗ ⋅ x ⃗ + v ⃗ ⋅ y ⃗ = ( a ⃗ ⋅ c ⃗ a ⃗ ⋅ d ⃗ b ⃗ ⋅ c ⃗ b ⃗ ⋅ d ⃗ ) A\cdot B=\begin{pmatrix} \vec a\\\vec b \end{pmatrix}\cdot \begin{pmatrix} \vec c& \vec d \end{pmatrix}=\vec u\cdot \vec x+\vec v \cdot \vec y=\begin{pmatrix}\vec a\cdot \vec c& \vec a\cdot \vec d\\\vec b\cdot \vec c& \vec b \cdot \vec d \end{pmatrix} A⋅B=(ab)⋅(cd)=u⋅x+v⋅y=(a⋅cb⋅ca⋅db⋅d)
.
令 m ⃗ 1 = a ⃗ ⋅ c ⃗ \vec m_1= \vec a\cdot \vec c m1=a⋅c、 m ⃗ 2 = a ⃗ ⋅ d ⃗ \vec m_2=\vec a \cdot \vec d m2=a⋅d, m ⃗ 3 = b ⃗ ⋅ c ⃗ \vec m_3= \vec b\cdot \vec c m3=b⋅c、 m ⃗ 4 = b ⃗ ⋅ d ⃗ \vec m_4=\vec b \cdot \vec d m4=b⋅d,这里就可以展开成内积公式:
m ⃗ 1 = ( u 1 v 1 ) ⋅ ( x 1 y 1 ) = u 1 x 1 + v 1 y 1 \vec m_1=\begin{pmatrix} u_1&v_1 \end{pmatrix}\cdot \begin{pmatrix} x_1\\y_1 \end{pmatrix}=u_1 x_1+v_1 y_1 m1=(u1v1)⋅(x1y1)=u1x1+v1y1
m ⃗ 2 = ( u 1 v 1 ) ⋅ ( x 2 y 2 ) = u 1 x 2 + v 1 y 2 \vec m_2=\begin{pmatrix} u_1&v_1 \end{pmatrix}\cdot \begin{pmatrix} x_2\\y_2\end{pmatrix}=u_1 x_2+v_1 y_2 m2=(u1v1)⋅(x2y2)=u1x2+v1y2
m ⃗ 3 = ( u 2 v 2 ) ⋅ ( x 1 y 1 ) = u 2 x 1 + v 2 y 1 \vec m_3=\begin{pmatrix} u_2&v_2 \end{pmatrix}\cdot \begin{pmatrix} x_1\\y_1 \end{pmatrix}=u_2 x_1+v_2 y_1 m3=(u2v2)⋅(x1y1)=u2x1+v2y1
m ⃗ 4 = ( u 2 v 2 ) ⋅ ( x 2 y 2 ) = u 2 x 2 + v 2 y 2 \vec m_4=\begin{pmatrix} u_2&v_2 \end{pmatrix}\cdot \begin{pmatrix} x_2\\y_2\end{pmatrix}=u_2x_2+v_2 y_2 m4=(u2v2)⋅(x2y2)=u2x2+v2y2
可得:
A ⋅ B = ( a ⃗ ⋅ c ⃗ a ⃗ ⋅ d ⃗ b ⃗ ⋅ c ⃗ b ⃗ ⋅ d ⃗ ) = ( u 1 x 1 + v 1 y 1 u 1 x 2 + v 1 y 2 u 2 x 1 + v 2 y 1 u 2 x 2 + v 2 y 2 ) A\cdot B=\begin{pmatrix}\vec a\cdot \vec c& \vec a\cdot \vec d\\\vec b\cdot \vec c& \vec b \cdot \vec d \end{pmatrix}=\begin{pmatrix} u_1 x_1+v_1 y_1&u_1x_2+v_1y_2\\u_2 x_1+v_2 y_1&u_2x_2+v_2y_2 \end{pmatrix} A⋅B=(a⋅cb⋅ca⋅db⋅d)=(u1x1+v1y1u2x1+v2y1u1x2+v1y2u2x2+v2y2)
通过上述例中,我们就可以知道,不论是把矩阵看做行向量,还是列向量,做点乘后其结果是一致。
当然,值得注意的是,外积得到的矩阵,实际上是两个向量元素之间两两组合
代数分配律中的两两组合: ( a + b ) ⋅ ( c + d ) = a ⋅ c + a ⋅ d + b ⋅ c + b ⋅ d (a+b)\cdot(c+d)=a\cdot c+a\cdot d+b\cdot c+b\cdot d (a+b)⋅(c+d)=a⋅c+a⋅d+b⋅c+b⋅d
外积运算中的两两组合: ( a b ) ⋅ ( c d ) = ( a ⋅ c a ⋅ d b ⋅ c b ⋅ d ) \begin{pmatrix} a\\ b \end{pmatrix}\cdot \begin{pmatrix} c& d \end{pmatrix}=\begin{pmatrix} a\cdot c& a\cdot d\\b\cdot c& b \cdot d \end{pmatrix} (ab)⋅(cd)=(a⋅cb⋅ca⋅db⋅d)
向量叉乘及其应用
也可以叫它叉积,是区别于点乘(内积)的另一种乘法,我们知道点乘是
a
⃗
⋅
b
⃗
=
∣
a
⃗
∣
⋅
∣
b
⃗
∣
⋅
s
i
n
(
θ
)
\vec a\cdot\vec b=|\vec a|\cdot|\vec b|\cdot sin(\theta)
a⋅b=∣a∣⋅∣b∣⋅sin(θ),而叉乘不一样,它是这样的性质:
∣
a
⃗
×
b
⃗
∣
=
∣
a
⃗
∣
⋅
∣
b
⃗
∣
⋅
c
o
s
(
θ
)
|\vec a\times\vec b|=|\vec a|\cdot|\vec b|\cdot cos(\theta)
∣a×b∣=∣a∣⋅∣b∣⋅cos(θ)
我们可以清楚的知道,它的模长等于两个向量所在的平行四边形面积。
之前,我们在做功那边,用力矩作为例子,解释了外积在求力矩问题时有意义的部分,我们可以详细的分别知道各分力对不同力臂的力矩是多少。但是,我现在不想知道分力了,我就想知道总力矩是多少,不想看各部分细节,就和计算内积可以直接看总功那样,怎么办?
答案其实非常简单,计算叉积的模长即可:
力矩 M = ∣ F ⃗ × a ⃗ ∣ = ∣ F ⃗ ∣ ⋅ ∣ a ⃗ ∣ ⋅ s i n ( θ ) M=|\vec F\times\vec a|=|\vec F|\cdot|\vec a|\cdot sin(\theta) M=∣F×a∣=∣F∣⋅∣a∣⋅sin(θ),
你可能会问,为什么是模长,难道 a ⃗ × b ⃗ \vec a\times\vec b a×b结果是一个向量?的确是这样的。实际上叉积计算结果不仅是一个向量,而且还是 a ⃗ 、 b ⃗ \vec a、\vec b a、b向量所在的平面的法向量(就是分别垂直向量a和b)。
实际上,我们计算叉乘,只有三维向量才会有意义,即便计算的是二维向量,实际上它也隐含的变成的三维向量的计算,只不过隐藏的分量是0。
所以这边直接介绍三维向量叉乘了,有两个向量a,b如下
a ⃗ = ( 1 2 − 3 ) \vec a=\begin{pmatrix}1 & 2 &-3 \end{pmatrix} a=(12−3), b ⃗ = ( 4 − 5 6 ) \vec b=\begin{pmatrix}4 & -5 &6 \end{pmatrix} b=(4−56)
这两个向量是行还是列向量,对于叉乘没有什么影响,你如果结果需要是行向量才能进行后续运算,你就认为结果是行向量,需要列向量你就认为是列向量即可。
a ⃗ × b ⃗ = ∣ i j k 1 2 − 3 4 − 5 6 ∣ \vec a\times\vec b=\left| \begin{matrix} i& j&k \\ 1 & 2 &-3 \\ 4 & -5 &6 \\ \end{matrix} \right| a×b=∣∣∣∣∣∣i14j2−5k−36∣∣∣∣∣∣
其实这个东西叫做行列式,我们知道意义就可以了,计算这种东西可以交给计算机,实际上计算过程如下,就是拆,去掉所在的列元素就可以了:
∣ i j k 1 2 − 3 4 − 5 6 ∣ = ∣ 2 − 3 − 5 6 ∣ ⋅ i − ∣ 1 − 3 4 6 ∣ ⋅ j + ∣ 1 2 4 − 5 ∣ ⋅ k \left| \begin{matrix} i& j&k \\ 1 & 2 &-3 \\ 4 & -5 &6 \\ \end{matrix} \right|=\left| \begin{matrix} 2 & -3 \\ -5 & 6 \\ \end{matrix} \right|\cdot i-\left| \begin{matrix} 1 & -3 \\ 4 & 6 \\ \end{matrix} \right|\cdot j+\left| \begin{matrix} 1 & 2 \\ 4 & -5 \\ \end{matrix} \right|\cdot k ∣∣∣∣∣∣i14j2−5k−36∣∣∣∣∣∣=∣∣∣∣2−5−36∣∣∣∣⋅i−∣∣∣∣14−36∣∣∣∣⋅j+∣∣∣∣142−5∣∣∣∣⋅k
对于二阶行列式嘛,计算如下:
∣ 1 2 4 − 5 ∣ = ( 1 ∗ − 5 ) − ( 2 ∗ 4 ) = − 13 \left| \begin{matrix} 1 & 2 \\ 4 & -5 \\ \end{matrix} \right|=(1*-5 )-(2*4)=-13 ∣∣∣∣142−5∣∣∣∣=(1∗−5)−(2∗4)=−13
.
可得结果
a ⃗ × b ⃗ = ∣ i j k 1 2 − 3 4 − 5 6 ∣ = − 3 i − 18 j − 13 k \vec a\times\vec b=\left| \begin{matrix} i& j&k \\ 1 & 2 &-3 \\ 4 & -5 &6 \\ \end{matrix} \right|=-3i-18j-13k a×b=∣∣∣∣∣∣i14j2−5k−36∣∣∣∣∣∣=−3i−18j−13k
实际上,就是这么个向量:
c ⃗ = ( − 3 − 18 − 13 ) \vec c=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix} c=(−3−18−13)
事实上,我们可以验证一下,c向量是否分别与a,b垂直,只要计算内积就可以了,若垂直,内积必然为0:
c ⃗ ⋅ a ⃗ = ( − 3 − 18 − 13 ) ⋅ ( 1 2 − 3 ) = − 3 ∗ 1 − 18 ∗ 2 + 13 ∗ 3 = 0 \vec c\cdot \vec a=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix} \cdot \begin{pmatrix} 1 & 2 & -3 \end{pmatrix}=-3*1-18*2+13*3=0 c⋅a=(−3−18−13)⋅(12−3)=−3∗1−18∗2+13∗3=0
c ⃗ ⋅ b ⃗ = ( − 3 − 18 − 13 ) ⋅ ( 4 − 5 6 ) = − 3 ∗ 4 + 18 ∗ 5 − 13 ∗ 6 = 0 \vec c\cdot \vec b=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix} \cdot \begin{pmatrix} 4 & -5 & 6 \end{pmatrix}=-3*4+18*5-13*6=0 c⋅b=(−3−18−13)⋅(4−56)=−3∗4+18∗5−13∗6=0
到这里你肯定会问叉积有什么实际意义,实际上叉积的用处挺多的,下面列几个:
比如计算力矩,力F向量为 F ⃗ \vec F F,力臂为 a ⃗ \vec a a
,这里我偷个懒,直接用刚刚的数据了, a ⃗ × b ⃗ = ∣ i j k 1 2 − 3 4 − 5 6 ∣ \vec a\times\vec b=\left| \begin{matrix} i& j&k \\ 1 & 2 &-3 \\ 4 & -5 &6 \\ \end{matrix} \right| a×b=∣∣∣∣∣∣i14j2−5k−36∣∣∣∣∣∣
计算得到 a ⃗ × b ⃗ = c ⃗ = ( − 3 − 18 − 13 ) \vec a\times\vec b=\vec c=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix} a×b=c=(−3−18−13)
求向量c的模长即可:
.
力矩M= ∣ c ⃗ ∣ = ( − 3 ) 2 + ( − 18 ) 2 + ( − 13 ) 2 = 502 |\vec c|=\sqrt{(-3)^2+(-18)^2+(-13)^2}=\sqrt{502} ∣c∣=(−3)2+(−18)2+(−13)2=502
又比如求解向量a,b所在平面的单位法向量:
偷个懒用之前的结果,叉乘得到法向量: a ⃗ × b ⃗ = c ⃗ = ( − 3 − 18 − 13 ) \vec a\times\vec b=\vec c=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix} a×b=c=(−3−18−13)
除以它的模长,即可得到单位法向量了:
c ⃗ ⋅ 1 ∣ c ⃗ ∣ = ( − 3 − 18 − 13 ) ⋅ 1 502 \vec c\cdot \frac{1}{|\vec c|}=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix}\cdot \frac{1}{\sqrt{502}} c⋅∣c∣1=(−3−18−13)⋅5021
再比如求解体积,a、b两个向量用之前的(偷个懒),再加一个 n ⃗ = ( 2 3 4 ) \vec n=\begin{pmatrix} 2 & 3 & 4 \end{pmatrix} n=(234),我们求这样三个向量包围的四面体体积
由于我们之前求得了: a ⃗ × b ⃗ = c ⃗ = ( − 3 − 18 − 13 ) \vec a\times\vec b=\vec c=\begin{pmatrix} -3 & -18 & -13 \end{pmatrix} a×b=c=(−3−18−13)
我们知道体积公式:
V = S ⋅ H V=S\cdot H V=S⋅H
我们又知道, c ⃗ \vec c c向量模长等于a、b向量包围的四边形面积,且方向垂直该平面
即:
底面积: S = ∣ c ⃗ ∣ S=|\vec c| S=∣c∣,高: H = ∣ n ⃗ ∣ ⋅ c o s ( θ ) H=|\vec n|\cdot cos(\theta) H=∣n∣⋅cos(θ),其中 θ \theta θ指向量n与法向量c的夹角,即n在法向量方向的投影
即可得:
V = S ⋅ H = c ⃗ ⋅ n ⃗ = ∣ c ⃗ ∣ ⋅ ∣ n ⃗ ∣ ⋅ c o s ( θ ) V=S\cdot H=\vec c\cdot \vec n=|\vec c|\cdot |\vec n|\cdot cos(\theta) V=S⋅H=c⋅n=∣c∣⋅∣n∣⋅cos(θ)
.实际上这里运用了一个混合积的概念,即:
四面体体积 V = ( a ⃗ × b ⃗ ) ⋅ n ⃗ V=(\vec a\times \vec b)\cdot \vec n V=(a×b)⋅n
又比如,判断一个点是否在两条线之间(可用来判断是否在矩形内):
我们计算分别计算两个法向量 n ⃗ 1 、 n ⃗ 2 \vec n_1、\vec n_2 n1、n2:
n ⃗ 1 = a ⃗ × b ⃗ \vec n_1=\vec a \times\vec b n1=a×b
n ⃗ 2 = c ⃗ × d ⃗ \vec n_2=\vec c \times\vec d n2=c×d
实际上这两个法向量是一个方向的,如果我们是用 a ⃗ × b ⃗ \vec a \times\vec b a×b去计算,右手坐标系上,它方向也就朝下(顺时针),如果 n ⃗ 2 \vec n_2 n2也是朝下(顺时针),那么该点便在两条直线之间
我们可以通过内积(夹角)来判断两个法线是否是同向的
R = n ⃗ 1 ⋅ n ⃗ 2 = ∣ n ⃗ 1 ∣ ⋅ ∣ n ⃗ 2 ∣ ⋅ c o s ( θ ) R=\vec n_1\cdot \vec n_2=|\vec n_1|\cdot |\vec n_2|\cdot cos(\theta) R=n1⋅n2=∣n1∣⋅∣n2∣⋅cos(θ)
.
若R>0,法向量同向,说明点在两条直线段之间
若R=0,说明点至少在其中一条直线段上
若R<0,说明点在两条直线段之外如果是判断点是否在矩形内,分别判断点是否上下两条直线之间,并且是否在左右两条直线之间即可
从最后一个例中可以看出叉积还有一个重要性质,就是向量方向问题,当我们采用右手坐标系时,如我们想知道
n
⃗
1
=
a
⃗
×
b
⃗
\vec n_1=\vec a \times\vec b
n1=a×b的方向,我们手掌与
a
⃗
\vec a
a平行,手指弯曲朝向
b
⃗
\vec b
b,其方向是我们大拇指方向:
所以,对于叉乘,向量是不能随意调换位置的,先后顺序影响方向:
a ⃗ × b ⃗ = − b ⃗ × a ⃗ \vec a \times\vec b=-\vec b \times\vec a a×b=−b×a
线性方程组与二次函数
线性方程组
我们平常经常会碰到方程组,比如二元一次方程组:
{
x
1
−
2
x
2
=
−
1
−
x
1
+
3
x
2
=
3
\left\{ \begin{array}{c} x_1-2x_2=-1 \\ -x_1+3x_2=3 \\ \end{array} \right.
{x1−2x2=−1−x1+3x2=3
如果从常规线性方程组的角度去考虑,其中的每一行,即每个方程,都是二维平面的一条直线:
当然这两条直线可能平行、相交、或者重合,分别对应着这个方程组的的解有0个、1个、无数个。0个解也就是我们常说的方程组无解。
方程组的行向量视角
如果说我们把每一行看做两个向量的点乘,即未知向量投影在系数向量方向的值,比如第一行,令
a
⃗
=
(
1
−
2
)
\vec a=\begin{pmatrix} 1&-2 \end{pmatrix}
a=(1−2)
未知变量:
x
⃗
=
(
x
1
x
2
)
\vec x=\begin{pmatrix} x_1\\x_2 \end{pmatrix}
x=(x1x2)
第一行直线方程可以改写为:
a
⃗
⋅
x
⃗
=
−
1
\vec a\cdot \vec x=-1
a⋅x=−1
即
∣
a
⃗
∣
⋅
∣
x
⃗
∣
⋅
c
o
s
(
θ
)
=
1
2
+
(
−
2
)
2
⋅
∣
x
⃗
∣
⋅
c
o
s
(
θ
)
=
−
1
|\vec a|\cdot |\vec x|\cdot cos(\theta)=\sqrt{1^2+(-2)^2}\cdot |\vec x|\cdot cos(\theta)=-1
∣a∣⋅∣x∣⋅cos(θ)=12+(−2)2⋅∣x∣⋅cos(θ)=−1
也就是说,
x
⃗
\vec x
x是满足在
a
⃗
\vec a
a向量方向投影长度为:
∣
x
⃗
∣
⋅
c
o
s
(
θ
)
=
−
1
5
|\vec x|\cdot cos(\theta)=-\frac{1}{\sqrt{5}}
∣x∣⋅cos(θ)=−51的所有向量:
对于一个方程组来说,方程组的解,就是同时满足方程组中两个方程各自的投影条件,即他们解集的交集:
第一行:
a
⃗
1
=
(
1
−
2
)
\vec a_1=\begin{pmatrix} 1&-2 \end{pmatrix}
a1=(1−2),解集
∣
x
⃗
∣
⋅
c
o
s
(
θ
1
)
=
−
1
5
|\vec x|\cdot cos(\theta_1)=-\frac{1}{\sqrt{5}}
∣x∣⋅cos(θ1)=−51
第二行:
a
⃗
2
=
(
−
1
3
)
\vec a_2=\begin{pmatrix} -1&3 \end{pmatrix}
a2=(−13),解集
∣
x
⃗
∣
⋅
c
o
s
(
θ
2
)
=
3
10
|\vec x|\cdot cos(\theta_2)=\frac{3}{\sqrt{10}}
∣x∣⋅cos(θ2)=103
这两条直线相交的地方,便是方程组的解:
方程组的列向量视角
我们可以把变量
x
1
、
x
2
x_1、x_2
x1、x2抽取出来作为一个列向量,由于系数也满足有序元素组概念,所以系数也可以抽取作为一个向量:
第一列: a ⃗ 1 = ( 1 − 1 ) \vec a_1=\begin{pmatrix} 1\\-1 \end{pmatrix} a1=(1−1),第二列: a ⃗ 2 = ( − 2 3 ) \vec a_2=\begin{pmatrix} -2\\3 \end{pmatrix} a2=(−23),等式右侧向量: b ⃗ = ( − 1 3 ) \vec b=\begin{pmatrix} -1\\3 \end{pmatrix} b=(−13)
原方程组可以改写为向量方程形式
a
⃗
1
⋅
x
1
+
a
⃗
2
⋅
x
2
=
b
⃗
\vec a_1\cdot x_1+\vec a_2\cdot x_2=\vec b
a1⋅x1+a2⋅x2=b
一个点积公式又摆在眼前了,一个以向量为元素的行向量(矩阵)A:
A = ( 1 − 2 − 1 3 ) = ( a ⃗ 1 a ⃗ 2 ) A=\begin{pmatrix} 1&-2\\-1&3 \end{pmatrix}=\begin{pmatrix} \vec a_1&\vec a_2 \end{pmatrix} A=(1−1−23)=(a1a2),以及未知变量: x ⃗ = ( x 1 x 2 ) \vec x=\begin{pmatrix} x_1\\x_2 \end{pmatrix} x=(x1x2)
恰好满足了方程组,即方程组看改写为:
A ⋅ x = ( a ⃗ 1 a ⃗ 2 ) ⋅ ( x 1 x 2 ) = b ⃗ A\cdot x=\begin{pmatrix}\vec a_1&\vec a_2\end{pmatrix} \cdot \begin{pmatrix}x_1\\x_2\end{pmatrix}=\vec b A⋅x=(a1a2)⋅(x1x2)=b
即可得到方程组的矩阵式表达,即矩阵方程:
A ⋅ x ⃗ = b ⃗ A\cdot \vec x=\vec b A⋅x=b
向量方程形式,告诉了我们需要找到一个恰当的系数
x
1
、
x
2
x_1、x_2
x1、x2,使得向量
a
⃗
1
、
a
⃗
2
\vec a_1、\vec a_2
a1、a2可以刚好合成向量
b
⃗
\vec b
b:
想求解这个问题,可以用高中物理中学过的力分解,当然,求解是话,我们线性代数中有成熟的工具求解,如初等行变换。
方程中
a
⃗
1
、
a
⃗
2
\vec a_1、\vec a_2
a1、a2我们称为基底,高中时期可能学过,我们最常见的就是正交基(相互垂直),比如:
x
⃗
=
(
1
0
)
\vec x=\begin{pmatrix}1\\0 \end{pmatrix}
x=(10),
y
⃗
=
(
0
1
)
\vec y=\begin{pmatrix}0\\1\end{pmatrix}
y=(01)
这两个基实际上就是我们的坐标轴的单位向量:
二次曲线拟合应用
之前的例中,x,y都是未知的,但在这个例中中,x,y是可测的,也就是可以通过实验我给一个x反馈得到一个y,而真正未知的变量是方程的系数
假设我有一条未知系统的曲线, y = a 0 + a 1 x + a 2 x 2 y=a_0+a_1x+a_2x^2 y=a0+a1x+a2x2,我通过对系统分别输入10个x,测的10个y,求系统曲线中的系数 ( a 0 , a 1 , a 2 ) (a_0,a_1,a_2) (a0,a1,a2)
{ a 0 + a 1 x 1 + a 2 x 1 2 = y 1 a 0 + a 1 x 2 + a 2 x 2 2 = y 2 . . . a 0 + a 1 x 10 + a 2 x 10 2 = y 10 \left\{ \begin{array}{c} a_0+a_1x_1+a_2x_1^2=y_1 \\ a_0+a_1x_2+a_2x_2^2=y_2 \\ ...\\ a_0+a_1x_{10}+a_2x_{10}^2=y_{10} \\ \end{array} \right. ⎩⎪⎪⎨⎪⎪⎧a0+a1x1+a2x12=y1a0+a1x2+a2x22=y2...a0+a1x10+a2x102=y10
这里我们要注意了,虽然x看着好像是未知量,其实是已知量,真正的未知量是a,所以我们最好换一下写法,避免迷惑了:
{ a 0 + x 1 a 1 + x 1 2 a 2 = y 1 a 0 + x 2 a 1 + x 2 2 a 2 = y 2 . . . a 0 + x 10 a 1 + x 10 2 a 2 = y 10 \left\{ \begin{array}{c} a_0+x_1a_1+x_1^2a_2=y_1 \\ a_0+x_2a_1+x_2^2a_2=y_2 \\ ...\\ a_0+x_{10}a_1+x_{10}^2a_2=y_{10} \\ \end{array} \right. ⎩⎪⎪⎨⎪⎪⎧a0+x1a1+x12a2=y1a0+x2a1+x22a2=y2...a0+x10a1+x102a2=y10
改写为矩阵表达为:
系数矩阵 A = ( 1 x 1 x 1 2 1 x 2 x 2 2 . . . . . . . . . 1 x 10 x 10 2 ) A=\begin{pmatrix} 1&x_1&x_1^2\\1&x_2&x_2^2\\ ...&...&...\\ 1&x_{10}&x_{10}^2\\ \end{pmatrix} A=⎝⎜⎜⎛11...1x1x2...x10x12x22...x102⎠⎟⎟⎞ ,未知变量 x ⃗ = ( a 0 a 1 a 2 ) \vec x=\begin{pmatrix} a_0\\a_1\\ a_2\\ \end{pmatrix} x=⎝⎛a0a1a2⎠⎞,右侧向量 b ⃗ = ( y 1 y 2 . . . y 10 ) \vec b=\begin{pmatrix} y_1\\ y_2\\ ...\\y_{10} \end{pmatrix} b=⎝⎜⎜⎛y1y2...y10⎠⎟⎟⎞
所求问题为:
A ⋅ x ⃗ = b ⃗ A\cdot \vec x=\vec b A⋅x=b
然后利用线性代数知识求解该线性方程组即可
面对诸如此类的拟合问题,如椭圆方程拟合,直线方程拟合,高阶曲线拟合,函数傅里叶逼近,我们的做法都一样,将其写成线性方程组形式,即化非线性为线性,然后利用线性代数知识对其进行求解。
拟合问题和逼近问题本质上是相同的,例如用二次曲线对数据拟合,本质上是用二次曲线去逼近原始数据,通过求解系数建立误差最小的逼近形式。在上述二次曲线逼近的例中在,实际上它有三个基向量:
β ⃗ 1 = ( 1 1 . . . 1 ) \vec \beta_1=\begin{pmatrix} 1\\ 1\\ ...\\1 \end{pmatrix} β1=⎝⎜⎜⎛11...1⎠⎟⎟⎞, β ⃗ 2 = ( x 1 x 2 . . . x 10 ) \vec \beta_2=\begin{pmatrix} x_1\\ x_2\\ ...\\x_{10} \end{pmatrix} β2=⎝⎜⎜⎛x1x2...x10⎠⎟⎟⎞, β ⃗ 3 = ( x 1 2 x 2 2 . . . x 10 2 ) \vec \beta_3=\begin{pmatrix} x_1^2\\ x_2^2\\ ...\\x_{10}^2 \end{pmatrix} β3=⎝⎜⎜⎛x12x22...x102⎠⎟⎟⎞
.
实际上,它是三个函数 β 1 ( x ) = 1 \beta_1(x)=1 β1(x)=1, β 1 ( x ) = x \beta_1(x)=x β1(x)=x, β 1 ( x ) = x 2 \beta_1(x)=x^2 β1(x)=x2。
我们就是利用这三个函数对未知函数进行逼近的。
如果是傅里叶逼近,其选取的函数就是三角函数。
二次非线性函数
对于一次方程,它需要联立方程组,我们求解x的目的是看能不能找到唯一确定的解,以及解是什么。
对于一个二次函数,如
y
=
4
x
1
2
+
3
x
2
2
y=4x_1^2+3x_2^2
y=4x12+3x22,我们的目的就变了,我们的目的是看函数有没有最优解,以及解是什么。
一元二次方程是一个抛物线,对于二元二次的方程,就是一个曲面了,比如常见的几种情况如下:
二元二次函数, y = a x 1 2 + b x 2 2 y=ax_1^2+bx_2^2 y=ax12+bx22,常见几种情况如下
当 a > 0 , b > 0 a>0,b>0 a>0,b>0时,这时肯定能找到极小值点,由于除了(0,0)点外所有值都大于0,我们称它为正定的
当 a > 0 , b = 0 a>0,b=0 a>0,b=0,或者 a = 0 , b > 0 a=0,b>0 a=0,b>0时,所有值都大于等于0,我们称它为半正定的,它的极值点有无数个,分布在一条直线上:
当 a > 0 , b < 0 a>0,b<0 a>0,b<0,或者 a < 0 , b > 0 a<0,b>0 a<0,b>0时,有的值大于0有的小于0,我们称它为不定的,它没有极值点,但是又一个鞍点(0,0)位置:
当 a < 0 , b < 0 a<0,b<0 a<0,b<0时,这时肯定能找到极大值点,由于除了(0,0)点外所有值都小于0,我们称它为负定的
对于这种二元二次函数,如
y
=
a
x
1
2
+
b
x
2
2
y=ax_1^2+bx_2^2
y=ax12+bx22,我们通常的写法是这样的:
y
=
x
1
⋅
a
x
1
+
x
2
⋅
a
x
2
y=x_1\cdot ax_1+x_2\cdot ax_2
y=x1⋅ax1+x2⋅ax2
写成向量式:
y
=
(
x
1
x
2
)
⋅
(
a
x
1
b
x
2
)
y=\begin{pmatrix} x_1&x_2\end{pmatrix}\cdot \begin{pmatrix} ax_1\\bx_2\end{pmatrix}
y=(x1x2)⋅(ax1bx2)
再次改写为矩阵式:
y = ( x 1 x 2 ) ⋅ ( a 0 0 b ) ⋅ ( x 1 x 2 ) y=\begin{pmatrix} x_1&x_2\end{pmatrix}\cdot \begin{pmatrix} a&0\\0&b\end{pmatrix}\cdot \begin{pmatrix} x_1\\x_2\end{pmatrix} y=(x1x2)⋅(a00b)⋅(x1x2)
中间这个矩阵涵盖了函数图像的性质,分以下四种情况a>0、b>0,即正定那种情况,我们称矩阵为正定矩阵
a>0、b=0,(或者a=0,b>0),即半正定那种情况,我们称矩阵为半正定矩阵
a>0、b<0,(或者a<0,b>0),即不定那种情况,我们称矩阵为不定定矩阵
a<0、b<0,即负定那种情况,我们称矩阵为负定矩阵
a<0、b=0,(或者a=0,b<0),即半负定那种情况,我们称矩阵为半负定矩阵
二次函数应用
二次函数应用范围挺广的,比如常见的优化问题,就是想找一个曲面上的最优解。
或者对于一个系统的状态,如何预测它以后是稳定还是会发散。
参考资料:
1.高等数学,同济第六版
2.线性代数及其应用,华章译从
3.外积是张量积还是张量积
4.线性代数(1-1)线性方程组求解