matrixmath与VBA(线性方程组)

我正在寻找一些在Excel的VBA中执行一些matrixmath的帮助。 我读了大量的build议使用Excel工作表的答复,但我希望在VBA代码本身内解决这个问题。

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

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

这可以用简单的matrix公式A * x = B或x = A ^( – 1)* B来解决,

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

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

 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) 

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

任何人有任何想法? 在此先感谢您的帮助!

———- [编辑:求助] ———-

在Cor_Blimey和Jean-FrançoisCorbett的帮助下,我已经完成了下面的工作,没有发生任何错误(注意数组维度的变化 – 我对第一行还是第一行感到困惑):

 Dim A(0 To 1, 0 To 1) As Single Dim B(0 To 1, 0 To 0) As Single Dim X As Variant A(0, 0) = 1 A(0, 1) = 1 A(1, 0) = 2 A(1, 1) = 4 B(0, 0) = 8 B(1, 0) = 100 X = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(A), B) 'Display outputs in a MsgBox for validation MsgBox "x1 = " & X(1, 1) & vbNewLine & "x2 = " & X(2, 1), vbCritical 

再次感谢所有帮助我的人!

两件事情:

同样的规则适用于实际的math: B必须是matrix乘法的垂直arrays在你的情况下是可能的。 声明为

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

并相应地进行初始化。 另外,只要声明

 Dim X As Variant 

因为MMult返回一个Variant数组。 这是什么原因导致你的原始错误。