首页 > MATLAB【备份】
MATLAB程序优化的常用方法
同样的功能可以采用不同的编程方法实现,不同的编程方法运行速度不同。本节将介绍一些提高 M 文件执行速度、优化内存管理的常用方法,包括循环向量化和数组内存预分配等。
由于 MATLAB 的基本数据类型为矩阵和向量,所以编程时应尽量对向量和矩阵编程,而不是对矩阵元素进行编程。
该代码可以通过下面的代码实现:
MATLAB 中,可以用于分配内存的函数有 zeros 和 cell,分别用于对数值数组和单元数组进行内存分配。
用 zeros 为数组分配内存时,如果数组的类型是 double 以外的类型,则应利用下面的语句进行:
循环向量化
MATLAB 的一个缺点是当对矩阵的单个元素作循环时运算速度很慢。编程时,把循环向量化,不但能缩短程序的长度,更能提高程序的执行效率。由于 MATLAB 的基本数据类型为矩阵和向量,所以编程时应尽量对向量和矩阵编程,而不是对矩阵元素进行编程。
示例1
向量化 for 循环,具体程序如下:% loop.m tic x=1; for k=1:1001 y(k)=log10(x); x=x+0.01; end toc >> loop时间已过 0.019843 秒。
示例2
向量化 for 循环的另一种操作方法,具体程序如下:% vetcor_loop.m tic x=1:0.01:10; y=log10(x); toc >> vector_loop时间已过 0.003630 秒。
数组内存预分配
在 for 循环或 while 循环中,如果数组大小随着循环而增加,则会严重影响内存的使用效率。如下面的代码:x=0; for k=2:1000 x(k)=x(k-1)+5; end该代码首先创建变量 x,其值为 0,在 for 循环中,将其扩展为长度为 1000 的一维数组。在每一次扩展中,系统需要寻找更大的连续内存区域,用于存放该数组,并将数组从原地址移动到新地址中。
该代码可以通过下面的代码实现:
x = zeros(1, 1000); for k = 2:1000 x(k) = x(k-1) + 5; end在该代码中,首先为数组 x 分配内存区域,将x的所有元素赋值为 0。这样可以节约重新分配内存的时间,提高程序的效率。
MATLAB 中,可以用于分配内存的函数有 zeros 和 cell,分别用于对数值数组和单元数组进行内存分配。
用 zeros 为数组分配内存时,如果数组的类型是 double 以外的类型,则应利用下面的语句进行:
A=zeros(100,'int8');该语句为 A 分配 100×100 的 int8 类型的内存。
A=int8(zeros(100));该语句为 A 分配 100×100 的 double 类型的内存,再将其转换为 int8 类型。
其他方法
- 对数组赋值时避免改变数组的类型或者数组的大小。
- 对实数进行操作,尽量避免对复数的操作。
- 合理使用逻辑运算符。
- 避免重载 MATLAB 中的内置函数和操作符。
- 通常情况下函数的运行效率高于脚本文件。
- load 和 save 函数效率高于文件输入输出函数。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算