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数组。 这是什么原因导致你的原始错误。