在MATLAB中寻找对称性
有时我需要构造一个具有一定对称性的矩阵。MATLAB中有一堆工具非常适合这样的任务。在今天的帖子中,我将提到我最常用的几个。
内容
对称最容易被忽视的功能
我想从最容易被忽视的确保某种对称性的功能开始,那就是转置运算符.'(ctranspose)而且'(转置).它们如此有用的原因是在构造矩阵的过程中一个,我们知道应该是对称的(如协方差矩阵)或赫米希(如黑森矩阵),对应的元素(i, j)而且(j,我)可以用不同的表达式来计算,或者用以不同顺序聚合的项来计算。如果发生这种情况,这些元素可能会因数值考虑而有所不同。但是,如果在算法的下一步需要一个如果是对称的,那么代码可能会失败。为了保证对称性,假设一个是真实的,你可以这样做:
A = (A + A')/2
当然,你可以做的另一件事是只计算对角线上的元素和上面或下面的元素,然后填充剩下的元素。第三种策略,如果你能控制算法遵循矩阵结构,那就是只使用上三角元素或下三角元素,减少对称输入的需要。
此外,如果出于某种原因,我在高维空间工作,需要一个“平面”的对称性,我可以使用交换以及它的同伴ipermute.
向量对称
在数值计算中还出现了其他种类的对称性。一个例子是用于某些信号处理应用程序的加窗信号。在这种情况下,应用的窗口通常是对称的,但以不同的方式。对于窗口W的长度n时,对称性可以表示为:
W(end:-1:(天花板(n/2)+1)) = W(1:地板(n/2))
注意:我在上面的表达式中很小心,没有复制奇数长度数组的中间元素:-)!
如果我只是计算了窗口的前一半(注意奇数和偶数的长度),我可以使用这些函数中的一个来获得窗口对称性,而不是使用:(结肠)运算符和一些数学。
其他帮助对称的工具
下面是帮助生成对称数组的其他工具的列表(可能不是详尽的)。
这是一个我基本上从不使用的,因为我发现如果我这样做的话,我必须做很多特殊情况的编码。
- 挤压-删除单个维度
你的工作需要对称性吗?
什么时候需要并使用对称?在什么应用中?以及如何在代码中实现这一点。让我们知道在这里.