之所以要写这篇文章,主要是想从Matlab函数的角度给大家一个对EMD直观的理解。EMD是在一定的条件限制下求解最小代价作为直方图等向量的距离。EMD具体内容请参考我第一篇文章。而求解最小代价的过程就是个线性规划问题。
一、Matlab函数解释
这里借用的Matlab函数为linprog(),即求解线性规划的函数。下面为了让大家理解方便,signature的表达严格对应了直方图的bin,也就是说一点都不压缩直方图,每个bin就作为一个signature,所以数据量显得大了些。例如直方图有32个bin,那么signature就是 (1, w1), (2, w2), (3, w3).... (32, w32),w值为每个bin的数量。
matlab的这个函数我的调用方式为:linprog(f, A, b, Aeq, beq),解释如下:
1)函数的目的是求 fT * x的最小值,一定要注意,这里的f相当于上一篇中EMD的距离矩阵D,x相当于EMD的fij,即从一个直方图的第i个bin流到另一个直方图的第j个bin的数量。 由于这个函数的输入f是一维的,下面我把EMD的距离dij和fij都展开。
2)一个限制条件为 A * x <= b
3)另一个限制条件是Aeq * x = beq
二、实例