同样功能的程序,matlab 为什么比VC++6.0 运行慢很多

同样功能的程序,matlab 为什么比VC++6.0 运行慢很多,第1张

开发的层次不一样。VC更接近于系统低层,甚至可以直接访问硬件,效率很高。编译后的代码能独立运行。而matlab则是封装了许多功能的一个应用软件,其开发的程序必须在这个系统的支持下才能运行,效率低是肯定的。甚至matlab这个软件也是用C语言编写的。

MATLAB是一种解释性语言,从运行效率来说肯定远不如其他基本语言。但还是有些方法可以提高运行速度的:

1,MATLAB擅长于矩阵运算,但并不适用于循环,能不用循环的地方尽量用矩阵运算代替;

2,对于大维度的矩阵,要预先确定它的维度,比如用zeros(a,b,c)预先定义好,这样每次给矩阵赋值的时候就不用改变维度了,对运算速度的提高很明显,这点你可以用MATLAB自带的tic和toc命令测试。

3对于多重循环的将长的循环放在内循环。还有对有相似功能的命令的选择也对速度有影响。

如果对于计算量特别大的程序,用MATLAB是不怎么合适的哦,你可以把计算部分用其他语言,比如FORTRAN来实现。

在matlab中, 当数据比较大时,运算起来就困难了,有时候还会out of memory(例如40004000的矩阵,要算矩阵乘法都比较吃力)。此文会记录我学到的一些解决办法:

1 将数据的存储类型从double转换成single

在matlab中double数据类型占8个字节,single类型占4个字节。把数据类型从double类型转换成single类型可以节省一半的空间。

单精度浮点数single的取值范围可以通过[-realmax('single'), -realmin('single')] U [ realmin('single'), realmax('single')]查看,可以发现其范围一般是足够我们使用了。

2 避免使用高维矩阵

当数据量很大时,使用高维矩阵无疑是雪上加霜,可以考虑使用多个低维矩阵。

例如有3个NN的矩阵(K1,K2,K3),为了程序书写的方便,可以把这三个矩阵保存在一个NN3的矩阵K中,那么使用这三个矩阵时就只通过K来访问。但是,当N比较大时,三维矩阵K就更大了,很容易造成out of memory。 所以为了避免out of memory,还是使用多个二维矩阵比较好(与其分配一个更大的空间给K,不如分配多个小矩阵,虽然总量一样),可是这样取用这三个矩阵却不方便了。下面给出我的解决方案:

N = 5000;

K1 = rand(N,N);

K2 = rand(N,N);

K3 = rand(N,N);

a = ['K1'; 'K2'; 'K3']; % 将这三个矩阵的名字存成字符串矩阵

B1=eval(a(1,:)); % 通过eval()函数来取用K1

B2=eval(a(2,:)); % 取用K2

B3=eval(a(3,:)); % 取用K3

这里用到的eval函数的功能强大,可以将字符串的内容当做matlab命令来执行(Execute string containing MATLAB expression)

3 及时清理不用变量,特别是大数据矩阵。及时清理可以腾出空间。同时,在生成矩阵的时候最好一次性申请足够的空间,不要在程序运行的时候变化矩阵大小。

4 如有可能,尽量采用矩阵元素之间的运算,而不是直接的矩阵乘法

以上就是关于同样功能的程序,matlab 为什么比VC++6.0 运行慢很多全部的内容,包括:同样功能的程序,matlab 为什么比VC++6.0 运行慢很多、如何加快matlab程序的运行速度、MATLAB矩阵过大,导致程序崩溃怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10110572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存