ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:22.50KB ,
资源ID:3232594      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3232594.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MATLAB代码矢量化指南.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MATLAB代码矢量化指南.docx

1、MATLAB代码矢量化指南“遵守Performance Acceleration的规则 关于什么是“Performance Acceleration”请参阅matlab的帮助文件。我只简要的将其规则总结如下7条:1、只有使用以下数据类型,matlab才会对其加速:logical,char,int8,uint8,int16,uint16,int32,uint32,double 而语句中如果使用了非以上的数据类型则不会加速,如:numeric,cell,structure,single,function handle,java classes,user classes,int64,uint642、

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、当某条操作改变了原来变量的数据类型或形

3、状(大小,维数)时将会减慢运行速度。7、应该这样使用复常量x = 7 + 2i,而不应该这样使用:x = 7 + 2*i,后者会降低运行速度。”“尽量用向量化的运算来代替循环操作。如将下面的程序: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、ipermute、permute、reshape、ueeze、y、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、nd

4、grid、repmat、sort、sum 等。”“优先使用matlab内建函数,将耗时的循环编写进MEX-File中以获得加速。b、使用Functions而不是Scripts 。”“ 绝招:你也许觉得下面两条是屁话,但有时候它真的是解决问题的最好方法。1、改用更有效的算法2、采用Mex技术,或者利用matlab提供的工具将程序转化为C语言、Fortran语言。关于如何将M文件转化为C语言程序运行,可以参阅本版帖子:“总结:m文件转化为c/c+语言文件,VC编译”。 ”除了m程序提速的问题,这里还列出了MATLAB代码矢量化指南(译)一、基本技术 - 1)MATLAB索引或引用(MATLAB I

5、ndexing or Referencing) 在MATLAB中有三种基本方法可以选取一个矩阵的子阵。它们分别是 下标法,线性法和逻辑法(subscripted,linear, and logical)。 如果你已经熟悉这个内容,请跳过本节 1.1)下标法 非常简单,看几个例子就好。 A = 6:12; A(3,5) ans = 8 10 A(3:2:end) ans = 8 10 12 A = 11 14 17; 12 15 18;13 16 19; A(2:3,2) ans = 15 16 1.2)线性法 二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号 来访问元素。 A =

6、 11 14 17;12 15 18;13 16 19; A(6) ans = 16 A(3,1,8) ans = 13 11 18 A(3;1;8) ans = 13 11 18 1.3)逻辑法 用一个和原矩阵具有相同尺寸的0-1矩阵,可以索引元素。在某个位置上为1表示选取元素,否则不选。得到的结果是一个向量。 A = 6:10; A(logical(0 0 1 0 1) ans = 8 10 A = 1 2 3 4; B = 1 0 0 1; A(logical(B) ans = 1 4 - 2)数组操作和矩阵操作(Array Operations vs. Matrix Operation

7、s) 对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为一个整体进行的运算则成为矩阵操作。MATLAB运算符*,/,都是矩阵运算,而相应的数组操作则是.*, ./, ., . A=1 0 ;0 1; B=0 1 ;1 0; A*B % 矩阵乘法 ans = 0 1 1 0 A.*B % A和B对应项相乘 ans = 0 0 0 0 - 3)布朗数组操作(Boolean Array Operations) 对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。因此其结果就不是一个“真”或者“假”,而是一堆“真假”。这个结果就是布朗数组。 D = -0.2 1.0 1.5 3.0

8、 -1.0 4.2 3.14; D = 0 ans = 0 1 1 1 0 1 1 如果想选出D中的正元素: D = D(D0) D = 1.0000 1.5000 3.0000 4.2000 3.1400 除此之外,MATLAB运算中会出现NaN,Inf,-Inf。对它们的比较参见下例 Inf=Inf返回真 Inf1返回假 NaN=NaN返回假 同时,可以用isinf,isnan判断,用法可以顾名思义。在比较两个矩阵大小时,矩阵必须具有相同的尺寸,否则会报错。这是 你用的上size和isequal,isequalwithequalnans(R13及以后)。 - 4)从向量构建矩阵(Const

9、ructing Matrices from Vectors) 在MATLAB中创建常数矩阵非常简单,大家经常使用的是: A = ones(5,5)*10 但你是否知道,这个乘法是不必要的? A = 10; A = A(ones(5,5) A = 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 类似的例子还有: v = (1:5); n = 3; M = v(:,ones(n,1) M = 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 事实上,上述过程还有一种更加容易理解的实现方法

10、: A = repmat(10,5 5); M = repmat(1:5, 1,3); 其中repmat的含义是把一个矩阵重复平铺,生成较大矩阵。更多详细情况,参见函数repmat和meshgrid。 - 5)相关函数列表(Utility Functions) ones 全1矩阵 zeros 全0矩阵 reshape 修改矩阵形状 repmat 矩阵平铺 meshgrid 3维plot需要用到的XY网格矩阵 ndgrid n维plot需要用到的XYZ.网格矩阵 filter 一维数字滤波器,当数组元素前后相关时特别有用。 cumsum 数组元素的逐步累计 cumprod 数组元素的逐步累计 e

11、ye 单位矩阵 diag 生成对角矩阵或者求矩阵对角线 spdiags 稀疏对角矩阵 gallery 不同类型矩阵库 pascal Pascal 矩阵 hankel Hankel 矩阵 toeplitz Toeplitz 矩阵 = 二、扩充的例子 - 6)作用于两个向量的矩阵函数 假设我们要计算两个变量的函数F F(x,y) = x*exp(-x2 - y2) 我们有一系列x值,保存在x向量中,同时我们还有一系列y值。我们要对向量x上的每个点和向量y上的每个点计算F值。换句话说,我们要计算对于给定向量x和y的所确定的网格上的F值。 使用meshgrid,我们可以复制x和y来建立合适的输入向量。

12、然后 可以使用第2节中的方法来计算这个函数。 x = (-2:.2:2); y = (-1.5:.2:1.5); X,Y = meshgrid(x, y); F = X .* exp(-X.2 - Y.2); 如果函数F具有某些性质,你甚至可以不用meshgrid,比如 F(x,y) = x*y ,则可以直接用向量外积 x = (-2:2); y = (-1.5:.5:1.5); x*y 在用两个向量建立矩阵时,在有些情况下,稀疏矩阵可以更加有 效地利用存储空间,并实现有效的算法。我们将在第8节中以一个 实例来进行更详细地讨论. - 7)排序、设置和计数(Ordering, Setting,

13、and Counting Operations) 在迄今为止讨论过的例子中,对向量中一个元素的计算都是独立于同一向量的其他元素的。但是,在许多应用中,你要做的计算则可能与其它元素密切相关。例如, 假设你用一个向量x来表示一 个集合。不观察向量的其他元素,你并不知道某个元素是不是一 个冗余元素,并应该被去掉。如何在不使用循环语句的情况下删除冗余元素,至少在现在,并不是一个明显可以解决的问题。 解决这类问题需要相当的智巧。以下介绍一些可用的基本工具 max 最大元素 min 最小元素 sort 递增排序 unique 寻找集合中互异元素(去掉相同元素) diff 差分运算符X(2) - X(1), X(3) - X(2), . X(n) - X(n-1) find 查找非零、非NaN元素的索引值 union 集合并 intersect 集合交 setdiff 集合差 setxor 集合异或 继续我们的实例,消除向量中的多余元素。注意:一旦向量排序后,任何多余的元素就是相邻的了。同时,在任何相等的相邻元素在向量diff运算时变为零。这是我们能够应用以下策略达到目的。我们现在在已排

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1