Matlab和Visual C++哪个更好?

3

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


3
如果需要,MATLAB可以进行很好的优化。但是这取决于你在做什么。你能否详细解释一下?这将有助于让每个人都给出正确的答案。 - Rook
11个回答

11

我个人认为,采用另一种“更快”的语言所带来的速度提升并不如改进算法那样显著。

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++ 中实现的,您最好选择调用堆栈中更高层次的函数。


3
这取决于您的需求。 使用matlab的优点是它在数值计算方面很强大。如果您不需要这个,那么使用matlab就没有优势了。在这种情况下,所有这些语言都可以,并且还有许多其他语言(Python,C#...)也可以。这取决于您最舒适的语言。 如果您确实想要matlab的优势,则可以尝试以下操作: 1. 在matlab中进行优化。大多数优化技术都与语言无关。 2. 有工具可以自动将matlab翻译成C语言。然后您可以尝试使用所有优化进行编译。但是考虑到GUI部分,我真的怀疑这不会有太大帮助。

问题在于它处理大量数据时会使应用程序变慢。我想要一个非常快的应用程序。我应该使用什么? - francisco arevalo
1
你应该进行性能分析,以查看哪些操作占用了大量时间。为了优化你的操作而选择不同的编程语言似乎有些过度。也许你花费了大量时间从磁盘逐行读取数据,而不是批量读取到内存中。需要更多信息才能给出准确的回答。 - Gilad Naor

3
首先,正如其他回答所提到的那样,您需要对代码进行分析以找出瓶颈所在。我建议查看The MathWorks上Doug Hull的博客,特别是关于使用分析器的这篇文章。这将帮助您找出代码中所有工作的地方。
如果减速的原因与数据处理有关,则可能有多种方法可以加快速度(向量化、编写mex文件等)。
如果减速的来源是您的 GUI,那么解决问题可能更加容易。我看到 Doug 和其他 MathWorkers 的许多博客文章都在处理 GUI 设计问题。在 SO 上也有一些相关问题(这是其中一个)。如果您要处理显示非常大的数据集,则 MathWorks 文件交换中心的 Jiro Doke 提交可能会帮助加快速度。
由于我不知道您如何设计 GUI,因此很难给出更具体的建议,但如果 GUI 是显示数据的瓶颈,那么在切换到其他语言之前,有许多资源可以用来提高其速度。

2
不要忘记你可以在C++中创建函数,并从Matlab中调用。这样,你就可以同时访问两个环境!

1

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

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


1
据我所知,最常见的方法是先在Matlab上进行概念验证或主要算法,因为它易于使用且方便进行数学计算,然后将其翻译成“真正”的编程语言以提高性能。通常情况下,C或C++作为“真正”的语言,但在您的情况下,如果目标是创建Windows应用程序,那么C#可能是最好的选择。

1
我发现如果你的应用程序变得更加复杂,MATLAB 中的 GUI 编程可能会变得非常棘手。顺便说一句,MATLAB 也可以很容易地从 Java 调用(反之亦然,当前版本基本上提供了一个交互式的 Java 控制台)。

1
作为一则侧面说明,如果你仍需要 Matlab 的计算能力,可以考虑 Scilab。它是开源的并且免费的,它有集成其他 C# 或 C++ 的示例。我创建了项目,其中 Scilab 在后台运行以执行所有数据数学运算; 并使用 C#'s ZedGraph 库显示它们。 非常好用!

1

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


0
首先,Visual C++不是一种语言,而是用于开发应用程序的IDE。
其次……你知道哪些语言?你有几个选项。看看:
  • C++ + Qt(我偏爱的选项,强大且易于理解)
  • C# + .NET或WPF
  • Java
如果您能提供更多信息,我们可以找到符合您需求的语言。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接