罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已退役,不会更新。

在MATLAB中寻找对称性

有时我需要构造一个具有一定对称性的矩阵。MATLAB中有一堆工具非常适合这样的任务。在今天的帖子中,我将提到我最常用的几个。

内容

对称最容易被忽视的功能

我想从最容易被忽视的确保某种对称性的功能开始,那就是转置运算符.'ctranspose而且转置.它们如此有用的原因是在构造矩阵的过程中一个,我们知道应该是对称的(如协方差矩阵)或赫米希(如黑森矩阵),对应的元素(i, j)而且(j,我)可以用不同的表达式来计算,或者用以不同顺序聚合的项来计算。如果发生这种情况,这些元素可能会因数值考虑而有所不同。但是,如果在算法的下一步需要一个如果是对称的,那么代码可能会失败。为了保证对称性,假设一个是真实的,你可以这样做:

A = (A + A')/2

当然,你可以做的另一件事是只计算对角线上的元素和上面或下面的元素,然后填充剩下的元素。第三种策略,如果你能控制算法遵循矩阵结构,那就是只使用上三角元素或下三角元素,减少对称输入的需要。

此外,如果出于某种原因,我在高维空间工作,需要一个“平面”的对称性,我可以使用交换以及它的同伴ipermute

向量对称

在数值计算中还出现了其他种类的对称性。一个例子是用于某些信号处理应用程序的加窗信号。在这种情况下,应用的窗口通常是对称的,但以不同的方式。对于窗口W的长度n时,对称性可以表示为:

W(end:-1:(天花板(n/2)+1)) = W(1:地板(n/2))

注意:我在上面的表达式中很小心,没有复制奇数长度数组的中间元素:-)!

如果我只是计算了窗口的前一半(注意奇数和偶数的长度),我可以使用这些函数中的一个来获得窗口对称性,而不是使用结肠运算符和一些数学。

  • flipud-翻转矩阵上下
  • fliplr-从左到右翻转矩阵
  • flipdim-沿指定尺寸翻转数组

其他帮助对称的工具

下面是帮助生成对称数组的其他工具的列表(可能不是详尽的)。

这是一个我基本上从不使用的,因为我发现如果我这样做的话,我必须做很多特殊情况的编码。

你的工作需要对称性吗?

什么时候需要并使用对称?在什么应用中?以及如何在代码中实现这一点。让我们知道在这里




发布与MATLAB®R2013b

|
  • 打印
  • 发送电子邮件