Matlab高效编程技巧与经验分享

都说matlab简单易上手,但是在用matlab的过程中会有很多很多的问题

一、如何确定能存放的最大数组的维数



由于数组是占据一段连续的内存,而matlab默认的数据格式是double,占用8个字节,我们看到最大的连续内存是605MB,我们计算一下便知最多能存放75626000左右个数。如果我们不清除变量a,下一个存放的数组的占用的内存必须小于291MB。


二、预分配内存

clear;

  tic;

  for i=1:500

      for j=1:10000

         a(i,j)=i+j;

      end

  end

  toc;

%Elapsed time is 3.507443 seconds.

  clear a

  a=zeros(500,10000,'double'); %预分配内存

  tic

  for i=1:500

      for j=1:10000

         a(i,j)=i+j;

      end

  end

  toc;

  %Elapsed time is 0.163536 seconds.

三、向量化编程

这里,分享一个我的算例,使用repmat函数 (具体用法百度即可),大幅度提升了运算的速度

%使用for循环,用时327.737351 秒

IDP=1500;ntime=61368;

  r = (ntime-1)/(IDP-1);  

  S1 = zeros(ntime,IDP,'double');

  xi=zeros(1,IDP,'double');

  for i=1:IDP

     xi(i)=(i-1)*r+1;

  end

  tic

  for i=1:IDP

      for t=1:ntime

         S1(t,i)=sinc((t-xi(i))/r);

      end

  end

  toc

%使用repmat函数,用时仅 1.981046 秒 ,矩阵S和S1完全一致

IDP=1500;ntime=61368;

  r = (ntime-1)/(IDP-1);  

  S = zeros(ntime,IDP,'double');

  xi=zeros(1,IDP,'double');

  for i=1:IDP

     xi(i)=(i-1)*r+1;

  end

  tic

  t=1:ntime;t=t';

  tt=repmat(t,1,IDP);  

  xii=repmat(xi,ntime,1);

  S=sinc((tt-xii)/r);

  toc


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空