大家好,欢迎来到IT知识分享网。
以为元素,并且,任二列正交的矩阵,称为哈达玛(Hadamand)矩阵。利用哈达玛(Hadamand)矩阵直积法构造二水平正交表,杨子胥在《正交表的构造》[1]中作了详细的介绍。李学斌等[2]提出了利哈达玛矩阵直积法和Eexcel进行二水平正交表构造的方法,该方法分五步手动复制、粘贴和数据变换得到7阶二水平正交表。该方法虽然可以手动构造
的如
、
等等任一高阶二水平正交表,但步骤随阶数增大而增多,不利于高阶二水平正交表的构造。
本文利用哈达玛(Hadamand)矩阵直积法原理和VBA的Array函数、For…Next语句、If…Then…Else 语句,给出了VBA代码,并利用该代码可以构造阶(
)的二水平正交表
。
一、数学方法[1]
设A,B 分别为 与
矩阵,将A的每个元素都乘以矩阵B而得到的
矩阵,用
表示,叫做矩阵A与B的直积。
例如,

最简单的哈达玛(Hadamand)矩阵为
。
从出发,利用矩阵的直积可以造出高阶的哈达玛(Hadamand)矩阵。如:

是一个标准哈阵。将它的全1列去掉,将全部-1变换为2后,便得到最简单的二水平正交表
:

二、VBA实现方法
打开Excel,点击“开发工具”→点击“宏”→填写宏名,例如宏名为“zjf”→点击“创建”→在代码编辑框内输入代码→在“A1”单元格填写二水平正交表的阶数→运行名为“zjf”的宏。
三、VBA代码
Worksheets(“H2矩阵”).Select
Dim i, j, k As Integer
Dim Array1() As Variant
Dim Array2() As Variant
Dim Array3() As Variant
n=Log([A1])/Log(2)
ReDim Array1(2^n,2^n)
Array1(1,1) =1
Array1(1,2) =1
Array1(2,1) =1
Array1(2,2) = -1
ReDim Array2(2 ^n,2^n)
For i = 1 To 2
For j=1 To 2
Array2(i,j) = Array1(i,j)
Array2(i,j)=Array1(i,j)
Next j
Next i
For k=1 To n
For i =1 To 2^(k -1)
For j =1 To 2^(k -1)
Array2(i,j +2^(k -1))=Array2(i,j)
Array2(i+2^(k -1),j)= Array2(i,j)
Array2(i+2^(k-1),j +2^(k-1))= Array2(i,j)*(-1)
Next j
Next i
Next k
ReDim Array3(2^n,(2^n) -1)
For i =1 To 2^n ‘数组Array2去掉第一列
For j =1 To 2^n-1
Array3(i, j) = Array2(i,j +1)
If Array3(i,j) = -1 Then
Array3(i,j) =2
End If
Next j
Next i
For i = 1 To 2^n
For j =1 To 2^n-1
Cells(i+1,j) = Array3(i,j)
Next j
Next i


参考文献:
[1]杨子胥,正交表的构造,山东,人民出版社,1978年8月,74-77
[2] 李学斌等,运用Excel进行正交表的构造,河南科技学院学报(自然科学版)第36卷第4期,2008年12月,111
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/172636.html