- Algorithm
- Incremental Method
- Simulation
- Backtracking
- Dynamic Programming
- Largest Empty Interval
- Location Allocation Problem
- Knapsack Problem
- Algorithm Analysis
- Data
- Sort
- Set
- 排序资料结构: Search Tree 系列
- Sequence 资料结构: Array / List
- 大量 Point 资料结构: k-Dimensional Tree
- Region 资料结构: Uniform Grid
- Graph
- Tree 资料结构: Heavy-Light Decomposition
- Graph Spectrum(Under Construction!)
- Tree
- Binary Tree
- Directed Acyclic Graph
- Articulation Vertex / Bridge
- Reachability
- Bipartite Graph
- Clique(Under Construction!)
- Planar Graph
- Path
- Single Source Shortest Paths: Label Correcting Algorithm
- Shortest Walk
- Cycle
- Spanning Tree
- s-t Flow
- Feasible s-t Flow
- Cut
- Matching
- T-Join
- Hamilton Circuit
- Domination
- Coloring
- Labeling
- Vector Product
- Sweep Line
- Rectangle
- Rectangle
- Polygon
- Convex Hull
- 3D Convex Hull(Under Construction!)
- Half-plane Intersection
- Voronoi Diagram
- Triangulation
- Metric
- Number
- Sequence
- Function (ℝ)
- Matrix
- Root Finding
- Linear Equations
- Functional Equation
- Optimization
- Interpolation
- Curve
- Regression
- Estimation
- Clustering
- Transformation(Under Construction!)
- Wave (ℝ)
- Representation
- Signal
- State(Under Construction!)
- Markov Chain
- System(Under Construction!)
- Markov Model
- Function
- Gray Code
- Base
- Divisor
- Prime
- Residue
- Lattice
- Series(Under Construction!)
- Average Number
- Nim
- String
- Longest Increasing Subsequence
- Longest Common Subsequence
- Approximate String Matching
- String Matching
- String Matching
- String Matching: Inverted Index
- Count Substrings
- Palindrome
- Language
- Code
- Compression
- Correction
- Encryption
- Transmission
- Data
- Text
- 2D Graphics
- Audio
- Audition(Under Construction!)
- Image
- Vision(Under Construction!)
- Model
- Motion(Under Construction!)
- Camera(Under Construction!)
- Glass(Under Construction!)
- Computer
- Physics
- Biology
- Medicine
- Finance
- Education
- Standard Library
Matrix
Matrix
“矩阵”。大家应该学过吧?
[ 1 2 -5 ] [ 2 4 6 ] [ 3 1 7 ] 其中 A1,1 = 1 A1,2 = 2 A1,3 = -5 A2,1 = 2 A2,2 = 4 A2,3 = 6 A3,1 = 3 A3,2 = 1 A3,3 = 7
一个矩阵由许多个数字构成,排列整齐,呈现矩形。我们习惯把数字改称为“元素 element”。
水平一整条元素叫做 row,垂直一整条元素叫做 column。元素的编号,先编 row,次编 column。
Matrix 资料结构
第一种方式,用一个二维阵列当作矩阵。如果你喜欢的话,也可以用一维阵列当作矩阵,然后自己算索引值。
另一种方式,把矩阵元素一个一个列出来。如果矩阵元素为零则不列出来。就这麽简单。
UVa 10855 11360 11149
Linear Transformation
好久好久以前,矩阵是用来存放大量数字的。然而自从线性代数开始流行之后,矩阵的地位完全改变了──矩阵其实是函数。
一个函数,仅由变数的加减、变数的倍率所组成,称作“线性变换”。
【注:照理应该称作“线性函数”,不过这个词彙已经被古人当作是“函数图形是直线的函数”,只好另起一名。】
是线性变换的例子: f(x,y,z) = 1 x + 2 y - 5 z f(x,y,z) = 1 x + (2 y - 5 z) * 2 乘开就是了 不是线性变换的例子: f(x,y) = xy 不包含变数乘法 f(x) = x² 不包含变数乘法 f(x,y) = x / y 不包含变数除法 f(x) = sqrt(x) 不包含变数的其他运算 f(x) = x + 2 不包含常数项 可以套用线性变换作为模型的例子: f(x) = 1 x + 2 x² - 5 x³ 把 x² 与 x³ 重新看作是变数 y 和 z f(x) = x + 2 2 后面乘上一个变数 y,让 y 永远是 1
人类习惯将线性变换呈现为矩阵的模样。
f(x,y,z) = 1 x + 2 y - 5 z [ x ] f(x,y,z) = [ 1 2 -5 ] [ y ] [ z ] 通常会把各个变数改名成 x₁ x₂ x₃ ... 所有输入变数拼在一起,成为一个向量 x 输出变数叫做 y [ x₁ ] y = [ 1 2 -5 ] [ x₂ ] [ x₃ ] y = A x y = f ( x )
一般提到函数,输入可以是多重变数,但是输出一定是单一变数。一旦有了矩阵相助,输入与输出都可以是多重变数。
[ y₁ ] [ 1 2 -5 ] [ x₁ ] [ y₂ ] = [ 2 4 6 ] [ x₂ ] [ y₃ ] [ 3 1 7 ] [ x₃ ] y = A x y = f ( x )
约定俗成,我们会把 x 与 y 排列成向量,而非矩阵。如此一来,只要知道了线性变换的矩阵,就能完全确定函数的变数有多少个、完全确定函数是什麽。
输出变数、输入变数排列成矩阵: [ y₁ y₃ ] [ 1 2 -5 ] [ x₁ x₄ ] [ y₂ y₄ ] = [ 2 4 6 ] [ x₂ x₅ ] [ x₃ x₆ ] y = A x y = f ( x ) 输出变数、输入变数排列成向量: [ y₁ ] [ 1 2 -5 ] [ x₁ ] [ y₂ ] = [ 2 4 6 ] [ x₂ ] [ x₃ ] y = A x y = f ( x )
一个矩阵就代表一个函数、一个线性变换。
A x ⇔ f(x) A ⇔ f 省略 x 的部分
Linear Transformation 的排版方式
线性变换的排版方式,源自于线性方程组的排版方式。
遥想当年,古人为了节省纸张空间,尝试用矩阵表示线性方程组,并且抽出变数排成直的。
{ 1 x + 2 y - 5 z = 5 [ 1 2 -5 ] [ x ] [ 5 ] { 2 x + 4 y - 6 z = 1 ===> [ 2 4 6 ] [ y ] = [ 1 ] { 3 x + 1 y - 7 z = 4 [ 3 1 7 ] [ z ] [ 4 ]
于是线性变换的排版方式,就模仿了这个排版方式。
因为这个排版方式,让高斯消去法,变成横的相消。
因为这个排版方式,让向量变成直的。
因为这个排版方式,让线性变换,变成横的配直的。
因为这个排版方式,让矩阵乘法,变成横的配直的。
因为这个排版方式,连续的线性变换,是从式子的右端到左端。
因为这个排版方式,有些线性代数课本劈头就介绍线性方程组,讲解一堆解方程式的技巧。然而线性方程组跟线性变换其实是两码子事,不适合参杂在一起。
Matrix Operation
矩阵运算本质上是函数运算,又额外增加了许多细项。
求值 evaluation 求解 resolution (除法 division) 加法 addition 减法 subtraction 倍率 scaling 複合 composition (乘法 multiplication) 分解 decomposition 叠代 iteration (次方 exponentiation) 反函数 inverse 转置 transpose 秩 rank 行列式 determinant 迹 trace 积和式 permanent 微分 differentiation 范数 norm 梯度 gradient
求值
A x ⇔ f(x)
Basis
Linear Transformation 的第一种观点
数学家发明了两种看待线性变换的观点:一种是矩阵切成直条、另一种是矩阵切成横条。先谈直条吧!
[ y₁ ] [ 1 2 -5 ] [ x₁ ] [ y₂ ] = [ 2 4 6 ] [ x₂ ] [ y₃ ] [ 3 1 7 ] [ x₃ ] [ 1 ] [ 2 ] [ -5 ] = [ 2 ] ⋅ x₁ + [ 4 ] ⋅ x₂ + [ 6 ] ⋅ x₃ [ 3 ] [ 1 ] [ 7 ]
外观看起来,彷彿是向量乘上倍率、再相加。我想大家已经相当熟悉向量的作图方式了。
以这些向量当作座标轴,画出座标格线。“向量乘上倍率、再相加”就变成了数格子。
线性变换可以看成:给定座标轴、座标值,然后求向量。座标轴是矩阵裡面的各个向量,座标值是输入向量。
有时候座标轴刚好是零向量、共线、共面、共空间、……,无法画出座标格线。儘管如此,线性变换仍然可以朦胧地看成:给定座标轴、座标值,然后求向量。
这样的座标轴,称做“基底 basis”。
Inverse
“反函数”。一般是入境随俗翻译为“反矩阵”。求反矩阵的演算法,请参考“ 高斯消去法 ”。
[ 1 2 -5 ] inverse [ 22/80 -19/80 32/80 ] [ 2 4 6 ] --------> [ 4/80 22/80 -16/80 ] [ 3 1 7 ] <-------- 0="" 5="" 80="" [="" -10="" ]="" inverse="" a="" a⁻¹="" <="" pre="">
採用第一种观点,反矩阵可以看成是:以原本矩阵的直条当作座标轴,给定座标轴、向量,然后求座标值。
y = A⁻¹ x
Inverse 的存在条件
原函数拥有反函数的条件是一对一函数:
一、输入与输出一样多。
二、不同输入得到不同输出。
原函数是如此,反函数亦是如此。
原矩阵拥有反矩阵的条件也是一对一函数:
一、输入变数与输出变数一样多。矩阵是方阵。
二、座标轴没有零向量、共线、共面、共空间、……,得以顺利画出座标格线,让不同座标值得到不同向量。
简单来说:一个座标轴产生一个维度,必须刚好产生所有维度。
原矩阵是如此,反矩阵亦是如此。
Linear Transformation 的第二种观点
[ y₁ ] [ 1 2 -5 ] [ x₁ ] [ y₂ ] = [ 2 4 6 ] [ x₂ ] [ y₃ ] [ 3 1 7 ] [ x₃ ] [ (1 2 -5) ∙ (x₁ x₂ x₃) ] = [ (2 4 6) ∙ (x₁ x₂ x₃) ] [ (3 1 7) ∙ (x₁ x₂ x₃) ]
线性变换也可以看成:以横条当作座标轴,然后求出输入向量与各座标轴的“ 点积 ”。换句话说,就是输入向量在各座标轴上面的投影量、另乘上座标轴长度。
因为已经规定直条是座标轴,所以横条当作座标轴挺彆扭。数学家就想到,把矩阵翻转一下、继续讨论。
Transpose
“转置矩阵”。以左上右下对角线为对称轴,所有矩阵元素对称地调换位置。也可以想成是横的变直的。也可以想成是直的变横的。
[ 1 2 -5 ] transpose [ 1 2 3 ] [ 2 4 6 ] ----------> [ 2 4 1 ] [ 3 1 7 ] <---------- 6="" 7="" [="" -5="" ]="" transpose="" a="" aᵀ="" <="" pre="">
[ 1 2 3 ] transpose [ 1 0 9 5 ] [ 0 0 7 ] ----------> [ 2 0 8 4 ] [ 9 8 7 ] <---------- 3="" 4="" 5="" 6="" 7="" [="" ]="" transpose="" a="" aᵀ="" <="" pre="">
採用第二种观点,转置矩阵可以看成:以原本矩阵的直条当作座标轴,将输入向量分别投影到各座标轴,求投影量(另乘上座标轴长度)。
y = Aᵀ x
UVa 10895 11349
Inverse 与 Transpose 的差别
转置矩阵跟反矩阵有些相似,主要有三个地方不同:
一、转置矩阵是垂直投影;反矩阵是沿著座标轴平行投影。
二、转置矩阵的输出,受到座标轴的单位长度影响,单位长度越长则输出数值越大;反矩阵刚好颠倒,是越小。
三、转置矩阵可以是一对一函数,也可以是收束的函数;反矩阵只能是一对一函数。
当转置矩阵和反矩阵一样的时候,座标轴必须互相垂直、座标轴的单位长度都是一、矩阵是方阵,就是所谓的(实数版本)正规正交矩阵 orthonormal matrix、(複数版本)么正矩阵 unitary matrix。此时转置矩阵和反矩阵都是垂直投影、都是在求座标值。
Transformation
Transformation
先前在计算几何领域,已经详细介绍过“ Transformation ”。本篇文章从线性变换的角度,再度介绍一次。顺便藉此机会,让读者更加瞭解线性变换的功效。
这些二维平面上的动作,其实都是线性变换,每种动作都有对应的矩阵。想要实施动作,那就乘上矩阵(函数的求值)。想要还原动作,那就乘上反矩阵(反函数)。想要实施一连串的动作,那就乘上一连串的矩阵。
new step 3 step 2 step 1 original coordinate rotate scale shear coordinate [ x' ] = [ cos45° -sin45° ] [ 2 0 ] [ 1 1 ] [ x ] [ y' ] [ sin45° cos45° ] [ 0 3 ] [ 0 1 ] [ y ]
甚至可以预先把一连串的矩阵相乘起来(函数的複合),变成一个矩阵,一个矩阵就能代表一连串的动作,相当方便!
new step 1 & 2 & 3 original coordinate shear, scale, rotate coordinate [ x' ] = [ 2cos45° 2cos45°-3sin45° ] [ x ] [ y' ] [ 2sin45° 2sin45°+3cos45° ] [ y ]
以座标轴的观点来思考
线性变换常常用座标轴的观点来思考。以座标轴为主角,缩放、旋转、投影这些动作其实都是在改动座标轴。
先从最基础的纹风不动开始介绍起吧!以原点为中心,座标轴方向设定为 X 轴正向和 Y 轴正向,座标轴长度是 1。
[ 1 0 ] [ 0 1 ]
Scale
“缩放”,以原点为中心,缩放座标轴。X 轴、Y 轴可以分别缩放不同倍率。
[ sx 0 ] [ 0 sy ]
Shear(Skew)
“歪斜”,以原点为中心,改变其中一个座标轴。
[ 1 0 ] upward / downward [ ty 1 ] [ 1 tx ] rightward / leftward [ 0 1 ]
另一种方式是设定歪斜角度。
[ 1 0 ] upward / downward [ tanθ 1 ] [ 1 tanθ ] rightward / leftward [ 0 1 ]
Rotate
“旋转”,以原点为中心,旋转座标轴。
[ cosθ -sinθ ] [ sinθ cosθ ]
Project
“投影”,一个座标轴当作投影线,另一个座标轴变成零向量。
[ 1 0 ] [ 0 0 ]
Reflect
“镜射”,一个座标轴当作对称线,另一个座标轴颠倒方向。
[ 1 0 ] [ 0 -1 ]
Translate
“位移”不是线性变换!不过“位移”可以套用线性变换:座标增加一个维度,数值固定为 1;矩阵增加一个维度,将位移量填在新维度。
用几何的角度解释,就是把二维位移变成三维歪斜:将原本的 xy 平面固定放在 z=1 的高度,沿著平面滑动。
[ x' ] [ 1 0 tx ] [ x ] [ y' ] = [ 0 1 ty ] [ y ] [ 1 ] [ 0 0 1 ] [ 1 ]
前面介绍的矩阵,通通跟著改成三维,如此一来位移矩阵就能和其他矩阵相乘了。增加一个维度,以便让位移融入大团体──这个手法称作“齐次座标 Homogeneous Coordinates”。
线性变换、位移,合称“仿射变换 Affine Transformation”。
Unitary Matrix
Indentity Matrix
“单位矩阵”。第一座标轴的第一个值是 1,其馀是 0;第二座标轴的第二个值是 1,其馀是 0;以此类推。它是标准的座标轴。
所有向量经过单位矩阵变换之后,纹风不动,完全不变。(identity 是指相同个体。)
逆向变换(反矩阵)显然还是单位矩阵,不必另外计算。
Orthonormal Matrix / Unitary Matrix
“正规正交矩阵”是实数版本。“么正矩阵”是複数版本。
座标轴长度皆为 1、互相垂直。(ortho-是指垂直,normal 是指一单位量,unitary 是指基本单元。)
想要判断一个矩阵是不是正规正交矩阵、么正矩阵,可以利用点积:长度为 1,自己与自己的点积为 1;互相垂直,点积为 0。
所有向量们经过正规正交矩阵、么正矩阵变换之后,长度不变、夹角不变。即是形状不变。相当好用!
逆向变换(反矩阵)恰好是转置,不必另外以高斯消去法计算。
举例来说,单位矩阵、旋转矩阵、镜射矩阵是正规正交矩阵,缩放矩阵、歪斜矩阵、投影矩阵不是正规正交矩阵(除非恰好等于单位矩阵)。
正规正交矩阵的功效是旋转暨镜射。
Rank
座标轴所构成的超平行体的维度。消除导致零向量、共线、共面、共空间、……的座标轴,剩下的座标轴数量就是维度。
尝试将各个座标轴乘上倍率、互相加减抵消,就能消除多馀的座标轴了。通常会有许多种消除方式。
Rank 相关定理
rank(AB) ≤ min(rank(A), rank(B))。矩阵複合,消失的维度回不来了。
rank(A⁻¹) = N。反矩阵的条件就是座标轴必须刚好产生所有维度,维度显然是 N。前提是有反矩阵。
rank(Aᵀ) = rank(A)。矩阵转置,维度一样。
Determinant
座标轴所构成的超平行体的容积。一维是长度、二维是平行四边形的面积、三维是平行六面体的体积。
一、消灭分量,令座标轴互相垂直,此时所有座标轴的长度相乘,就是容积。简单来说,这就是中学数学“底乘以高”的概念。
二、座标轴所构成的维度、即超平行体的维度,必须跟空间维度一致,否则容积被定义为 0。这跟反矩阵的条件是一样的。
当座标轴有零向量、共线、共面、共空间、……,容积是 0。当座标轴数量大于或小于空间维度,容积是 0。只有 N×N 方阵、且 rank 为 N,才有讨论意义。
因此 inverse、rank、determinant 总是被相提并论:有反矩阵,维度是 N,容积不是 0;无反矩阵,维度小于 N,容积是 0。
三、容积有正负号。当其中一个座标轴颠倒方向,容积将变号。当其中两个座标轴交换次序,容积将变号。
举例来说,单位矩阵的容积是 1。正规正交矩阵、么正矩阵可能是 1、可能是-1。旋转矩阵是 1。镜射矩阵是-1。缩放矩阵、歪斜矩阵是左上右下对角线元素的乘积。投影矩阵是 0。
Determinant 相关定理
det(AB) = det(A) det(B)。矩阵複合,容积相乘。
det(A⁻¹) = 1/det(A)。反矩阵的容积是倒数。如果有反矩阵的话。
det(Aᵀ) = det(A)。矩阵转置之后,容积不变!几何意义:依序取出每个向量的 X 座标组成一个新向量、依序取出每个向量的 Y 座标组成一个新向量、……,所形成的容积仍然相同!我想不出直观的证明方式,也想不出如何应用。
求得 Rank 和 Determinant
消灭分量,令座标轴互相垂直,以求得容积与维度。例如稍后提到的“QR 分解”可以求得容积与维度。
另外,转置矩阵的容积与维度不变,于是原本矩阵的横条,亦得视作座标轴。这使得“ 高斯消去法 ”也可以求得容积与维度。
另外,由于高斯消去法的关係,容积、维度、反矩阵经常被联繫到线性方程组的唯一解、多解、无解判定。
Timus 1041
QR Decomposition
把一个矩阵的座标轴扳成互相垂直的单位向量,让座标轴长得正、长得帅。
把一个矩阵 A 分解成矩阵 Q 与矩阵 R 的乘积,A = QR。Q 是互相垂直的单位向量(么正矩阵),R 是扳动量(上三角矩阵)。
演算法(Gram-Schmidt Orthonormalization)
https://en.wikipedia.org/wiki/Gram–Schmidt_process
一、从中随便挑出一个向量(通常是第一个,以便让 R 成为上三角矩阵), 作为第一座标轴,向量长度调整成 1。 二、所有剩馀向量们,各自减掉在第一座标轴上的分量,彻底消灭该维度。 所有剩馀向量们,现在显然都垂直于第一座标轴。 三、所有剩馀向量们,递迴处理下去。
藉由投影、相减、缩放,逐步调整矩阵 A 的每个向量,直到变成正规正交矩阵 Q。
时间複杂度 O(N^3)。
演算法(Householder Triangularization)
http://faculty.ucmerced.edu/mhyang/course/eecs275/lectures/lecture12.pdf
镜射矩阵有一个特殊用处,把一个向量镜射到标准座标轴上(镜子位于角平分线),让该向量变成只有一个元素有值(其值是向量长度),其馀元素都是零。
不断套用镜射矩阵,逐步调整矩阵 A 的每个向量,直到变成上三角矩阵 R。优点是向量的长度变化比较少、误差比较小。
时间複杂度 O(N^3)。
演算法(Givens Triangularization)
http://www.cs.nthu.edu.tw/~cherung/teaching/2011anm/note07.pdf
Givens 旋转:在标准座标轴当中,选择其中两个轴,在其平面上旋转。
不断套用 Givens 旋转矩阵,逐步调整矩阵 A 的每个向量,直到变成上三角矩阵 R。优点是容易设计平行演算法。
时间複杂度 O(N^3)。
Polar Decomposition
把一个矩阵 A 分解成矩阵 U 与矩阵 P 的乘积,A = UP。U 是互相垂直的单位向量(么正矩阵)。P 是非负的缩放倍率(正半定矩阵)。
U 是旋转暨镜射,P 是缩放。P 设定为正半定矩阵,是为了把镜射(缩放倍率为负值)的部分,硬是移动到 U。
【待补文字】
Eigenbasis (I)
Function
本站文件“ Function ”,介绍了“输入有很多个变数,输出只有一个变数”的函数,也画出了函数图形。
此处要介绍“输入有很多个变数,输出有很多个变数”的函数,并且画出函数图形。
此处以ℝ² ⇨ ℝ²函数为例,输入是两个变数、输出是两个变数的函数,可以画在二维平面上。因为绘图结果往往是一片满,看不出任何意义,所以把输入改成等距取样、保持间隔。
Linear Transformation
线性变换是一种特别的函数,函数图形有著一种难以言喻的整齐。有时是一致朝外,有时是一致螺旋。
这样的函数图形,可以用来解释真实世界的物理现象!例如磁场、气旋等等。甚至数学家还把输入输出推广到複数,发明“複变函数”的学问,发掘更多样化的函数图形──不过这是后话了。先让我们专注于线性变换吧!
Linear Transformation 的本质:朝著目标向前进
整齐的原因是什麽呢?数学家已经初步解决了这个问题!
数学家猜测,所谓的整齐,也许是指:“大家有著共识,方向一致。”再进一步猜测:“这当中有没有堪称表率,让大家群起效尤的输入输出呢?是不是有人一路以来始终如一,坚持走在正确的道路上?”于是数学家尝试寻找:“有哪些输入向量,经过线性变换之后,方向保持不变。”
Eigenvector 与 Eigenvalue
数学家尝试解 A x = λ x 这道式子。A 是线性变换;x 是向量,方向保持不变,称作“特徵向量 eigenvector”;λ是缩放倍率,称作“特徵值 eigenvalue”。
A x = λ x,移项得 A x - λ x = 0,合併得(A - λI) x = 0。
如果是唯一解,得到 x 是零向量。缺乏讨论意义。
如果要有其他解,那麽令 det(A - λI) = 0。把 det(A - λI) 展开,形成λ的多项式,称作“特徵多项式 characteristic polynomial”。特徵多项式求根,即得λ。
求得 eigenvalue,代入到(A - λI) x = 0,求得 eigenvector。
A = [ 1 -1 ] A - λI = [ (1-λ) -1 ] det(A - λI) = 0 [ 2 4 ] [ 2 (4-λ) ] => (1-λ)(4-λ) + 2 = 0 => λλ - 5λ + 6 = 0 => λ = 2 or 3 when eigenvalue λ = 2 | when eigenvalue λ = 3 | (A - λI) x = 0 | (A - λI) x = 0 | [ (1-2) -1 ] [x₁] = [0] | [ (1-3) -1 ] [x₁] = [0] [ 2 (4-2) ] [x₂] [0] | [ 2 (4-3) ] [x₂] [0] | get { x₁ = 1k | get { x₁ = -1k { x₂ = 1k | { x₂ = 2k | then eigenvector x = [-1] | then eigenvector x = [-1] [ 1] | [ 2]
eigenvector 的任何一种倍率也都是 eigenvector。大家习惯取长度为 1 的 eigenvector 当作代表,方向则是随意。
如果有许多个 eigenvector 拥有相同的 eigenvalue,那麽这些 eigenvector 构成的平面、空间、……当中的任何一个向量都是 eigenvector。大家习惯取互相垂直的 eigenvector 当作代表,方向则是随意。
eigenvector 的推导过程冗长複杂,不太讨喜。然而数学家尚未想到其他导致整齐的原因,也说不定没有其他原因了。因此大家很重视 eigenvector,所有线性代数的课本都会仔细介绍 eigenvector。
特殊现象
一、eigenvector 不存在。
例如歪斜矩阵,eigenvector 不足 N 个。
二、eigenvalue 必是 N 个。
数学家藉由 determinant 与 characteristic polynomial 来定义 eigenvalue。N 次多项式必有 N 个根,必得 N 个 eigenvalue。这个定义方式,有时候产生了多馀的 eigenvalue。
例如歪斜矩阵,eigenvector 不足 N 个,eigenvalue 却是 N 个。
三、eigenvector 存在,但是是複数。
根据定义,数学家硬是算出複数的 eigenvalue,进一步得到複数的 eigenvector。
例如旋转矩阵,eigenvector 确实存在,即便没有任何缩放、即便无法作图。
特徵向量演算法(Characteristic Polynomial)
多项式求根。请参考“ Root Finding ”。
然而无法克服:一、根的范围完全不明;二、根可能是複数。
Eigenbasis (II)
Linear Transformation 的本质:缩放与旋转
首先讨论 eigenvalue 为实数。
当输入向量等于 eigenvector 的方向,那麽输出向量就是输入向量乘上 eigenvalue,方向保持不变。
当输入向量不是 eigenvector 的方向,此时可以运用分量的概念:Ax = A(x₁+x₂) = Ax₁ + Ax₂。输入向量,求出在 eigenvector 上面的分量,各个分量各自按照 eigenvalue 缩放,再合而为一,得到输出向量。
最后得到非常重要的结论:线性变换的本质,是在特徵向量上面,根据特徵值来缩放!
接著讨论 eigenvalue 为虚数。
老实说,我不懂,就略过吧。一般大家认为其效果是旋转。
矩阵次方
实施线性变换,eigenvalue 为实数,效果是缩放。eigenvalue 为虚数,效果是旋转。eigenvalue 为零,效果是消灭分量。eigenvalue 为负数,效果是翻转分量。
反覆实施线性变换,eigenvalue 绝对值小于一的方向趋近零,eigenvalue 绝对值等于一的方向保持不动,eigenvalue 绝对值大于一的方向趋近无限大。绝对值越小就缩短越快,绝对值越大就伸长越快,输入向量将渐渐偏向绝对值最大的方向。
eigenvalue 是负数,将不断来回翻转、来回跳跃,但是整体趋势仍与正数相同。
反覆实施线性变换,有时收敛至某处,有时发散至正负无限大、有时不断绕圈,端看起点在哪裡。
A = [ a b ] p₀ = [ x₁ ] p₁ = [ y₁ ] [ c d ] [ x₂ ] [ y₂ ] eigenvalues of A = {λ₁, λ₂} let |λ₁| ≥ |λ₂| 考虑 A p₀ = p₁的过程,观察特徵向量的影响力。 解 [ 1 1 ] [ m₁ ] = [ x₁ ] = [ x₁ ] --> p₀ [ λ₁ λ₂ ] [ m₂ ] [ y₁ ] [ ax₁ + bx₂ ] --> A p₀ = p₁ x₁ 分别在两个特徵向量的分量,座标是 m₁ m₂。 解 [ 1 1 ] [ n₁ ] = [ x₂ ] = [ x₂ ] --> p₀ [ λ₁ λ₂ ] [ n₂ ] [ y₂ ] [ cx₁ + dx₂ ] --> A p₀ = p₁ x₂ 分别在两个特徵向量的分量,座标是 n₁ n₂。 因为最后一定是朝向 eigenvalue 绝对值最大的 eigenvector 方向, 所以要判断 x₁ 最终朝向哪个方向,只需看 m₁ 的正负号。 所以要判断 x₂ 最终朝向哪个方向,只需看 n₁ 的正负号。
UVa 720
Trace-Determinant Diagram
以 trace 和 determinant 判断流向。
特徵向量演算法(Power Iteration)
只能求出绝对值最大的 eigenvalue 及其 eigenvector。
然而无法克服:一、根的范围完全不明;二、根可能是複数。
递推法。反覆实施线性变换,只要实施足够次数(矩阵次方,次方值足够大),就会朝向 eigenvalue 的绝对值最大的 eigenvector 的方向。
反覆实施线性变换,向量可能越来越长、越来越短,超出浮点数范围。解法是每一步骤都将向量长度缩放为 1。
时间複杂度 O(N^2 * K),N 是矩阵大小,K 是叠代次数。
收敛速度,跟最大、次大特徵值的绝对值的比值|λ₁|/|λ₂|有关。比值越大,收敛速度越快。
很幸运的,我们可以调整特徵值。当矩阵的对角线加上同一个值,则特徵值们恰好都加上同一个值。(A + aI)x = Ax + ax = λx + ax = (λ + a)x。
我们可以调整特徵值,藉以提高比值,增加收敛速度,减少叠代次数。
特徵向量演算法(Inverse Iteration)
以 Power Iteration 找出所有的 eigenvalue 及其 eigenvector。
然而无法克服:一、根的范围完全不明;二、根可能是複数。
时间複杂度是 N 次 Power Iteration 的时间。
eigenvalues of A: λ₁, λ₂, λ₃, ... let |λ₁| ≥ |λ₂| ≥ |λ₃| ≥ ... let B = (A - αI)⁻¹ eigenvalue of B: 1/(λ₁-α) , 1/(λ₂-α) , 1/(λ₃-α) ... α猜得准,会让 1/(λ-α) 变很大,成为 B 的λ₁。 此时套用 Power Iteration 即可得到 1/(λ-α)。 xk+1 = B xk = (A - αI)⁻¹ xk 此处化作 (A - αI) xk+1 = xk 即可採用 LU Decomposition。 叠代一次的时间複杂度从 O(N^3) 降为 O(N^2)。
Eigenbasis (III)
Eigendecomposition
(Spectral Decomposition)(Diagonalization)
线性变换的本质,拆成三个步骤,尝试改成矩阵:
一、“输入向量,求出在 eigenvector 上面的分量”:套用反矩阵,座标轴是特徵向量。 二、“各个分量各自按照 eigenvalue 缩放”:套用缩放矩阵,缩放比例是特徵值。 三、“各个分量合而为一,得到输出向量”:套用矩阵,座标轴是特徵向量。
[ 1 2 5 ] eigendecomposition [ X X X ] [ X 0 0 ] [ X X X ] [ 2 4 6 ] -------------------> [ X X X ] [ 0 X 0 ] [ X X X ] [ 3 1 7 ] [ X X X ] [ 0 0 X ] [ X X X ] A E D E⁻¹
写成数学式子就是 A = EDE⁻¹。E 是特徵向量(必须有反矩阵)(可逆矩阵),D 是特徵值(缩放矩阵)(对角线矩阵)。
这称作“特徵分解”或“频谱分解”或“对角化”。
Eigendecomposition 的存在条件
第一步骤使用了反矩阵。也就是说,特徵向量构成的矩阵,必须拥有反矩阵。至于反矩阵的存在条件,请参考前面章节。另外再介绍两个形容词:
invertable:可逆。原矩阵有反矩阵。 diagonalizable:可对角化。可特徵分解。原矩阵可找到一组特徵向量有反矩阵。
举例来说,单位矩阵、旋转矩阵、镜射矩阵、缩放矩阵、投影矩阵可以特徵分解,歪斜矩阵不可以特徵分解。
矩阵次方
同样的矩阵,同样的特徵向量,不必反覆套用反矩阵、矩阵,只要连乘特徵值即可。
A = EDE⁻¹ A² = EDE⁻¹EDE⁻¹ = ED²E⁻¹ A³ = EDE⁻¹EDE⁻¹EDE⁻¹ = ED³E⁻¹
Eigenbasis (IV)(Under Construction!)
Change of Basis
A = MSM⁻¹。M 是任意矩阵(可逆矩阵),S 是某个矩阵(相似矩阵)。
建立一组座标轴,然后把原本矩阵放到这个座标轴上面来看。
相似矩阵是功能完全一样的矩阵,仅仅座标轴不同。
Hessenberg Decomposition 与 Schur Decomposition
A = QHQ⁻¹。H 是上三角暨次对角线矩阵,Q 是么正矩阵。
A = QUQ⁻¹。U 是上三角矩阵,Q 是么正矩阵。
这两个分解,是用来设计演算法、求得特徵值、完成特徵分解。对数学家来说是鸡肋,但是对计算学家来说却是好工具。
特徵向量演算法(QR Iteration)
原本矩阵,透过变换基底的技巧,逐渐变成上三角矩阵。原本矩阵的特徵值就是上三角矩阵的特徵值,而上三角矩阵的对角线正是特徵值。
try to converge to upper-triangle matrix. but usually fails. when A is real symmetric matrix (which has orthonormal eigenbasis). QR iteration will try to converge to diagonal matrix. fortunately Q is eigenbasis.
Ak = Qk Rk Ak+1 = Rk Qk = Qk⁻¹ Ak Qk = Qkᵀ Ak Qk ^^^^^^^^^^^ change of basis Ak and Ak+1 are similar (change of basis). Their eigenvalues are same. per iteration O(n^3), total O(k * n^3).
特徵向量演算法(Hessenberg QR Iteration)
http://persson.berkeley.edu/18.335/lec14handout6pp.pdf
预先将矩阵转化成 Hessenberg Matrix,再实施 QR Iteration,比较容易收敛成上三角矩阵。
1. [Hessenberg Decomposition] run n-1 times Household transformation and get Hessenberg matrix. per iteration O(n^2), total O(n^3). (Household transformation: use reflection matrix as new basis) 2. [QR Iteration] use Hessenberg matrix run QR iteration and get upper-triangular matrix. per iteration O(n^2), total O(k* n^2). (during iterations, always keeps Hessenberg matrix.) (upper-triangular * hessenberg = hessenberg) (hessenberg * upper-triangular = hessenberg)
特徵向量演算法(Jacobi Iteration)
http://en.wikipedia.org/wiki/Jacobi_eigenvalue_algorithm
特徵向量演算法(Arnoldi Iteration)
for matrix: Arnoldi iteration for symmetric matrix: Lanczos iteration http://www.math.uzh.ch/?file&key1=22557
Av = λv Eigenvalues: λ1 λ2 ... λn Cayley-Hamilton theorem (A – λ1I) (A – λ2I) ... (A – λnI) = 0 Σ ci Ai = 0 for some ci 0~n A⁻¹ = Σ (–ci/c0) Ai–1 1~n Krylov subspace: Ax = b ===> x = A⁻¹ b x = span(b Ab A2b ... An-1b) = K(A, b)
特徵向量演算法(Rayleigh-Ritz Method)
https://en.wikipedia.org/wiki/Rayleigh–Ritz_method
Eigenbasis (V)(Under Construction!)
Singular Value Decomposition(SVD)
if matrix cannot eigendecomposition, we use SVD to get real eigenbasis. for example: non-symmetric real matrix (complex eigenbasis) for example: non-square matrix AAᵀ is symmetric matrix, which eigenbasis is orthonormal/unitary basis AᵀA is symmetric matrix, which eigenbasis is orthonormal/unitary basis basis no1 is orthonormal/unitary matrix. (dimension reduction) basis no2 is orthonormal/unitary matrix. (dimension extension) change to diagonal matrix: square root of eigenvalues, called singular values.
T A = U Σ V T T T T T T A A = V Σ U U Σ V = V ( Σ Σ ) V T T T T T T A A = U Σ V V Σ U = U ( Σ Σ ) U T T get V and U by eigendecomposition of A A and A A T T Σ = sqrt( Σ Σ ) = sqrt ( Σ Σ )
快速演算法,不必计算 AᵀA 和 AAᵀ。
http://www.cs.utexas.edu/users/inderjit/public_papers/HLA_SVD.pdf
Jordan Decomposition
http://math.stackexchange.com/questions/193460/
线性代数的本质:缩放与座标轴对调。
ring。
UVa 10753
Eigenvector 与 Eigenvalue 的相关定理
eigenvalue 的乘积是 determinant。
eigenvalue 皆不为零则有 inverse。
eigen(QA) ≠ eigen(A)。任意矩阵经过么正矩阵转换,特徵向量和特徵值都会改变。除非遇到特例。
eigen(AB) ≠ eigen(A) eigen(B)。矩阵複合,那就改变更多。除非遇到特例。
eigenvector(A²) = eigenvector(A)。连续变换两次,特徵向量一样,特徵值连乘两次。
eigenvector(A⁻¹) = eigenvector(A)。反矩阵,伸与缩颠倒,特徵向量一样,特徵值变倒数。
eigenvalue(Aᵀ) = eigenvalue(A)。转置矩阵,特徵向量改变,但是特徵值一样。我想不出直观的解释方式。大家都是间接透过 determinant 来证明。
特殊矩阵
(複数版本)么正矩阵 unitary matrix:特徵向量形成么正矩阵,特徵值的绝对值都是 1。
(实数版本)正规正交矩阵 orthonormal matrix:特徵向量形成正规正交矩阵,特徵值的绝对值都是 1。注意到特徵值可为複数,例如旋转矩阵。
unitary matrix A : A* = A⁻¹ orthonormal matrix A: Aᵀ = A⁻¹
(複数版本)共轭对称矩阵 Hermitian matrix:特徵向量形成么正矩阵,特徵值都是实数。
(实数版本)对称矩阵 symmetric matrix:特徵向量形成正规正交矩阵,特徵值都是实数。
Hermitian matrix A : A* = A symmetric matrix A : Aᵀ = A
(複数版本)反共轭对称矩阵 skew-Hermitian matrix:特徵向量形成么正矩阵,特徵值都是虚数。
(实数版本)反对称矩阵 skew-symmetric matrix:特徵向量形成正规正交矩阵,特徵值都是虚数。
skew-Hermitian matrix A : A* = -A skew-symmetric matrix A : Aᵀ = -A
正规矩阵 normal matrix:特徵向量形成么正矩阵。
normal matrix A : A* A = A A*
正半定矩阵 positive-semidefinite matrix:特徵值都是正数或零。
正定矩阵 positive-definite matrix:特徵值都是正数。
positive-semidefinite matrix A : A = M* M positive-definite matrix A : A = M* M and M⁻¹ exists
positive-semidefinite matrix A : x*Ax ≥ 0 positive-definite matrix A : x*Ax > 0 when x ≠ 0
可交换矩阵 commuting matrices:特徵向量相同。
commuting matrices A and B : AB = BA
相似矩阵 similar matrices:特徵值相同。这是单向推论。例外是单位矩阵和歪斜矩阵,特徵值都是两个 1,但是不相似。
similar matrices A and B : A = M⁻¹ B M
对角线矩阵 diagonal matrix:特徵向量即是矩阵本身,特徵值即是对角线。这是单向推论。
diagonal matrix A : Ai,j = 0 when i ≠ j
三角矩阵 triangular matrix:特徵值即是对角线。这是单向推论。
upper triangular matrix A : Ai,j = 0 when i > j lower triangular matrix A : Ai,j = 0 when i < j
Transformation(Under Construction!)
Transformation
先前介绍一个向量的变换,现在介绍多个向量的变换。
本篇文章从线性变换的角度,简单介绍一次。顺便藉此机会,让读者更加瞭解特徵基底的功效。之后于“ Representation ”章节将详细介绍。
Principal Component Analysis
Independent Component Analysis
Principal Component Pursuit
Positive-definite Matrix(Under Construction!)
微分
矩阵是函数,当然也有微分运算。
一个线性函数,对各个变数微分。得到多个导数。
∂f ∂f ∂f f = (x₀ + x₁ + x₂) ――― = 1 ――― = 1 ――― = 1 ∂x₀ ∂x₁ ∂x₂ ∂f ∂f ∂f f = (c₀x₀ + c₁x₁ + c₂x₂) ――― = c₀ ――― = c₁ ――― = c₂ ∂x₀ ∂x₁ ∂x₂
一个线性函数,对一整个向量微分。将导数们从上到下依序拼成一个向量。
[ x₀ ] f = (c₀x₀ + c₁x₁ + c₂x₂) x = [ x₁ ] [ x₂ ] ∂f [ ∂f/∂x₀ ] [ c₀ ] ―― = [ ∂f/∂x₁ ] = [ c₁ ] ∂x [ ∂f/∂x₂ ] [ c₂ ]
∂ T d ―― y x = y ---> ―― xy = y ∂x dx ∂ T d ―― x y = y ---> ―― yx = y ∂x dx ∂ T d 2 ―― x x = 2x ---> ―― x = 2x ∂x dx when A is ∂ T T symmetric d 2 ―― x A x = (A + A ) x ========= 2Ax ---> ―― ax = 2ax ∂x dx
多个线性函数,依序拼成一个向量,对整个向量微分。将导数们从左到右依序拼成一个矩阵。此即矩阵微分。
[ f₀ ] [ a₀x₀ + a₁x₁ + a₂x₂ ] [ a₀ a₁ a₂ ] [ f₁ ] [ b₀x₀ + b₁x₁ + b₂x₂ ] [ b₀ b₁ b₂ ] [ x₀ ] F = [ f₂ ] = [ c₀x₀ + c₁x₁ + c₂x₂ ] = [ c₀ c₁ c₂ ] [ x₁ ] [ f₃ ] [ d₀x₀ + d₁x₁ + d₂x₂ ] [ d₀ d₁ d₂ ] [ x₂ ] [ f₄ ] [ e₀x₀ + e₁x₁ + e₂x₂ ] [ e₀ e₁ e₂ ] A x ∂F ∂f₀ ∂f₁ ∂f₂ ∂f₃ ∂f₄ [ a₀ b₀ c₀ d₀ e₀ ] ―― = [ ――― ――― ――― ――― ――― ] = [ a₁ b₁ c₁ d₁ e₁ ] = J(F) ∂x ∂x ∂x ∂x ∂x ∂x [ a₂ b₂ c₂ d₂ e₂ ] ∂/∂x A x Aᵀ
∂ T d ―― A x = A ---> ―― ax = a ∂x dx ∂ T d ―― A x = A ---> ―― ax = a ∂x dx ∂ T d ―― (A x + b) = A ---> ―― (ax + b) = a ∂x dx ∂ T ∂ T T T T d ―― y A x = ―― (y A) x = (y A) = A y ---> ―― axy = ay ∂x ∂x dx
该矩阵是“多函数的一阶导数矩阵 Jacobian Matrix”。但是数学家却定义成此矩阵的转置,应该是古人没想清楚?
范数(长度)
定义长度的平方。向量所有元素的平方总和,等于向量点积。
定义微分连锁律。因为矩阵複合是从右到左,所以连锁律设定成从右到左。
定义长度的平方 T def₁: squared norm 2 (A x) (A x) ================== ‖Ax‖ 定义连锁律 ∂ 2 def₂: chain rule ∂ ∂ 2 T T ―― ‖Ax‖ ================ ―― Ax ――― (Ax) = (A )(2Ax) = 2 A A x ∂x ∂x ∂Ax 这两个定义的合理性,可由严谨的推导过程证明: T ∂ T ∂ T T ∂ T T A A 必定对称 T ―― (A x) (A x) = ―― x A A x = ―― x (A A) x ============ 2 A A x ∂x ∂x ∂x 当 A 退化为 I,依然合理: ∂ T ∂ 2 ―― x x = ―― ‖x‖ = 2x ∂x ∂x ∂ T ∂ T ∂ 2 T ―― x x = ―― (Ix) (Ix) = ―― ‖Ix‖ = 2 I I x = 2x ∂x ∂x ∂x
范例:Norm Optimization
2 minimize ‖Ax - b‖ ∂ 2 ―― ‖Ax - b‖ = 0 “一次微分等于零”的地方是极值、鞍点 ∂x 二次函数、开口向上,必是最小值 ∂ [ ―― (Ax - b) ] [ 2(Ax - b) ] = 0 微分连锁律 ∂x T A [ 2(Ax - b) ] = 0 微分 T T A A x = A b 同除以 2、展开、移项 T -1 T x = (A A) A b Normal Equation
主要用途是解线性方程组 Ax = b、线性迴归。
范例:Norm Optimization
2 2 minimize ‖Ax‖ subject to ‖x‖ = 1 2 2 minimize ‖Ax‖ - λ (‖x‖ - 1) Lagrange's multiplier ∂ 2 2 ―― [ ‖Ax‖ - λ (‖x‖ - 1) ] = 0 “一次微分等于零”的地方是极值、鞍点 ∂x T 2 A A x - 2 λ x = 0 展开 T T A A x = λ x 正解是 A A 最小的特徵值
以上结论是针对求最小值。亦可改成求最大值,结果类似。
主要用途是解线性方程组 Ax = 0、直线拟合。
梯度
函数的梯度(一次微分):函数对向量微分,得到向量。
函数的梯度的梯度(二次微分):再次对向量微分,得到矩阵。
∂f [ ∂f/∂x₀ ] ∇f = ―― = [ ∂f/∂x₁ ] ∂x [ ∂f/∂x₂ ] 2 ∂∇f ∂(∂f/∂x₀) ∂(∂f/∂x₁) ∂(∂f/∂x₂) ∇ f = ――― = [ ――――――――― ――――――――― ――――――――― ] ∂x ∂x ∂x ∂x [ ∂²f/∂x₀∂x₀ ∂²f/∂x₁∂x₀ ∂²f/∂x₂∂x₀ ] = [ ∂²f/∂x₀∂x₁ ∂²f/∂x₁∂x₁ ∂²f/∂x₂∂x₁ ] [ ∂²f/∂x₀∂x₂ ∂²f/∂x₁∂x₂ ∂²f/∂x₂∂x₂ ] = H(f) = J(∇f)
该矩阵是“单函数的二阶导数矩阵 Hessian matrix”。
该矩阵恰巧是“多函数的一阶导数矩阵 Jacobian Matrix”代入“函数的梯度”,然而这个观点似乎没有什麽用处。
范例:Newton Method
详情请参考“ Newton Method ”、“ Newton Method ”。
牛顿法求根:从座标(x, f(x)) 的地方画切线,与座标轴相交之处,做为下一个 x。 ∇f(x) (x - xnext) = f(x) 牛顿法多函数求根:多个函数形成一个向量。所有函数一齐实施牛顿法求根。 Jᵀ(f(x)) (x - xnext) = f(x) 牛顿法求极值:极值(与鞍点)出现在一次微分等于零的地方。 预先微分,再套用牛顿法多函数求根。 Hᵀ(f(x)) (x - xnext) = ∇f(x) 牛顿法多函数求极值:像这种要求,我这辈子没见过。
Taylor Expansion: 1 1 2 f(x + Δx) = f(x) + ―― f'(x) Δx + —— f"(x) Δx + ... 1! 2! 1 1 f(x + Δx) = f(x) + —— Jᵀ Δx + —— Δxᵀ Hᵀ Δx + ... 1! 2! n Δx projects onto basis, which is function gradient. textbook use different definition. textbook use transpose.
我的 Jacobian Matrix 有别于数学家的版本,因此我的牛顿法、泰勒展开式也有别于数学家的版本。我不知道我的版本是否合理。也许泰勒展开式应该解读成投影?
Positive-definite Matrix / Positive-semidefinite Matrix
“二次型”。x*Ax。
“正定矩阵”。x*Ax > 0,不讨论 x 是零向量。
“正半定矩阵”。x*Ax ≥ 0,不讨论 x 是零向量。
这是仿照多项式函数 ax² > 0 的概念,几何意义是位于 X 轴上方、开口朝上的抛物线。
函数推广到矩阵,输入变数、输出变数可以有很多个。例如两个变数的时候,就是仿照多项式函数 ax² + by² > 0 的概念,几何意义是椭圆。读者吃饱太閒可以複习一下高中数学的圆锥曲线,椭圆(係数为正数、多项式大于零)是其中一种可能性。
二次多项式推广到二次型之后,迸出了“对称”的概念。对称矩阵,几何意义是对称,例如椭圆。非对称矩阵,几何意义是不对称,例如蛋。简单起见,教科书通常只讨论实数对称正定方阵,书上只画了椭圆,没有蛋。
矩阵是线性函数,正定矩阵是线性函数暨凸函数!因此正定矩阵得以设计较快的“ Optimization ”演算法。
A-orthogonal
“矩阵正交”。y*Ax = 0。x*Ay = 0。其中一个成立,另一个就成立。
Ax 与 y 互相垂直;x 经过 A 转换之后,与 y 互相垂直。
知名范例是切线速度与加速度互相垂直,一次微分与二次微分互相垂直。
定义 y 与 Ax 的内积空间,A 必须是对称正定矩阵。内积空间开根号可以定义距离。
【待补文字】
范例:凸函数最佳化
A is symmetric and positive-definite T minimize x A x 2 subject to ‖x‖ = 1
T 2 minimize x A x - λ ( ‖x‖ - 1 ) Lagrange multiplier ∂ T 2 ―― [ x A x - λ ( ‖x‖ - 1 ) ] = 0 “一次微分等于零”的地方是极值、鞍点 ∂x 二次型,必为极值 2 A x - 2 λ x = 0 展开 A x = λ x 移项,形成特徵向量的格式
答案是最小的特徵值的特徵向量!
值得一提的是,x*Ax = proj_x Ax。当 x 是 A 的特徵向量,则 x*Ax 就是特徵值。
矩阵是线性函数,其特色是特徵向量不变。对称正定矩阵是线性函数暨对称凸函数,其特色是最大值、最小值位于最大的、最小的特徵向量。
http://freemind.pluskid.org/machine-learning/projected-gradient-method-and-lasso/ http://www.stats.ox.ac.uk/~lienart/blog_opti_pgd.html n->n 函数最佳化,其实就是求特徵值?这是 power iteration?
范例:Norm Optimization
given X and Y. find A. T maximize Y A X T subject to A A = I (A is othronormal)
T T T T minimize tr(Y AX) = tr(AXY ) = tr(AUΣV ) = tr(ΣV AU) T (XY is covariance matrix between dimensions) T A V U is othronormal => V AU is othronormal T V AU = I (diagonal elements are all +1) T A = V U
2 T ‖A‖ = tr(A A) tr(AB) = tr(BA)
范例:Norm Optimization
given X and Y. find A. T maximize Y A X T subject to A A = I (A is othronormal)
max tr( Q D ) 令 Q = I 以得到最大值
2-norm best projection -> 1-norm best eigenvalue。
PCA min Frobenius norm >>> min sqrt( trace(At A) ) min 2-norm of sigular values PCS min nuclear norm >>> min trace( sqrt(At A) ) min 1-norm of singular values
Matrix Polynomial(Under Construction!)
Cayley-Hamilton Theorem
特徵值,就是根!
Minimal Polynomial
“最小多项式”。
Companion Matrix
“共伴矩阵”。
basis is Krylov matrix. change to companion matrix.
http://homepages.laas.fr/henrion/aime@cz11/kukelova.pdf 多项式的根 ---> companion matrix 的特徵值 递迴多项式 ---> companion matrix 的次方 递迴多项式的公式解 ---> eigendecomposition
Nilpotent Matrix
“幂零矩阵”。A^k = 0。
Linear Recurrence
Recursive Function
递迴函数就是同一个函数複合好几次!
A recursive function f: f(0) = 5 f(x) = 2 * f(x-1) + 1 Let g(y) = 2 * y + 1 f(0) = 5 f(1) = g(5) f(2) = g(g(5)) f(3) = g(g(g(5)))
Linear Recurrence
线性递迴函数就是同一个线性函数複合好几次。
{ f(n) = a1 * f(n-1) + a2 * f(n-2) + ... + ak * f(n-k) when n > k { f(k) = ck { : : { f(2) = c2 { f(1) = c1
著名的例子是 Fibonacci Sequence:仅两项,係数皆是 1。
{ f(n) = f(n-1) + f(n-2) when n = 3, 4, 5, ..... { f(2) = 1 { f(1) = 1
{ f(1) = 1 { f(2) = 1 { f(3) = f(2) + f(1) { f(4) = f(3) + f(2) { f(5) = f(4) + f(3) { : : :
【注:recursion 和 recurrence,中文都翻译为“递迴”,然而两者意义大不相同,读者切莫混淆。】
演算法(Dynamic Programming)
由小到大一项一项慢慢算。採用“ 动态规划 ”,有许多种实作方式。时间複杂度为 O(N + (N-K) * K),可以简单写成 O(NK)。
Linear Algebra
Linear Algebra
数学家重视性质,以函数的加法性、函数的倍率性来定义“线性变换”。
计算学家重视数值,本站以变数的加减、变数的倍率的角度来介绍“线性变换”。
儘管本站的介绍方式比较直觉,却是非常偏颇的介绍方式。为了端正视听,以下简述数学家的介绍方式。完全是另外一种世界观。
Vector Space
“向量空间”由一个集合、两个运算组成。两个运算分别是加法运算、倍率运算。
集合,可以设定成实数、整数、馀数、多项式、向量、函数、……。
加法运算、倍率运算,泛指一切适当的运算。例如在实数当中,可以设定成实数加法与实数倍率,也可以设定成实数乘法与实数次方。设定方式通常不只一种。
为了釐清加法运算与倍率运算的责任,数学家做了详细规定:
向量空间之加法运算的规定 1. Associativity 加法结合律 u + (v + w) = (u + v) + w 2. Commutativity 加法交换律 u + v = v + u 3. Identity element 加法单位元素 v + 0 = v 4. Inverse element 加法反元素(负数与减法) v + (−v) = 0 向量空间之倍率运算的规定 5. Associativity 倍率结合律 a ⋅ (b ⋅ v) = (a ⋅ b) ⋅ v 6. Distributivity of vector sum 倍率分配律,针对向量部分 a ⋅ (u + v) = (a ⋅ u) + (a ⋅ v) 7. Distributivity of scalar sum 倍率分配律,针对倍率部分 (a + b) ⋅ v = (a ⋅ v) + (b ⋅ v) 8. Identity element 倍率单位元素 1 ⋅ v = v
符号 uvw0,代表数值,向量空间的集合的元素;符号 ab1,代表倍率,体的集合的元素;符号 01,泛指符合规定的元素,而且至少要有一个、必须存在。集合当中所有元素的所有配对方式,必须符合所有规定。
倍率运算的倍率,通常设定成“体 field”。体由一个集合、两个运算组成。两个运算分别是加法运算、乘法运算。数学家也做了详细规定,不过此处省略。
例如集合设定成多项式,加法运算设定成多项式加法,倍率运算设定成多项式倍率;倍率的集合设定成实数,倍率的加法运算设定成实数加法,倍率的乘法运算设定成实数乘法;0 是零多项式,1 是实数 1。
顺带一提,此例的 0 与 1 刚好是单一元素,而且非常直觉;但是当集合设定成其他特殊的集合,0 与 1 就可能有多种元素。
向量空间的重点在于加法运算与倍率运算,真要取名的话也该叫做“加倍空间”。不过由于加法、倍率很容易联想到向量,所以才取名“向量空间”。
Vector Space 实际范例
举一个比较複杂的例子。
向量空间 倍率运算的倍率,通常是体 集合 --> 馀数 mod 7 集合 --> 整数 (可以推广至馀数 mod ɸ(7)) 加法运算 --> 馀数乘法 加法运算 --> 整数加法 倍率运算 --> 馀数次方 乘法运算 --> 整数乘法 向量空间之加法运算的规定 (u = 2, v = 3, w = 4, a = 5, b = 6) 1. u + (v + w) = (u + v) + w | 2 × (3 × 4) ≡ (2 × 3) × 4 2. u + v = v + u | 2 × 3 ≡ 3 × 2 3. v + 0 = v | 3 × 1 ≡ 3 符号 0 设定成馀数 1 4. v + (-v) = 0 | 3 × 3 ≡ 3 × 5 ≡ 1 倒数 向量空间之倍率运算的规定 5. a(bv) = (ab)v | (2 ^ 6) ^ 5 ≡ 2 ^ (5 × 6) 6. a(u + v) = au + av | (2 × 3) ^ 5 ≡ (2 ^ 5) × (3 ^ 5) 7. (a + b)v = av + bv | 3 ^ (5 + 6) ≡ (3 ^ 5) × (3 ^ 6) 8. 1v = v | 3 ^ 1 ≡ 3 符号 1 设定成整数 1
Inner Product Space
“内积空间”由一个集合以及三个运算组成。三个运算分别是加法运算、倍率运算、内积运算。
内积运算,泛指一切适当的运算。例如集合设定成向量、加法运算设定成向量加法、倍率运算设定成向量倍率,那麽内积运算可以设定成向量点积(dot product)。
为了釐清内积运算的责任,数学家做了详细规定:
内积空间之内积运算的规定 9. Linearity: Additivity 加法性(加法分配律) (u + v) ∙ w = (u ∙ w) + (v ∙ w) 10. Linearity: Homogeneity of degree 1 倍率性(倍率结合律) (au) ∙ w = a(u ∙ w) 11. Commutativity 内积交换律 u ∙ v = v ∙ u 12. Positive-definiteness 正定 u ∙ u ≥ 0 u ∙ u = 0 iff u = 0 (orthogonality)
内积空间真要取名的话也该叫做“加倍内空间”,不过这名称有点拗口。
内积空间是向量空间的延伸版本。数学家之所以发明内积空间,是因为有了内积运算之后,可以引入长度和角度的概念。
“norm 范数”泛指一切“与自身内积、再开根号”的情况。如果集合设定成向量,内积运算设定成向量点积,那麽范数是指向量长度。
“orthogonality 正交”泛指一切“内积等于零”的情况。如果採用方才的设定,那麽正交是指垂直。
Basis / Coordinate
向量空间当中,可以选定一组适当座标轴(基底):座标轴互相“线性独立 linear independent”、座标轴数量(维度)足以生成所有元素。符合条件的座标轴有无限多组。
选定一组适当座标轴之后,座标轴各自利用倍率运算进行缩放,然后利用加法运算进行合成,就可以得到向量空间当中每一个元素。得到一个数值的过程称作“线性组合 linear combination”,得到所有数值的过程称作“生成 span”。
反过来说,选定一组适当座标轴之后,向量空间当中的每一个元素,可以利用分量的概念,分散到每个座标轴上,得到一个座标。每一个元素各自拥有独一无二的座标。
Linearity
函数的加法性 additive function: y1 = f(x1) y2 = f(x2) additive y1 + y2 = f(x1) + f(x2) ======== f(x1 + x2) y1 = A x1 y2 = A x2 additive y1 + y2 = A x1 + A x2 ======== A (x1 + x2)
函数的倍率性 homogeneous function of degree 1: y = f(x) homogeneous y ⋅ k = f(x) ⋅ k =========== f(x ⋅ k) y = A x homogeneous y ⋅ k = (A x) ⋅ k =========== A ⋅ (x ⋅ k)
加法性:先相加再变换,等于先变换再相加。
倍率性:先乘上倍率再变换,等于先变换再乘上倍率。
两者合称“线性”。
Linear Transformation
线性变换是一个函数,输入输出不限(此处是向量空间),函数必须具备线性,也就是加法性、倍率性。
先前是以变数的加法、变数的倍率来组成线性变换,其实这只是一个直觉的特例。实数相加是一个线性变换,实数乘上倍率是一个线性变换。两者乱组一通仍是线性变换(多个线性变换複合之后还是线性变换)。
事实上,还有其他的线性变换,无法用变数的加法、变数的倍率表示,例如函数微分、函数积分。
Matrix
linear transformation t: V -> W v ∈ V basis of V: {v1, v2, ..., vN} coordinate of v: {x1, x2, ..., xN} w ∈ W basis of W: {w1, w2, ..., wN} coordinate of w: {y1, y2, ..., yN} linear combination: x1v1 + x2v2 + ... + xNvN linear transformation: w = t(v) = t(x1v1 + x2v2 + ... + xNvN) = x1 t(v1) + x2 t(v2) + ... + xN t(vN) "linearity" = x1 w1 + x2 w2 + ... + xN wN matrix representation of linear transformation: y = M x [ | ] [ | | | | ] [ | ] [ | | | | ] [ | ] [ y ] = [ t(v1) t(v2) t(v3) ... t(vN)] [ x ] = [ w1 w2 w3 ... wN ] [ x ] [ | ] [ | | | | ] [ | ] [ | | | | ] [ | ]
线性变换,是座标轴的线性组合、再实施变换;由于加法性、倍率性,又恰好是座标轴实施变换、再线性组合。
也就是说,线性变换是座标不变、座标轴改变。这件事可以写成矩阵乘法的格式。
当输入部分的座标轴 V,设定为标准座标轴,那麽矩阵 M 就是先前谈的线性变换矩阵,输出部分的座标轴 W 就是先前谈的座标轴。先前谈的只是一个直觉的特例。事实上,输入输出各自拥有座标轴,座标轴有无限多种选择,随便一种都行。
Change of Basis
更换输入部分的座标轴 V。就这样而已。
输出部分的座标轴 W,就是先前谈的相似矩阵。输入部分的座标轴 V,就是先前谈的座标轴,可以採用特徵基底、也可以採用任意基底。
抽象化
汽车、货车、公车、联结车,泛称为“车”。由实际名称变成泛称的这个过程,叫做抽象化。
数学家非常喜欢抽象化。上述名词,诸如加法运算、倍率运算、向量空间、线性变换、正交,都是泛称,都是经过抽象化的名称。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论