2015-11-19 60 views
0

我正试图求解由估计四阶微分方程得到的方程组。要做到这一点,需要创建一个大矩阵(A),通常为105 x 105,取反并乘以105 x 1矩阵(B)。要做到这一点,我使用了线性代数方法解决斧= B.使用VBA求解大系统的方程

运行下面的代码:

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’:无法获取MINVERSE财产的工作表功能类“

我探讨了这个错误,它似乎意味着我传递坏数据的函数文本或空值,所以我添加了两个循环在顶部初始化矩阵A为0然而这没有做什么。在探索了更多之后,我发现了一些关于最大尺寸为52×52的矩阵,但无法找到关于此的更多信息。

+0

52 x 52的限制在2007年版本中取消了,我相信但是大矩阵常常接近单数,我猜这是这里的问题。相反,尝试搜索反转稀疏矩阵的方法,这对于这类问题可以更加高效和准确。还要注意代码中的最后一个参数需要转置。 –

回答

0

是的,如正式文档中所述,限制为52 x 52。

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

编辑

的文件似乎是错误的。我测试了=MINVERSE(A1:DA105),它运行良好。

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

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

+0

谢谢,我将探讨解决方程组的其他方法。 –

+0

@AndrewGulbronson如果您发现它有用,请记住接受该答案。 –

+0

有趣的是,我只是在我的机器上运行了相同的测试,并没有奏效。感谢后续,但! –