最快的Matrix逆向Excel VBA

时间:2016-03-07 19:37:25

标签: excel vba matrix inverse

我有许多具有许多未知数的方程式(我的数据在Excel中),目前我正在使用矩阵方法来解决它们。 我使用内置的MMULT(矩阵乘法)和MINVERSE(矩阵逆)以下形式: - Result = MMULT(MINVERSE(matrix1),matrix2) 这就是问题所在,我的矩阵大约是2000 x 2000或更多,而Excel需要花费大量时间进行逆向运算(矩阵乘法非常快)。

加快这个过程的最佳方法是什么?我不介意将数据导出到任何外部第三方程序(与Excel兼容),然后将反转矩阵导回Excel。

我不太了解C / C ++,但我觉得如果我们将矩阵反转函数编译成DLL然后从excel VBA中使用它,也许速度会提高。请帮忙。

请参阅以下链接: Why is MATLAB so fast in matrix multiplication?

发现MATLAB具有最高的矩阵计算速度。我们可以在Excel / VBA中使用任何这样的库吗?

我找到了某些库,如LAPACK,ARMADILO等,它们都是C / C ++ / C#或.NET。如何在Excel VBA中使用这些库的编译版本?

1 个答案:

答案 0 :(得分:2)

我是John Coleman链接的博客的作者。根据您对编译和链接到不同语言的熟悉程度,有很多选项可供选择。我会说主要选项是(为了易于实现):

  1. 将Python Numpy和Scipy库与ExcelPython或xlwings(现在包含ExcelPython)一起使用。我博客上关于这个主题的最新帖子(包括免费下载)是: https://newtonexcelbach.wordpress.com/2016/01/04/xlscipy-python-scipy-for-excel-update-with-new-functions/
  2. 优点: 自由 易于实现(特别是使用Anaconda Python,现在包括xlwings) 无需编译。

    Scipy代码很快,并且包含稀疏矩阵的包,在适用的情况下,这对解决时间和可以处理的矩阵的最大大小产生巨大影响。

    我的博客上提供免费和开源的电子表格实现。

    缺点: 将大型数据集从VBA传输到Python的开销可能很大,实际上对于中小型矩阵,它通常大于解决方案时间。

    1. 使用Alglib库的Python版本。在我的博客中搜索Alglib,了解使用Python的最新示例,以及使用C ++和C#的旧示例。
    2. 优点和缺点: 至于Numpy和Scipy,除了还有一个商业版本,可能会提供性能优势(我还没试过)。

      1. 使用Numpy / Scipy和Pyxll。 https://newtonexcelbach.wordpress.com/2013/09/10/python-matrix-functions-using-pyxll/用于示例电子表格。
      2. 优点: 应大大减少数据传输开销。 更成熟和文档比当前的xlwings更好。

        缺点: 商业包装(但免费用于评估和非商业用途) 不是开源的。

        1. 使用Visual Studio或其他编译器的开源C ++或Fortran软件包生成基于xll的函数。
        2. 优点: 可能是最好的全方位表现。

          缺点: 需要更多编码。 实施起来比较困难,特别是如果你想分发给别人。 32位/ 64位问题可能难以解决。

          正如评论中所提到的,矩阵求逆比其他矩阵求解方法慢得多,但即使考虑到这一点,内置的Excel矩阵函数与其他编译例程相比也非常慢,并且安装其中一个替代方案的优势上面列出的是非常值得的。