Flocking
for Multi-Agent Dynamic Systems: Algorithms and Theory
In 1986, Reynolds introduced three heuristic rules that led to
creation of the first computer animation of flocking [5]. Here, are the
three flocking rules of Reynolds
Flock Centering: attempt to stay close to nearby flock mates;
和邻居接近
Collision Avoidance: avoid collisions with nearby flock mates;
不和邻居碰撞
Velocity Matching: attempt to match velocity with nearby flock mates
和邻居保持一致的速度
基本问题:
How do we design scalable flocking algori ...
Eigenface
PCA有很多作用,比如在人脸识别领域,拾取人脸得关键特征。最著名的一个例子是所谓的eigenface。
顾名思义,eigenface就是脸的eigenvalue,即脸的特征(其实任意图片都有特征,但是使用一类图片比如人脸图片较为好比较)。
使用PCA提取人脸图片的特征,并且将其重新组成图片,过程如下。
获取张同一个人不同的人脸照片,比如192x168像素的照片,用灰度表示(比较简单,这样每一个pixel就只有一个值而不是3个值了)。
将每一张照片变成列向量,每一列代表一个照片,构成一个矩阵,即矩阵的维度是。
计算矩阵的每一行的平均值,得到一个
的列向量,然后将这个列向量扩充成矩阵,变成 的矩阵,每一列的值都相同,这个矩阵称之为均值矩阵 。
通过公式算出去平均值后的矩阵
将进行SVD分解得到 其中,矩阵就是eigenface矩阵,每一列就是每张照片的eigenface,每一张都记录了不同方面的信息
以上五步就可以的出来eigenface,下面发一个代码,以及本人靓照:
image-20210515230156788
使用eigenfaces可以拟合出来原图, ...
SVD 使用 correlations
方法计算
首先在说SVD之前回忆一波特征值分解:
特征值分解
特征值分解简单来说就是把矩阵分解成特征向量矩阵特征值形成的对角矩阵特征向量矩阵的逆的形式,即
其中 是 的特征向量
上式还可以写成这样,即原矩阵 特征向量矩阵 = 特征向量矩阵
特征值矩阵,特征值分解只能应用于方阵
SVD分解
关于一个向量
,首先将其看成是列向量的矩阵,且假设,()
则
是一个的矩阵
而这个矩阵就是矩阵中 相互之间的相关性。
解释完的含义就可以看SVD分解了
首先SVD的分解形式为:
其中 称之为的左奇异向量矩阵,称之为 的奇异向量矩阵, 和
都是共轭转置矩阵,即其本身乘以其共轭转置得到单位矩阵。
,
、 如果
不是复数矩阵。
称之为 的奇异值矩阵,其中
是对角矩阵,且每个奇异值的重要性按行顺序排列。
SVD分解可以是非方阵,也就是说任何矩阵都有其奇异值矩阵、左/右奇异向量矩阵,这和特征值分解是不同的。
SVD分解和特征值分解的关系
对和进行简化SVD分解可以分别得到
注:所谓简化SVD分解是matlab的一个函数svd(X,' ...
截取关键成分
最优硬分界线
在SVD分解中,选取合适的秩r作为分界线至关重要。这个分界线就是下图中如何划分和的关键。有一种方法是最优硬分界线,选取秩r大于该分界线的部分最为Truncated
SVD,往往最有效率。
fullsvd2truncatedsvd
那么最优硬分界线划分假设被分解的矩阵可以被分成两个部分: 其中 是高斯噪音,是噪音的magnitude。
如果,即是个方阵,而且$已知则硬分界线为:$ $$
如果,且 即是个非常细长的矩阵,则替换成 :
如果,而且$未知,则最优硬分界线为:$ $$
其中是奇异值的中位数, 由下式解出:
书中例子:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647clear all, close all, clc%% 造出来一个真实Xt = (-3:.01:3)';Utrue = [cos(17*t).*exp(-t.^2) sin(11*t)];Strue = [2 0; 0 .5];Vtrue = [si ...
使用SVD
奇异值分解进行regress回归
Truncated SVD
Truncated SVD见下图:
fullsvd2truncatedsvd
其中rem代表被截取后的剩余部分。
对于矩阵而言,我们将其分解为 的形式,其中,和都是酉矩阵,即其与自身的共轭转置相乘等于单位矩阵的矩阵(,)。
则是一个对角矩阵,对角线上的值都是矩阵的特征值。
这样对一个矩阵分解就叫做SVD分解(singular value decomposition)。
对于而言,如果矩阵并不是全秩的矩阵(意思是其所有的行或列并不是都不相关的
not independently related),矩阵的秩假设为(有最大个不相关的行或列),则 则代表了矩阵前列所构成的矩阵, 则代表了剩余部分,代表根据需要在前列中选择的一部分列构成的矩阵。
都是对应的奇异值的奇异向量,且 ,都是按照重要性排列其列向量的。
使用matlab实现对一个矩阵的SVD分解很简单:
1234567%%假设X是mxn的矩阵[U,S,V] = svd(X)%或者使用[U,S,V] = svd(X,'econ')%以及[U,S,V] = s ...
卡尔曼滤波介绍
卡尔曼滤波顾名思义是一种滤波方法,可以用于线性滤波和非线性滤波。卡尔曼滤波分为很多类,主要应用于线性滤波的是一般卡尔曼滤波,应用于非线性的有延申卡尔曼滤波(Extended
Kalman Filter) 、无损卡尔曼滤波(Unscented Kalman
Filter) 、以及粒子滤波器(Particle Kalman
Filter)。
这篇主要说一说啥是一般卡尔曼滤波。
卡尔曼滤波的基本模型
基本假设
假设现在有线性的离散时间系统:
\[
\begin{equation}\label{1}
\begin{aligned}
x_ {k} &=F_ {k-1} x_ {k-1}+G_ {k-1} u_ {k-1}+w_ {k-1}\\\\
\\\\
y_ {k} &=H_ {k} x_ {k}+v_ {k}
\end{aligned}
\end{equation}
\]
系统固有的
对于这个系统描述方程,各个矩阵的描述如下:
\(F_ {k-1}\):
系统转化矩阵,将系统状态从时刻间\(k-1\)转化到时刻\(k\)时的状态。
\(G_
{k-1}\): ...