加速matlab运行的三重境界

转载 2004年08月18日 23:07:00

CTerm下载文章: 紫丁香★

发信人: fork (撒哈拉沙漠的沙), 信区: Matlab
标 题: 加速matlab运行的三重境界
发信站: BBS 哈工大紫丁香站 (Thu Jul 1 14:27:30 2004)

加速matlab运行的三重境界

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
一、 遵守Performance Acceleration的规则
二、 遵守三条规则
三、 绝招

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
一、 遵守Performance Acceleration的规则

关于什么是“Performance Acceleration”请参阅matlab的帮助文件。我只简要的将
其规则总结如下7条:
1、只有使用以下数据类型,matlab才会对其加速:
logical,char,int8,uint8,int16,uint16,int32,uint32,double
而语句中如果使用了非以上的数据类型则不会加速,如:numeric,cell,structu
re,single,

function handle,java classes,user classes,int64,uint64
2、matlab不会对超过三维的数组进行加速。
3、当使用for循环时,只有遵守以下规则才会被加速:a、for循环的范围只用标量值
来表示;
b、for循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数
据类型,只使用
三维以下的数组;c、循环内只调用了内建函数(build-in function)。
4、当使用if、elseif、while和switch时,其条件测试语句中只使用了标量值时,将
加速运行。
5、不要在一行中写入多条操作,这样会减慢运行速度。即不要有这样的语句:
x = a.name; for k=1:10000, sin(A(k)), end;
6、当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速
度。
7、应该这样使用复常量x = 7 + 2i,而不应该这样使用:x = 7 + 2*i,后者会降低
运行速度。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
二、 遵守三条规则

1、尽量避免使用循环,MATLAB的文档中写到“MATLAB is a matrix language, whic
h means it is designed

for vector and matrix operations. You can often speed up your M-file c
ode by using
vectorizing algorithms that take advantage of this design. Vectorizati
on means converting
for and while loops to equivalent vector or matrix operations.”。改进
这样的状况有两种方法:

a、尽量用向量化的运算来代替循环操作。如将下面的程序:

i=0;
for t = 0:.01:10
i = i+1;
y(i) = sin(t);
end
替换为:
t = 0:.01:10;
y = sin(t);
速度将会大大加快。最常用的使用vectorizing技术的函数有:All、diff、i
permute、permute、
reshape、squeeze、any、find、logical、prod、shiftdim、sub2ind、cums
um、ind2sub、
ndgrid、repmat、sort、sum 等。

请注意matlan文档中还有这样一句补充:“Before taking the time to

vectorize your code, read the section on Performance Acceleration.
You may be able to
speed up your program by just as much using the MATLAB JIT Accelera
tor instead of
vectorizing.”。何去何从,自己把握。

b、在必须使用多重循环时下,如果两个循环执行的次数不同,则在循环的外环执
行循环次数少的,
内环执行循环次数多的。这样可以显著提高速度。

2、a、预分配矩阵空间,即事先确定变量的大小,维数。这一类的函数有zeros、on
es、cell、struct、
repmat等。
b、当要预分配一个非double型变量时使用repmat函数以加速,如将以下代码:

A = int8(zeros(100));
换成:
A = repmat(int8(0), 100, 100);
c、当需要扩充一个变量的大小、维数时使用repmat函数。

3、a、优先使用matlab内建函数,将耗时的循环编写进MEX-File中以获得加速。
b、使用Functions而不是Scripts 。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
三、 绝招

你也许觉得下面两条是屁话,但有时候它真的是解决问题的最好方法。
1、改用更有效的算法
2、采用Mex技术,或者利用matlab提供的工具将程序转化为C语言、Fortran语言。


关于如何将M文件转化为C语言程序运行,可以参阅本版帖子:“总结:m文件转化为c/c++
语言文件,VC编译”。





----------------------------------------------
from mathtools @  http://bbs.sjtu.edu.cn
                        http://genial.yculblog.com

加速matlab运行的三重境界

加速matlab运行的三重境界 加速matlab运行的三重境界  %%%%%%%%%%%%%%%  一、 遵守Performance Acceleration的规则  二、 遵守三...
  • StefanSalvatore
  • StefanSalvatore
  • 2016年07月28日 10:38
  • 1034

加速matlab运行的三重境界

一、 遵守Performance Acceleration的规则  二、 遵守三条规则  三、 绝招  %%%%%%%%%%%%%%%%%  一、 遵守Performance Accele...
  • lqzdreamer
  • lqzdreamer
  • 2017年03月21日 19:08
  • 94

加速matlab运行的三重境界

加速matlab运行的三重境界  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
  • yundanfengqing_nuc
  • yundanfengqing_nuc
  • 2015年11月03日 16:04
  • 176

一般区域二重、三重积分MATLAB计算方法

这里讨论的计算方法指的是利用现有的MATLAB函数来求解,而不是根据具体的数值计算方法来编写相应程序。目前最新版的2009a有关于一般区域二重积分的计算函数quad2d,但没有一般区域三重积分的计算函...
  • u014650111
  • u014650111
  • 2014年10月28日 09:35
  • 1053

惊呼——SVM支持向量机三重境界!

转载自:原文 前言     动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需...
  • alwaystry
  • alwaystry
  • 2017年03月09日 11:34
  • 580

支持向量机通俗导论(理解SVM的三层境界)

支持向量机通俗导论(理解SVM的三层境界) 作者:July、pluskid ;致谢:白石、JerryLead 出处:结构之法算法之道blog。 前言  ...
  • macyang
  • macyang
  • 2014年08月23日 22:09
  • 205683

MATALB中对循环操作的优化

1:循环矢量化 通过以下例子可以很清楚看出矩阵的矢量化操作可以很大地提升运算速度,所以,尽量用矢量化操作来替代循环! 例子1: tic,s=0; for i=1:1000000 s=...
  • ljp1919
  • ljp1919
  • 2015年04月28日 14:30
  • 968

支持向量机通俗导论(理解SVM的三层境界)

from July,转载自:http://blog.csdn.net/v_july_v/article/details/7624837 hypervector算法优化数据挖掘 ...
  • nanjunxiao
  • nanjunxiao
  • 2013年05月27日 21:11
  • 7355

加快MATLAB运行速度的三个方法

转自:http://www.matlabfan.com/viewthread.php?tid=893&page=1&fromuid=1217#pid7449 一、 遵守Performance A...
  • sanji123456
  • sanji123456
  • 2013年04月15日 17:59
  • 2739

《从0到1》之企业经营的三重境界

《从0到1》之企业经营的三重境界 "从0到1"与"从1到n"的企业经营方式对比 _________从0到1_____|______从1到n________ 创新               ...
  • fireroll
  • fireroll
  • 2015年02月25日 17:18
  • 869
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:加速matlab运行的三重境界
举报原因:
原因补充:

(最多只允许输入30个字)