构造一般的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亿种,应该够用了吧?