VBA:矩阵乘法的代码错误
我试图为矩阵乘法编写一个通用代码,但当我试图验证它时,输出总是一个空矩阵。因此,临时矩阵的值似乎没有得到更新 请为它的工作建议一些更改。代码复制如下:VBA:矩阵乘法的代码错误,vba,Vba,我试图为矩阵乘法编写一个通用代码,但当我试图验证它时,输出总是一个空矩阵。因此,临时矩阵的值似乎没有得到更新 请为它的工作建议一些更改。代码复制如下: Public Function matrixmultiply(x() As Double, y() As Double) As Double() Dim nrow1 As Integer, nrow2 As Integer, ncol1 As Integer, ncol2 As Integer, i As Integer, j As Int
Public Function matrixmultiply(x() As Double, y() As Double) As Double()
Dim nrow1 As Integer, nrow2 As Integer, ncol1 As Integer, ncol2 As Integer, i As Integer, j As Integer, k As Integer, temp() As Double
nrow1 = UBound(x, 1) - LBound(x, 1) + 1
ncol1 = UBound(x, 2) - LBound(x, 2) + 1
nrow2 = UBound(y, 1) - LBound(y, 1) + 1
ncol2 = UBound(y, 2) - LBound(y, 2) + 1
ReDim matrixmultiply(1 To nrow1, 1 To ncol2)
ReDim temp(1 To nrow1, 1 To ncol2)
For i = 1 To nrow1
For j = 1 To ncol2
d = 2
For k = 1 To col1
temp(i, j) = temp(i, j) + x(i, k) * y(k, j)
Next k
Next j
Next i
matrixmultiply = temp
End Function
Private Sub CommandButton1_Click()
Dim x(1 To 3, 1 To 3) As Double, y(1 To 3, 1 To 3) As Double, z() As Double
Dim i As Integer, j As Integer
For i = 1 To 3
For j = 1 To 3
x(i, j) = Cells(i, j).Value
y(i, j) = Cells(i, j + 5).Value
Next j
Next i
z = matrixmultiply(x, y)
For i = 1 To 3
For j = 1 To 3
Cells(i, j + 12).Value = z(i, j)
Next j
Next i
End Sub
一个愚蠢的错误:
For k = 1 To col1
相反,它应该是
For k = 1 To ncol1
使用
选项Explicit
可以避免很多伤害 将Option Explicit
放在模块开头。为什么不将矩阵放在范围内并使用MMULT()?这可能更简单更快。嗨,格斯伯格,你的建议真的很有帮助。我错误地输入了其中一个变量。@iDevlop,实际上我正在尝试开发一种通用算法,该算法也可以处理大型矩阵,因为MMULT()对矩阵的大小有限制。旁注:有一些更为矩阵友好的语言与VBA接口。也许看看R吧。嗨,hnk,这仍然是一个正确的答案。感谢您的努力和关注:)