洛伦谈MATLAB的艺术

将想法转化为MATLAB

在MATLAB中求对称

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

目录

也许对称性最被忽视的功能

我想从确保某种对称性的最被忽视的功能开始,那就是转置算子.'(ctranspose)'(转置). 它们之所以如此有用,是因为在构建矩阵的过程中A.,我们知道应该是对称的(如协方差矩阵)或赫米特的(如hessian),相应的元素A(i,j)A(j,i)可以用不同的表达式计算,也可以用不同的顺序聚合术语。如果发生这种情况,这些元素可能由于数值考虑而有所不同。但是,如果下一步的算法需要A.若要对称,则代码可能会失败。因此,为了确保对称性,假设A.如果是真的,你可以这样做:

A = (A + A')/2

当然,您可能要做的另一件事是只计算对角线上的元素以及上面或下面的元素,然后填充剩余的元素。第三种策略是,如果您可以控制矩阵构造后的算法,则只使用上三角元素或下三角元素,从而减少对称输入的需要。

此外,如果出于某种原因,我在更高维度工作,需要在“平面”中对称,我可以使用交换和它的同伴ipermute.

矢量对称

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

W(完:-1:(天花板(n/2)+1))=W(1:楼层(n/2))

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

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

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

其他一些帮助对称化的工具

下面列出了(可能并非详尽无遗)有助于生成对称阵列的其他工具。

这里有一个我基本上从未使用过的,因为我发现如果我使用的话,我必须做很多特殊的案例编码。

你的作品需要对称吗?

什么时候需要和使用对称?在什么应用程序?如何在代码中实现。让我们知道在这里.




与MATLAB®R2013b一起发布

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。