【问题标题】:Why does a 2X1 array need to be defined as (1 to 2, 1 to 1) instead of just (1 to 2)为什么需要将 2X1 数组定义为 (1 to 2, 1 to 1) 而不仅仅是 (1 to 2)
【发布时间】: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,但除此之外,我不太确定那里到底有什么令人困惑的地方。如果您定义一个 v Variant 变量并分配 v=Range("G5:G6").Value 它是二维数组(与您的 A 数组完全相同)。
  • G5:G6 是二维数组对我来说并不直观。从表面上看,我觉得它非常一维
  • (1 to 3, 1 to 1),第一个维度始终是行数,第二个维度是列数(即使是1)。

标签: arrays excel vba multidimensional-array


【解决方案1】:

MMULT 应该有 2D 数组作为参数,因为它用于乘以 2D 矩阵。一维数组不能被视为矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2016-05-21
    • 2013-01-09
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多