【发布时间】:2021-01-08 06:15:40
【问题描述】:
我正在执行反向 2X2 矩阵与 2X1 矩阵的矩阵乘法。我不断收到错误并进行了一些搜索并偶然发现了这个Question and Answer。答案就是下面这段代码。
为什么需要将 y 定义为 (1 to 2, 1 to 1) 而不仅仅是 (1 to 2)?
Dim A As Variant
Dim y As Variant
Dim x As Variant
ReDim y(1 To 2, 1 To 1)
y(1, 1) = 2
y(2, 1) = 3
ReDim A(1 To 2, 1 To 2)
A(1, 1) = 3
A(2, 1) = 1
A(1, 2) = 4
A(2, 2) = 2
x = WorksheetFunction.MMult(WorksheetFunction.MInverse(A), y)
【问题讨论】:
-
你的第一句话回答了这个问题。您正在将矩阵相乘,因此是二维数组。当然
Mmult可以实现将一维数组作为第二维 = 1 的二维数组来处理,但它需要对每种情况进行不同的处理(1D x 1D、1D x 2D、2D x 1D)。微软显然决定不这样做,并要求两个数组都是二维的。 -
@BrakNicku 让我感到困惑,因为当我使用 excel 中的函数时,我为其提供了 2X2 范围和 1X2 范围。 IE。
=MMULT(D5:E6,G5:G6) -
第二个 (G5:G6) 是 2X1,但除此之外,我不太确定那里到底有什么令人困惑的地方。如果您定义一个
vVariant 变量并分配v=Range("G5:G6").Value它是二维数组(与您的A数组完全相同)。 -
G5:G6 是二维数组对我来说并不直观。从表面上看,我觉得它非常一维
-
(1 to 3, 1 to 1),第一个维度始终是行数,第二个维度是列数(即使是1)。
标签: arrays excel vba multidimensional-array