【问题标题】:Matlab vs. Visual C++? [closed]Matlab 与 Visual C++? [关闭]
【发布时间】:2009-05-26 05:48:39
【问题描述】:

我正在做一个使用大量图表的 Windows 应用程序。它实际上是一个数据查看器。我开始做 Matlab,因为它更容易,但我意识到它太慢了。我想换一种语言。有人向我推荐了 Visual C++ 或 Java。但我不确定。我应该使用什么语言??

【问题讨论】:

  • Matlab 可以根据需要进行优化。但是,这真的取决于你在做什么。你能详细解释一下吗。这样大家就可以轻松给你正确的答案了。

标签: c++ visual-studio-2008 matlab programming-languages


【解决方案1】:

在我看来,使用另一种“更快”的语言所获得的速度提升不如改进你的算法那么多。

MATLAB 的“问题”是它允许您做一些讨厌的事情,例如在紧密循环中调整矩阵大小。您真的应该尝试使用以下命令查明您的瓶颈:

  profile on
  ... run your program
  profile off
  profile report

这将为您提供有关哪个函数需要多长时间执行以及哪一行造成最大瓶颈的很好的信息。您还可以查看函数被调用的次数以及包含的 M-Lint 代码检查报告。

这些测量和提示可以向您显示算法的瓶颈。如果您确定没有办法使用更智能的算法来减少函数的调用次数/速度。比如我是否真的需要一个智能向量足够大的大二维矩阵,或者如果我找到了一个工件,我为什么还要继续搜索工件。您可以在 c/c++ 中编写遇到最多性能问题的函数,并将其用作 matlab 中的函数。您可以通过正确选择在 c/c++ 中实现的函数来获得很大的加速。从 MATLAB 调用 c/c++ 函数会产生大量开销,或者更准确地说,在 c/c++ 中从 MATLAB 获取数据会产生开销,因此调用 10000 次的函数并不是在 c 中实现的最佳选择/c++,你最好使用调用堆栈更高的函数。

【讨论】:

    【解决方案2】:

    这取决于您的要求。

    使用matlab的优势在于数值计算能力强。如果不需要,那么使用 matlab 没有任何优势。在这种情况下,所有这些语言都可以,还有许多其他语言(Python、C#、...)也是如此。这取决于您最使用哪种语言

    如果您确实想要 matlab 的优势,那么:

    1. 尝试在 matlab 中进行优化。大多数优化技术都与语言无关。
    2. 有一些工具可以自动将 matlab 转换为 C。然后,您可以尝试在所有优化的情况下进行编译。不过,我严重怀疑这是否会有很大帮助,尤其是考虑到 GUI 部分。

    【讨论】:

    • 问题是它可以处理大量数据,这会使应用程序变慢。我想要的是一个非常快的应用程序。我应该使用什么??
    • 您应该配置文件以查看一直占用的内容。选择一种不同的语言只是为了优化你正在做的事情似乎有点过头了。也许您花时间从磁盘逐行读取,而不是批量读取 RAM。需要更多信息才能做出准确回应。
    【解决方案3】:

    首先,正如其他答案所提到的,您需要分析您的代码以找出瓶颈所在。我会查看Doug Hull's blog at The MathWorks,特别是this entry about using the profiler。这将帮助您找出所有工作在您的代码中完成的位置。

    如果减速的原因与数据处理有关,可能有多种方法可以加快速度(矢量化、编写 mex 文件等)。

    如果减速的根源是您的 GUI,这可能更容易解决。 Doug 和other MathWorkers 都发表了许多博客文章,我已经看到这些文章涉及GUI 设计。也有一些关于 SO 处理它的问题 (here's one)。如果您正在处理显示非常大的数据集,this submission from Jiro Doke MathWorks 文件交换可能有助于加快处理速度。

    很难给你更具体的建议,因为我不知道你是如何设计你的 GUI,但如果这成为显示数据的瓶颈,那么有很多资源可以用来提高它的速度 在您经历切换到另一种语言的麻烦之前。

    【讨论】:

      【解决方案4】:

      不要忘记您可以在 C++ 中创建可以从 Matlab 调用的函数。而 TADA,您可以访问这两种环境!

      【讨论】:

        【解决方案5】:

        我会使用 C#。它比 C++ 更容易,并且与 Windows 平台集成得很好。只需为它找到一个免费的图形库,你就可以开始了。

        根据您的语言偏好,还有很多其他选项。例如。 Qt 与 Python 或 C++。

        【讨论】:

          【解决方案6】:

          据我所知,最常用的方法是先在Matlab上做概念证明或者只是主要算法,因为它易于使用和数学计算方便,然后将其翻译成“真正的”编程语言,以提高性能。通常 C 或 C++ 充当“真正的”语言,但在您的情况下,目标是做一个 Windows 应用程序,也许 C# 将是最好的选择。

          【讨论】:

            【解决方案7】:

            我发现如果您的应用程序变得更复杂,在 MATLAB 中进行 GUI 编程会变得非常糟糕。 BTW MATLAB 也可以很容易地从 Java 中调用(反之亦然,当前版本基本上提供了交互式 Java 控制台)。

            【讨论】:

              【解决方案8】:

              顺便说一句,如果您仍然需要 Matlab 的数学能力,您可能需要查看Scilab。它是开源和免费的,并且它有如何与其他 C# 或 C++ 集成的示例。我创建了 Scilab 在后台运行的项目以执行所有数据数学运算;并使用 C# 的 ZedGraph 库显示它们。像魔术一样工作!

              【讨论】:

                【解决方案9】:

                我建议您使用 Java 和 JFreeChart (http://www.jfree.org/jfreechart/) 库。我发现开发具有大量不同类型图表的应用程序非常容易(且快速)。如果不需要特别快的性能,可以使用 Java。我想 C# 也有类似的库,但我不确定。

                【讨论】:

                  【解决方案10】:
                  • Matlab 和 Scilab 的替代品是另一个免费软件:Octave。 我不了解 Scilab,但 Octave 语法与 matlab 几乎相同,因此您可以轻松导入代码。

                  如果您需要花哨的工具箱,Scilab 和 Octave 可能会让您失望,所以请检查一下。

                  您可以在 C++ 程序中执行 Octave 函数: http://en.wikipedia.org/wiki/GNU_Octave

                  • 我不认为您可以从您的 C++ 程序中调用您自己的 m 文件函数。过去,Matlab 编译器允许用户在不安装 Matlab 的情况下运行 matlab 程序,但在不安装一个巨大的库(如果我没记错的话是 250 MB)的情况下也是如此。没关系,如果您的 Matlab 程序占用 20 kB,您必须分发庞大的库。 请有人对今天的情况进行编辑/评论!

                  我已经有一段时间没有使用 Matlab 的 GUI“功能”了,但那时(2005 年)我觉得它很糟糕。丑陋,难用,很难维护,取决于用户对windows参数的设置。 也请对此发表评论或编辑,他们可能已经取得了进展!

                  如果他们没有,我相信 Matlab 不是您想要交付给任何人的程序的方法。

                  如果您可以使用 Visual Studio 来制作您的 GUI,那就这样做吧。我赞同早先的意见:随心所欲。 如果您需要 Matlab 函数,请选择您喜欢的支持 Matlab 库的函数。

                  【讨论】:

                    【解决方案11】:

                    首先,Visual C++ 不是一种语言,它是一种用于开发应用程序的 IDE。

                    第二...你知道哪些语言?您可以有多种选择。看看:

                    • C++ + Qt(我的首选,功能强大且易于理解)
                    • C# + .NET 或 WPF
                    • Java

                    如果您能提供更多信息,我们可以找到符合您需求的语言。

                    【讨论】:

                      猜你喜欢
                      • 2012-02-22
                      • 2023-03-30
                      • 2012-05-03
                      • 2012-08-17
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-09-06
                      • 2015-01-21
                      • 1970-01-01
                      相关资源
                      最近更新 更多