matlab如何自己编程得到hadamard矩阵?

不能用函数hadamard(),因为hadamard()每次都只能得到同一个矩阵,而不是随机的

构造一般的Hadamard矩阵至今仍是未解决的数学问题,所以,想要自编函数生成,是有一定困难的。

 

如果只是想要每次调用得到不同的随机结果,把矩阵的行和列都随机打乱即可。

>> H=hadamard(8)
H =
     1     1     1     1     1     1     1     1
     1    -1     1    -1     1    -1     1    -1
     1     1    -1    -1     1     1    -1    -1
     1    -1    -1     1     1    -1    -1     1
     1     1     1     1    -1    -1    -1    -1
     1    -1     1    -1    -1     1    -1     1
     1     1    -1    -1    -1    -1     1     1
     1    -1    -1     1    -1     1     1    -1
>> H=H(randperm(8),randperm(8))
H =
    -1    -1     1     1     1     1    -1    -1
     1    -1    -1    -1     1     1    -1     1
    -1     1    -1     1     1    -1    -1     1
    -1    -1     1    -1     1    -1     1     1
     1     1     1     1     1     1     1     1
     1     1     1    -1     1    -1    -1    -1
     1    -1    -1     1     1    -1     1    -1
    -1     1    -1    -1     1     1     1    -1
>> H*H'
ans =
     8     0     0     0     0     0     0     0
     0     8     0     0     0     0     0     0
     0     0     8     0     0     0     0     0
     0     0     0     8     0     0     0     0
     0     0     0     0     8     0     0     0
     0     0     0     0     0     8     0     0
     0     0     0     0     0     0     8     0
     0     0     0     0     0     0     0     8

对于n阶矩阵,大致上会有(n!)^2种不同的排列(这只是从行列的重新排列来说,不确定对于Hadamard矩阵是否会有重复),例如,对于n=8而言,有超过16亿种,应该够用了吧?

温馨提示:答案为网友推荐,仅供参考
相似回答