0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

几个Matlab编程中常用的优化技巧

电子设计 来源:电子设计 作者:电子设计 2022-02-08 15:18 次阅读

作者:猫叔来源:科学计算Tech微信公众号

用过Matlab的同学应该都知道,Matlab的慢是出了名的,但是再慢也有优化的方式,下面我们给出几个Matlab编程中常用的优化技巧。

在讲优化方法之前,首先要说的就是Matlab中用tic toc的方式来计算运行时间,这是个常识。当然,想统计具体的耗时,可以用profile工具。

1. 向量化操作

这个应该是用过Matlab的同学都清楚的一点,Matlab中操作向量和矩阵的速度要比使用for循环的速度快很多,是因为其底层调用了高性能线性代数库BLAS库和LAPACK库。这个就不多说了。

2. 内存预分配

在Matlab中我们可以定义一个空矩阵

mtx = [];

然后后面再给它加入一些数据,而且这个矩阵大小可以随着我们填入数据的多少而变化。像下面这个程序

tic n = 1000; mtrx = []; init = 1.0; for i = 1:n for j=1:n mtrx(i,j) = init + 1.0; end end toc

这个程序的运行时间是多久呢?在我电脑上是0.2秒。

那这个程序有什么问题呢?就是我们没有为这个矩阵分配一个内存空间,而且在循环中,矩阵大小是变化的,这就导致每次循环时都浪费额外的时间去寻找满足需求的内存空间,将改变大小后的矩阵整体移动到这个新的内容空间中,并释放原来的内存空间,这除了会影响代码的运行效率,还容易形成内存碎片,让程序越来越难找到满足条件的内存。

因此在循环前给矩阵预分配内存是很一个良好的习惯,如果没有这个习惯,你还可以通过Matlab自带的代码检查器来查看是否存在类似问题。

所以,我们应该把程序修改如下:

tic n = 1000; mtrx = zeros(n,n); init = 1.0; for i = 1:n for j=1:n mtrx(i,j) = init + 1.0; end end toc

这个程序只用了0.007秒的时间就运行完成了,可见它们的差距有多大。

3. 按列存储

Matlab中默认是按列存储的,也就是说,列向量在内存中是连续排列的,对连续的数据做处理肯定是要快的,所以我们在定义向量时一般都会使用列向量。下面对比矩阵中对行做操作和对列做操作花费的时间。

n = 10000; mtrx = rand(n,n); mcol = zeros(n,1); mrow = zeros(1,n); tic for i=1:n mcol(i) = sum(mtrx(:,i)); end toc

我们对矩阵中的每一列都求和,总共用了0.17秒。

tic for i=1:n mrow(i) = sum(mtrx(i,:)); end toc

再对矩阵中的每一行求和,用了0.8秒。
可以看出,对列操作比对行操作速度要快很多。

4. 数据类型

在Matlab中,数据类型默认是double型,对使用者来说,无需太多关心数据类型当然是省心省力的,但这也带来了一个问题就是double型占用的内存较多,还有可能拖慢程序的运行速度。所以,在适当的情况下,我们可以把数据类型选择为逻辑型、字符型、整型等。但这样还需要注意的一点是,一个变量在改变数据类型时会消耗额外的时间,因此还不如重新建一个新变量。

高效编程的内容就先写这么多,后面还会继续补充。下面说一个Matlab调试中断点设置问题。在一个for循环中,比如for i=1:n,我们想在i=100的进入断点,这个时候应该怎么用?以前的时候我们都会这么写。

for i=1:n if(i==100) pass end end

把断点设置在pass处,但其实不用这么弄。Matlab中提供了条件断点的设置方式。在循环中右键选择设置条件断点。

Figure 1. 条件断点设置1

在下面的窗口中填入条件即可,比如i==100。

Figure 2. 条件断点设置2

这样,当程序运行到i==100时就会进入断点,不需要自己再写额外的语句。

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2924

    浏览量

    228470
收藏 人收藏

    评论

    相关推荐

    分享几个嵌入式中常用的GUI

    交互,完成各种操作,可提高工作效率以及用户体验。接下来看一下我们开发中常用的GUI框架有哪些吧~二、开源轻量级显示框架LVGLLVGL(LightandVersat
    的头像 发表于 04-06 08:09 180次阅读
    分享<b class='flag-5'>几个</b>嵌入式<b class='flag-5'>中常用</b>的GUI

    java中常用的包有哪些

    Java是一种面向对象的高级编程语言,它具有平台无关性和可扩展性。Java中有很多常用的包,这些包提供了丰富的类库和工具,用于开发各种类型的应用程序。下面是Java中一些常用
    的头像 发表于 11-22 15:10 552次阅读

    gvim中常用的一些指令介绍

    在 Vim 编辑器中,有一些常用的指令可以帮助我们更高效地编辑文本。以下是一些在 gvim 中常用的指令
    的头像 发表于 10-10 15:47 905次阅读

    认识一下几个常用的门级电路

    标准单元库是数字集成电路的积木,是复杂电路和系统的基础。今天我们来认识一下其中的几个常用门级电路。
    的头像 发表于 10-09 15:49 568次阅读
    认识一下<b class='flag-5'>几个</b><b class='flag-5'>常用</b>的门级电路

    伺服电机中常用的绝缘材料介绍

    伺服电机中常用的绝缘材料,按其耐热能力可分为A、B、C、H、F和E等级
    发表于 10-07 18:27 452次阅读

    列举一些C语言中常用的宏定义

    写好C语言,使用宏定义可以防止出错,提高可移植性、可读性等。下文列举一些成熟软件中常用的宏定义。
    发表于 10-07 10:54 232次阅读
    列举一些C语言<b class='flag-5'>中常用</b>的宏定义

    MATLAB编程优化中的应用介绍

    机会。与前几年的高级编程语言相比,这些软件系统非常容易掌握。本书主要试图利用这种三角服务,为设计优化的研究提供一种实用的方法。这本书使用MATLAB@toillustrate并实现各种优化
    发表于 09-21 07:07

    物联网中常用的传感器有哪些

    、风速、声音等,然后将这些信息发送到控制中心或其他设备。本文将介绍物联网中常用的传感器,包括以下几个方面: 1. 温度传感器 温度传感器是物联网中最常见的传感器之一,它可以测量环境中的温度。温度传感器广泛应用于工业
    的头像 发表于 09-08 11:23 3449次阅读

    FPGA中常用的存储器资源

    本文主要介绍FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等资源,包括特性、工作原理、应用场景等。
    发表于 08-15 15:41 1481次阅读

    C++中常用关键字详解(1)

    以然。因此,在平时和小伙伴们聊天时,在谈到学习技术方面的问题,我会告诉他们注重基本功。所以,最近文章会总结一些日常编程工作中常用的重要基本知识点,根据平时工作中常用的也是重要的知识点逐步展开。
    发表于 08-08 16:15 144次阅读

    MATLAB常用基本函数 MATLAB使用技巧

      MATLAB常用的基本数学函数  abs(x):纯量的绝对值或向量的长度  angle(z):复 数z的相角(Phase angle)  sqrt(x):开平方  real(z):复数
    发表于 07-19 09:52 0次下载

    MATLAB语言编程方法 MATLAB实现信号通过系统的仿真

      实验目的:  1、 学习MATLAB语言的编程方法及熟悉MATLAB指令;  2、 深刻理解卷积运算,利用离散卷积实现连续卷积运算;  3、 深刻理解信号与系统的关系,学习MATLAB
    发表于 07-18 16:51 0次下载

    MATLAB中常用的数值计算和数值分析基础知识

    MATLAB是一个功能强大的数值计算和科学计算软件,它提供了许多用于数值计算和数值分析的基础功能。
    的头像 发表于 07-07 09:27 1346次阅读

    100个数字IC设计中常用的缩写或术语

    下面为大家收集了100个数字IC设计中常用的缩写或术语,供大家参考,为初学者门的学习添砖加瓦。
    发表于 06-20 12:43 661次阅读

    设计中常用的防松措施

    机械设备中螺栓连接一旦松懈,会引起螺栓脱落导致重大安全隐患,或螺栓松弛预紧力下降导致螺栓连接疲劳寿命大大缩短。因此在设计中要选用适当的防松措施保证螺栓在实际使用中不松脱。 设计中常用的防松措施有如
    的头像 发表于 05-26 11:47 859次阅读
    设计<b class='flag-5'>中常用</b>的防松措施