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,这仍然是一个正确的答案。感谢您的努力和关注:)