我正在尝试在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。
如果需要,可以使用TempSheet和所有股票的图片:
答案 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 & "))")