VBA:Matrix Multiplication的代码出错

时间:2014-05-21 09:39:17

标签: vba

我正在尝试编写矩阵乘法的通用代码,但是当我尝试验证它时,输出始终是一个空矩阵。所以似乎temp矩阵的值没有得到更新。

请建议进行一些更改。代码复制如下:

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

1 个答案:

答案 0 :(得分:0)

愚蠢的错误:

For k = 1 To col1

它应该是

For k = 1 To ncol1

使用Option Explicit可以节省很多伤害!