MATLAB代码优化

来源:互联网 发布:mysql 子查询不走索引 编辑:程序博客网 时间:2024/05/17 00:50


代码优化



两种方法:预分配数组、向量化循环

预分配数组:在进入一个计算数组元素的for循环之前,初始化数组为所希望输出的大小,调用函数zeros进行预分配
                    例如:function y =sinfun2(M)
                              x=0:M-1;
                              y=zeros(1,numel(x));     %预分配
                              for k = 1:numel(x)
                                   y(k)=sin(x(k)/(100*pi));
                              end
                    注意:如果没有使用预分配数组,则输出变量y每经过一个循环后都会增长一个元素大小,MATLAB将重新分配新的内存空间,并且在每次数组生长时都要复制前一数组元素,
                    这种频繁的内存分配和复制的开销非常大

函数tic和toc:测量函数执行的时间,例如:>>tic;sinfun1(100);toc

函数timeit:用于得到函数调用的可靠的、可重复的时间测量,例如:s=timeit(f)
                  例如:>>M = 100;
                            >>f=@() sinfun1(M);
                            >>timeit(f)
                 函数timeit与我们希望计时的函数的参数无关
 

向量化循环:使用矩阵/向量运算符、索引技术和现有的MATLAB或工具箱函数来完全消除循环的技术     

注意:我们首先应该编写正确且容易理解的代码,然后如果代码运行得不够快,则使用MATLAB的Profiler确定可能的故障点
0 0
原创粉丝点击