EXCEL VBA:使用数组的点积

EXCEL VBA:使用数组的点积,excel,vba,matrix,vector,linear-algebra,Excel,Vba,Matrix,Vector,Linear Algebra,下面是从一个更大的整体中摘录的示例代码。我试图计算向量beta和Xtempj的点积,这应该是一个标量,然后将得到的标量乘以另一个标量,Ycoded(j,1) 但是,在temp1(j,1)的赋值语句期间,我收到一条错误消息“Type mismatch” 选项显式 Sub XX() Dim beta As Variant Dim temp1 As Variant Dim X5 As Variant Dim Xtempj As Variant Dim Ycod

下面是从一个更大的整体中摘录的示例代码。我试图计算向量
beta
Xtempj
的点积,这应该是一个标量,然后将得到的标量乘以另一个标量,
Ycoded(j,1)

但是,在
temp1(j,1)
的赋值语句期间,我收到一条错误消息“Type mismatch”

选项显式

Sub XX()

    Dim beta As Variant
    Dim temp1 As Variant
    Dim X5 As Variant
    Dim Xtempj As Variant
    Dim Ycoded As Variant

    ReDim beta(1 To 2, 1 To 1)
    ReDim X5(1 To 2, 1 To 2)
    ReDim temp1(1 To 2, 1 To 1)
    ReDim Xtempj(1 To 2, 1 To 1)
    ReDim Ycoded(1 To 2, 1 To 1)

    beta(1, 1) = 0.510825624
    beta(2, 1) = 0

    X5(1, 1) = 1
    X5(1, 2) = 45
    X5(2, 1) = 1
    X5(2, 2) = 76

    Ycoded(1, 1) = 1
    Ycoded(2, 1) = 0

    For j = 1 To 2
        For k = 1 To 2
            Xtempj(k, 1) = X5(j, k)
        Next k

        temp1(j, 1) = WorksheetFunction.MMult(Application.Transpose(beta), Xtempj) * Ycoded(j, 1)

    Next j

End Sub
此错误消息使我认为VBA将
Ycoded(j,1)
视为1 x 1数组。因此,我也尝试了以下说法:

temp1(j, 1) = WorksheetFunction.MMult(WorksheetFunction.MMult(Application.Transpose(beta), Xtempj), Ycoded(j, 1))
但是,在这里我收到“无法获取WorksheetFunction类的MMult属性”

在我的睡眠中,我可以在R或SAS Proc IML中做这种事情,所以这非常令人沮丧。如有任何帮助/见解,我们将不胜感激

最好的


Dan

对于显示的partic实例,它被视为返回的数组,因此希望您索引到该数组中,例如

 temp1(j, 1) =  Ycoded(j, 1) * WorksheetFunction.MMult(Application.Transpose(beta), Xtempj)(1) 
否则,MMULT期望一个数组中的行数相等,而另一个数组中的列数相等


WorksheetFunction.MMult(Application.Transpose(beta),Xtempj)
正在生成一个变量(1到1)。您可以使用(1)对其进行索引以访问该值。

请声明所有变量以及什么是X5k?模块顶部的Put Option Explicit(始终、处处)X5k可能会被初始化为variant/empty,这意味着k=1到X5k不会发生,Xtempj也不会是您所期望的。我的道歉:该语句应该是(例如目的):对于k=1到2