我有一个在linux上使用matlab接口的C++程序。当我运行C++程序时,我得到一个与区域设置数据库相关的错误:
MATLAB:I18n:LocaleDatabaseNotFound - Cannot find the MATLAB locale database.
The MATLAB process default locale is set to "en_US.US-ASCII".
这是什么意思?这个错误会导致严重的数值问题,还是仅仅是一个小警告?
嗨,我目前正在比较Matlab和Apache函数之间的统计数据。这里,Apache函数在Java中进行了测试。对于同一组数据,我从一个双数组(double[] )得到了如下不同的结果:
---------------------------------------
Matlab vs Apache
---------------------------------------
max = 0.5451 vs 0.5450980392156862
min = 0.4941 vs 0.49411764705882355
我已经用C++写了一个mex文件来提高MATLAB中慢“for循环”的速度。我已经写了两个版本,一个没有openMP,一个有。所获得的收益非常好,但是在测试计时时,我注意到,由于多线程,一个意外的结果:当mex文件传递回MATLAB时出现时间延迟。
我通过MATLAB中的主文件运行程序,该文件调用两个版本的mex文件,并使用tic-toc对它们进行计时;它还会自己计算循环。每个mex文件完成后,随着下一次计算的进行,时间将显示在MATLAB命令窗口中。此外,当多线程mex文件启动时,通过观察CPU使用率可以明显看出这一点,因为两个CPU都达到了100%。代码的格式为
Initial data
我得用matlab做一些计算。它已经在m文件中实现了,但是运行非常慢,因为有很多循环。其思想是编译本机代码,并在matlab中使用此代码。
现在我有两种可能性:
dynamicallyWrite 编写一个共享对象(.so od .dll文件),该对象加载到matlab a C(++)-MEX函数中。
在第一种情况下,matlab完成了与本机数据类型等的接口,在后一种情况下,我必须自己完成它。现在的问题是:什么更快/更好?我可以做到这两个,但我想获得尽可能多的速度。
谢谢