我正在尝试使用数组进行一些计算。使用VBA进行数组乘法和矩阵求逆
例如我想解决Ax=y
,所以我使用下面的代码来做到这一点,其中A是一个方形矩阵,y是一个列。向量。在VBA中,A是一个二维数组,y是一维数组。但是,此代码不起作用...
x = WorksheetFunction.MMult(WorksheetFunction.MInverse(A), y)
我在哪里弄错了?谢谢!
我正在尝试使用数组进行一些计算。使用VBA进行数组乘法和矩阵求逆
例如我想解决Ax=y
,所以我使用下面的代码来做到这一点,其中A是一个方形矩阵,y是一个列。向量。在VBA中,A是一个二维数组,y是一维数组。但是,此代码不起作用...
x = WorksheetFunction.MMult(WorksheetFunction.MInverse(A), y)
我在哪里弄错了?谢谢!
你可以犯的许多错误的一种或多种:
Variant
(如果数据类型比Variant
其他的东西大部分worksheetfunctions将无法正常工作)。A
和y
不匹配,因为他们需要矩阵乘法。y
的尺寸是(1,2)
而不是(2,1)
,则不起作用,如下例所示。下面是工作的例子:
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)
设矩阵甲(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)个结果。当然,为了简化,你应该首先声明变量。我希望这个答案可以帮助你。
定义“不起作用”。 –
@Oli Charlesworth它什么都不返回,并停止运行... – BVFanZ
什么都没有?没有错误信息?请向我们展示可以做到这一点的代码...您是否试过在调试模式下逐步执行代码? –