带VBA的矩阵数学(线性方程组)

时间:2014-05-03 10:43:41

标签: arrays excel vba math matrix

我正在寻找一些帮助在Excel的VBA中执行一些矩阵数学。我已经阅读了大量使用Excel工作表的回复,但我希望在VBA代码中解决这个问题。

虽然我的应用程序要大得多,但假设我有一个线性方程组需要解决:

  x1 +   x2 = 8
2*x1 + 4*x2 = 100

这可以通过简单的矩阵公式A * x = B或x = A ^( - 1)* B来解决,其中,

A = [1, 1; 2, 4]
B = [8; 100]

如果你解决这个问题,你会发现x1 = -34和x2 = 42.就矩阵而言:

X = [-34; 42]

使用Excel的工作表以及它的MMULT和MINVERSE函数使这很容易,我已经让它工作得很好。我的问题是我需要在VBA函数中进行此计算。这是我正在尝试的:

Dim A(0 To 1, 0 To 1) As Single
Dim B(0 To 0, 0 To 1) As Single
Dim X(0 To 0, 0 To 1) As Single

A(0, 0) = 1
A(1, 0) = 1
A(0, 1) = 2
A(1, 1) = 4

B(0, 0) = 8
B(0, 1) = 100

X = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(A), B)

不幸的是,最后一行会产生“编译错误:无法分配给数组”消息。我认为这是因为我必须一次指定一个数组的每个元素,但工作表函数是数组函数。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

两件事:

同样的规则适用于实际数学:B必须是一个垂直数组,以便在您的情况下进行矩阵乘法。将其声明为

Dim B(0 To 1, 0 To 0) As Single

并相应地初始化它。另外,只需声明

Dim X As Variant

因为MMult返回Variant数组。这是导致您原始错误的原因。