Dim row(1 To 4) As Integer
Dim col(1 To 4) As Integer
Dim ss(1 To 4) As Variant
Dim a1 As Variant
Dim a2 As Variant
Dim a3 As Variant
Dim a4 As Variant
Private Sub Form_Load()
a1 = Array(Array(1, 2, 3, 4, 5), Array(5, 4, 6, 2, 1), Array(5, 6, 7, 4, 1), Array(1, 3, 5, 4, 1))
a2 = Array(Array(1, 4, 5), Array(5, 2, 1), Array(5, 6, 7), Array(5, 4, 1), Array(4, 7, 9))
a3 = Array(Array(1, 2, 3, 4, 5, 6, 2), Array(5, 4, 6, 2, 1, 5, 4), Array(5, 6, 7, 4, 1, 6, 1))
a4 = Array(Array(1, 2), Array(5, 1), Array(4, 1), Array(1, 1), Array(2, 2), Array(7, 5), Array(5, 7))
ss(1) = a1
ss(2) = a2
ss(3) = a3
ss(4) = a4
row(1) = 4
col(1) = 5
row(2) = 5
col(2) = 3
row(3) = 3
col(3) = 7
row(4) = 7
col(4) = 2
End Sub
Private Sub Form_click()
Dim lng As Integer
Dim a()
a = Array(4, 5, 3, 7, 2)
lng = UBound(a)
Dim m(1 To 4, 1 To 4) As Long
Dim s(1 To 4, 1 To 4) As Long
ysb a, lng, m, s
'Print
Print tz(1, 4, s)
 
 'Print
 lian 1, 4, s
End Sub
Sub ysb(ByRef p, b As Integer, ByRef c As Variant, ByRef d As Variant)
Dim i As Integer
Dim j As Integer
Dim r As Integer
Dim k As Integer
Dim value As Long
For i = 1 To b
c(i, i) = 0
Next
For r = 2 To b
For i = 1 To b - r + 1
j = r + i - 1
c(i, j) = c(i + 1, j) + p(i - 1) * p(j) * p(i)
d(i, j) = i
'Print i, j
For k = i + 1 To j - 1
value = c(i, k) + c(k + 1, j) + p(i - 1) * p(k) * p(j)
If value < c(i, j) Then
c(i, j) = value
d(i, j) = k
End If
Next
'Print c(i, j), d(i, j), i, j
Next
Next
End Sub
Function tz(a As Integer, b As Integer, ByRef x) As String
Dim ss As String
Dim value As Integer
If a = b Then
tz = "A" & a
Else
If a + 1 = b Then
tz = "A" & a & "A" & b
Else
value = x(a, b)
ss = "[" & tz(a, value, x) & "]" + "[" & tz(value + 1, b, x) & "]"
tz = ss
End If
End If
End FunctionFunction cheng(ByRef x, ByRef y, ra As Integer, ca As Integer, rb As Integer, cb As Integer) As Variant
Dim sum As Long
Dim c As Variant
ReDim c(ra, cb)
sum = 0
If ca <> rb Then
MsgBox "矩阵不可乘"
Else
Debug.Print ra, ca, rb, cb
For i = 0 To ra - 1
For j = 0 To cb - 1
sum = x(i)(0) * y(0)(j)
For k = 1 To ca - 1
sum = sum + x(i)(k) * y(k)(j)
Print sum, x(i)(k), y(k)(j)
Nextc(i, j) = sum
Next
Next
cheng = c
End If
End FunctionFunction lian(a As Integer, b As Integer, ByRef x) As Variant
Dim value As Integer
If a = b Then
lian = ss(a)
Else
If b - 1 = a Then
 lian = cheng(ss(a), ss(b), row(a), col(a), row(b), col(b))
Else
value = x(a, b)
'Print a, b, value
lian = cheng(lian(a, value, x), lian(value + 1, b, x), row(a), col(value), row(value + 1), col(b))
End If
End If
End Function

解决方案 »

  1.   

    sum = x(i)(0) * y(0)(j)    '提示下表越界
    For k = 1 To ca - 1 
    sum = sum + x(i)(k) * y(k)(j) 
    Print sum, x(i)(k), y(k)(j) 
    Next 
    我不知道两种定义数组有什么差别,一个是x()()另一个是c(,)
    两给都是二维数组,我把他们的地址混用了。但不知道怎么改正
      

  2.   

    我试过用
    dim x as variant
    x=array(array(1,2,3,4),array(4,5,6,7))
    print x(0)(1)
    可以输出啊
    但是x()()跟c(,)有什么区别怎么把连个的地址联系在一起
      

  3.   

    看楼主的代码那么长,还不如直接给你一个矩阵乘法的函数
    用法:z=matmultiply(x,y)
    z必须先定义成动态数组:dim z() as double
    x,y为两个相乘的矩阵,必须满足矩阵相乘的条件:y的行数等于x的列数Public Function MatMultiply(x() As Double, y() As Double) As Double()
        Dim n As Integer
        Dim m As Integer
        Dim p As Integer
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim z() As Double
        n = UBound(x, 1)
        m = UBound(x, 2)
        p = UBound(y, 2)
        ReDim z(1 To n, 1 To p)
        
        'ReDim z(n, p)
        If m <> UBound(y, 1) Then
            MsgBox ("这两个矩阵不能相乘!" + Str$(m) + Str$(UBound(y, 1)))
        Else
            For i = 1 To n
                For j = 1 To m
                    For k = 1 To p
                        z(i, k) = z(i, k) + x(i, j) * y(j, k)
                    Next k
                Next j
            Next i
        End If
        MatMultiply = z
    End Function
      

  4.   

    我计算的是多个矩阵相乘,必须用算法找到相乘次数较少的方案。比如说ABCDEFG七个矩阵英爱如何才能让计算机在计算矩阵时所用的乘法次数较少的。((AB)C(DEF))G.