使用VBA求解大型方程组

时间:2015-11-19 19:00:19

标签: excel vba

我正在尝试解决由估计四阶微分方程得到的方程组。要做到这一点,需要创建一个大矩阵(A),通常为105 x 105,采用逆矩阵乘以105 x 1矩阵(B)。为此,我使用线性代数方法求解Ax = B.

运行以下代码:

Dim A(1 To 105, 1 To 105) As Double
Dim B(1 To 105) As Double
Dim i As Integer

' Used to make sure all values of A are initialized to zero 
For i = 1 To 105
    For j = 1 To 105
        A(i, j) = 0
    Next
Next

For i = 1 To 105
    A(i, i) = EI
    A(i, i + 1) = -4 * EI + axial * h ^ 2
    A(i, i + 2) = 6 * EI - 2 * axial * h ^ 2 + km(i) * h ^ 4
    A(i, i + 3) = -4 * EI + axial * h ^ 2
    A(i, i + 4) = EI

B(i) = W * h ^ 4

Next
Dim x(1 To 105) As Variant
x = Application.WorksheetFunction.MMult((Application.WorksheetFunction.MInverse(A)), B)

导致“运行时错误'1004':无法获取WorksheetFunction类的MInverse属性”

我已经探究过这个错误了,它似乎意味着我将错误数据传递给函数文本或空白值,所以我在顶部添加了两个循环来将矩阵A初始化为0但是这没有做任何事情。在探索了一些之后,我发现了一些关于矩阵最大尺寸为52 x 52但却无法找到更多相关信息的文章。

1 个答案:

答案 0 :(得分:0)

是的,如官方文档中所述,限制为52 x 52。

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheetfunction.minverse.aspx

修改

文档似乎有误。我测试了=MINVERSE(A1:DA105),效果很好。

您的矩阵很可能包含生成非常大数字的数字而且失败。我填充了我的矩阵105行,数字从1到105,但它失败了。然后我将=RAND()放在所有单元格中并且它有效。

如果大数字是问题,也许有一些技巧,比如用数字的对数填充矩阵。这是我在其他情况下使用的技巧,我不知道它是否可以与矩阵一起使用。