VBA:Sumproductc返回空值(Matrix Multiplication)

时间:2017-05-13 13:15:35

标签: vba matrix-multiplication portfolio

我正在尝试在VBA中进行一些矩阵乘法,但我一直收到错误。我试图定义所有的向量和矩阵,并且一次一个地停止计算,看起来= MMult函数正常工作,但是当使用= SumProduct时,返回的值是0.

这是我的代码(我省略了一些格式化):

<!DOCTYPE html>
<html>
  <head>
    <title>WYSIWYG</title>

    <!-- Stylesheets -->
    <link rel="stylesheet" href="../css/photon.min.css">

    <!-- Javascript -->
    <script src="js/menu.js" charset="utf-8"></script>
  </head>
  <body>
    <div class="window">

      <!-- .toolbar-header sits at the top of your app -->
      <header class="toolbar toolbar-header">
        <h1 class="title">WYSIWYG</h1>
      </header>

      <!-- Your app's content goes inside .window-content -->
       <div class="window-content">
        <div class="pane-group">
          <div class="pane pane-sm sidebar">

          </div>

          <div class="pane">

          </div>
        </div>
      </div>
    </div>
  </body>
</html>

在Excel中,“A”将这样写:

= SUMPRODUCT(MeanVector; MMULT(MatrixInvCov; MeanVector))

矩阵和向量的维数是正确的,因为AuxiliaryOneMM,AuxiliaryMeanMM,MeanVector和OneVectore是[3x1]而MatrixInvCov是[3x3]矩阵

这是本地窗口的图片,它看起来像向量和矩阵是正确的,但A,B,C和D都是0。

enter image description here

如果需要,可以使用TempSheet和所有股票的图片:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

Dim AuxiliaryA As Integer
Dim AuxiliaryB As Integer
Dim AuxiliaryC As Integer
Dim AuxiliaryD As Integer

您的结果会变暗As Integer,对于小于1的结果,它们将为0。查看观察窗口中的值,它们似乎是小值,因此这是最可能的原因。

Dim AuxiliaryA As Double, AuxiliaryB As Double, AuxiliaryC As Double, AuxiliaryD As Double

对于科学计算,我认为你应该调整所有变量As Double,除非你有一些合理的理由。

答案 1 :(得分:0)

您还可以评估Excel公式(未测试):

MatrixInvCovAddr = Cells(InvCovTableStart + 1, TableStart + 1).Resize(stocks,stocks).Address

AuxiliaryMeanMM = Sheet("TempSheet").Evaluate("Sumproduct(B2:B" & 1 + Stocks & _ 
           ",MMULT('All stocks'!" & MatrixInvCovAddr & ", B2:B" & 1 + Stocks & "))")