2011-09-04 522 views
0

我正在尝试使用数组进行一些计算。使用VBA进行数组乘法和矩阵求逆

例如我想解决Ax=y,所以我使用下面的代码来做到这一点,其中A是一个方形矩阵,y是一个列。向量。在VBA中,A是一个二维数组,y是一维数组。但是,此代码不起作用...

x = WorksheetFunction.MMult(WorksheetFunction.MInverse(A), y) 

我在哪里弄错了?谢谢!

+3

定义“不起作用”。 –

+0

@Oli Charlesworth它什么都不返回,并停止运行... – BVFanZ

+0

什么都没有?没有错误信息?请向我们展示可以做到这一点的代码...您是否试过在调试模式下逐步执行代码? –

回答

6

你可以犯的许多错误的一种或多种:

  • 数组没有定义为Variant(如果数据类型比Variant其他的东西大部分worksheetfunctions将无法正常工作)。
  • 尺寸Ay不匹配,因为他们需要矩阵乘法。
  • 特别是,如果y的尺寸是(1,2)而不是(2,1),则不起作用,如下例所示。
  • etc ...可以是任何东西,真的。你不会告诉我们你得到了什么错误信息。

下面是工作的例子:

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) 
+0

这是有帮助的。我想我犯了你上面提到的所有错误。顺便说一句,该函数根本没有返回味精。 – BVFanZ

+0

+1个很好的例子 – brettdj

1

设矩阵(3×3)是在Range("A1:C3")阵列,矩阵ÿ(3×1)是一个数组中Range("E1:E3"),和矩阵x(3 x 1)是Range("G1:G3")中的阵列。然后,你可以试试这个简单的程序:

Range("G1:G3") = WorksheetFunction.MMult(WorksheetFunction.MInverse(Range("A1:C3")), Range("E1:E3")) 

通过使用相同的方法,你可以做到这一点,找到一个矩阵(n×m个)乘用矩阵(P×q)个结果。当然,为了简化,你应该首先声明变量。我希望这个答案可以帮助你。