如何手动确定矩阵是不是对称?

Posted

技术标签:

【中文标题】如何手动确定矩阵是不是对称?【英文标题】:How to manually determine if a matrix is symmetric?如何手动确定矩阵是否对称? 【发布时间】:2020-04-20 20:20:01 【问题描述】:

我尝试测试矩阵是否对称,但这不起作用。

> View(new.function)
> View(new.function)
> new.function <- function(a)
+     for(i in 1:nrow(a))
+         for(j in 1:ncol(a))
+             if(a==t(a))
+                 print("true")
+             elseprint("false")
+         
+     
+ 
> a <- matrix(1:3,3,3)
> a
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
> new.function(a)
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"

【问题讨论】:

stat.ethz.ch/R-manual/R-patched/library/base/html/… isSymmetric(a, check.attributes = FALSE) 【参考方案1】:

base 中有一个函数(如 cmets 中所述)可以为您提供所需的功能。

isSymmetric.matrix(a)
 # [1] FALSE

但是,如果您想编写自己的函数,那么您应该知道您不需要循环。您只需使用all 即可检查矩阵及其转置是否相同(所有条目都相等)。

new.function <- function(a) all(a==t(a))

或使用all.equal(效率较低)。

new.function <- function(a) all.equal(b, t(b))==1

如果您坚持使用循环,那么您必须在比较中使用索引。在这里,我改变了比较条目的方式。我假设矩阵是对称的;如果转置矩阵中的一个索引及其相关条目(a[i,j] 将与t(a)[i,j]a[j,i] 进行比较)不相等,则退出循环并返回FALSE

new.function <- function(a)
                 ans = TRUE
                  for(i in 1:nrow(a))
                  for(j in 1:ncol(a))
                      if(a[i,j]!=a[j,i])
                         ans = FALSE;break
                      
                  
                return(ans)

但这根本没有效率。

【讨论】:

以上是关于如何手动确定矩阵是不是对称?的主要内容,如果未能解决你的问题,请参考以下文章

如何生成随机可逆对称正半定矩阵?

线性空间维度的公式是啥?

如何在不手动检查的情况下确定网站是不是使用 webassembly?

AtCoderE - Symmetric Grid 模拟

确定是不是可以通过翻转 1 矩阵的行和列来达到给定二进制矩阵的算法

如何不用标定板来确定相机的外参矩阵