如何提高MATLAB的运算速度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何提高MATLAB的运算速度相关的知识,希望对你有一定的参考价值。
我们使用MATLAB进行工程计算,由于循环次数和迭代计算的层数很多,运算速度太慢了,排除科学计算迭代方法的因素,从硬件和软件的角度有没有什么办法显著提高运算速度
MATLAB是一种解释性语言,从运行效率来说肯定远不如其他基本来语言。但还是有些方法可以提高运行速度的:
1、MATLAB擅长于矩阵运算,但并不适用于循环,能不用循环的地方尽量用矩阵运算代替。
2、对于大维度的矩阵,要预先确定它的维自度,比如用zeros(a,b,c)预先定义好,这样每次给矩阵赋值的时候就不用改变维度了,对运算速度的提高很明显,这点你可以用MATLAB自带的tic和toc命令测试。
3、对于多重循环的将长的循环放在内循百环。还有对有相似功能的命令的选择也对速度有影响。
如果对于计算量特别大的程序,用MATLAB是不怎么合适的,可以把计算部分用其他语言,比如FORTRAN来实现。
扩展资料:
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
参考资料来源:百度百科-MATLAB
参考技术A 根据我的一些经验和相关的参考资料,要想提高其运算的速度,以下的方法可以试一下:(1)尽可能地用向量化的数组运算代替循环,尽可能地减少使用户for或while循环,这是因为matlab执行循环运算效率很低而数组运算效率较高。举个最经典的例子,下面的循环:
k=0;
for t=0:pi/20:2*pi;
k=k+1;
y(k)=cos(t);end;
就可以用t=0:pi/20:2*pi;y=cos(t)代替,这样即减少代码量又能提高运算速度
(2)如果非要用循环的话尽可能进行循环内数组的预配置而不是让程序在循环中不断地动态配置,好比像C语言中要想使用数组必须先定义数组的长度一样,比如说如果想要做以下的循环:
k=0;
for t=1:1:20;
k=k+1;
y(k)=t^2;end;
可以事先定义y=linspace(0,0,20)即定义y为一个拥有20个0的一维数组,这样就相当于是事先对循环内的数组进行了预配置;
(3)尽可能采用MATLAB自带的函数指令,这些函数都是一些很经典的算法构成的,比如说要想找最大值就应用函数max而不是自己去编程序,这样只会事倍功半;
(4)尽量采用M函数文件替代M的脚本文件,因为函数文件运行时是采用P码方式驻留在内存中而不是像脚本文件一样每运行一次都要经历把程序装入内存的过程,因而比较省时;
(5)在循环比较费时的时候可以考虑采用非解释执行的MEX文件来对此进行表达;
(6)尽可能找出导致程序运行缓慢的瓶颈,可以在MATLAB的View:profiler中打开程序剖析器找出程序运行中的瓶颈,具体使用的方法请参考MATLAB的帮助或者在网上寻找;
(7)从硬件来看电脑的CPU或者内存(不是大小而是读写速度)可能会是瓶颈,在做大型运算时可以考虑较好的配置。
希望对你有所帮助!
参考资料:精通MATLAB6.5版
本回答被提问者采纳 参考技术B 首先,电脑的CPU配置要好一点!其次,将循环向量化!
再次,多使用Matlab的自带函数,这是提高运行速度的有效手段之一!
如何在matlab中提高多项逻辑回归(mnrfit)的速度
【中文标题】如何在matlab中提高多项逻辑回归(mnrfit)的速度【英文标题】:How to increase speed of Multinomial logistic regression (mnrfit) in matlab 【发布时间】:2018-06-29 20:58:41 【问题描述】:我在 Matlab 中使用多项逻辑回归 (mnrfit
) 命令对人脸识别问题(10 类)进行分类。
我使用降维方法将维度从 2500 减少到 d
。 d
在[10 400]
之间。
mnrfit
在 d
介于 [10 20]
之间时,几秒钟内就可以学习模型,但是当维度大于 20 时,学习阶段需要很多时间。
如何提高高维学习阶段的速度?
注意:我使用此命令进行学习。这个命令速度不错
[B,dev,stats] = mnrfit(F,Y','model','nominal','interactions','off');
但与默认命令相比,它的准确性较弱
[B,dev,stats] = mnrfit(F,Y','interactions','on');
我想在高维度上进行准确度高且速度快的多项逻辑回归,但我不知道该怎么做。
【问题讨论】:
【参考方案1】:我改了一些参数,终于找到了。
[B,dev,stats] = mnrfit(F,Y','model','hierarchical ','interactions','on');
此命令训练模型快速准确,而不是 nominal
模型类型。
【讨论】:
以上是关于如何提高MATLAB的运算速度的主要内容,如果未能解决你的问题,请参考以下文章