MATLAB是一种解释语言,执行效率总体比C、Fortran等低,一方面可以利用matlab的profiling分析M文件的各指令耗时,指出运行“瓶颈”。
另一方面,运用编程技巧改进执行效率。
矢量化操作
MATLAB变量的基础类型是矩阵,其主要为向量和矩阵操作设计的。编程时尽量对矢量和矩阵整体编程,而不是循环操作矩阵元素。
clear;
tic
x=0:0.001:10;
for i=1:10001
y(i) = sin(x(i));
end
toc
tic
xx = 0:0.001:10;
yy=sin(xx);
toc
以上效率相差80倍。
MATLAB常见的矢量化操作函数有 : all, any, diff, permute, repmat,logical, find, sort 和 sum 等。
给数组预定义维数
每当需赋值的元素下标超过现有维数,matlab就为该数组或矩阵扩维一次,降低了执行效率。
下标或者索引操作
A(1:k, j) 矩阵A的第j列的前k个元素, A(: , j) 矩阵j列所有元素。
尽量多使用函数文件少用脚本文件
循环体的内容转换为C-MEX
内存优化
VC6.0 调用MATLAB计算引擎环境设置
1. 添加matlab引擎头文件和库函数到vc6的IDE
菜单栏-工具-选项,选择目录标签
(具体matlab目录需要根据实际修改)
include files
Library files
在具体的工程设置中:添加静态链接库 libeng.lib libmat.lib libmex.lib libmx.lib
这几个文件在matlab6 之前需要手工生成 vc的bin目录,分别执行 lib /def: "D:XXXX\Matlab\extern\inlcude\libmx.def" \machine:x86 /out:libmx.lib /nologo
使用例子 matlab/extern/examples/eng_mat/engwindemo.c
在空win32 app 中导入该文件,编译成功,增加联接
运行结果:
VC